Java方法将文件放在文件夹中(两者都作为参数)

Java方法将文件放在文件夹中(两者都作为参数),java,Java,我一直在搜索这个论坛和许多其他资源,试图找到我的Java难题的答案,但是没有用,我不能使用ApacheCommons 我试图把一个文件放进一个特定的文件夹,结果遇到了麻烦;该文件夹已使用.mkdir()创建: 使用JFileChooser选择该文件并将其作为文件对象返回,但我发现很难将该文件放入目录(repositoryDir.mkdir();) 我需要传递目录位置和文件位置作为参数,因为我使用的是基于菜单的系统 我已经试过: File file = new File(dir, pFile);

我一直在搜索这个论坛和许多其他资源,试图找到我的Java难题的答案,但是没有用,我不能使用ApacheCommons

我试图把一个文件放进一个特定的文件夹,结果遇到了麻烦;该文件夹已使用.mkdir()创建:

使用JFileChooser选择该文件并将其作为文件对象返回,但我发现很难将该文件放入目录(
repositoryDir.mkdir();

我需要传递目录位置和文件位置作为参数,因为我使用的是基于菜单的系统

我已经试过:

File file = new File(dir, pFile);
但这似乎又是文件类型和字符串类型之间的冲突


如有任何建议,将不胜感激

只创建一个新文件是行不通的

如果您可以使用Java1.7,那么您就安全了:请查看该类

但是,它使用新的java.nio.Path而不是java.io.File,因此您必须创建一个Path对象:

FileSystem fs = FileSystems.getDefault();
Path p = fs.getPath( "C:/Windows/" );

假设
pFile
是您的源文件,
dir
是您的目标目录,您将需要创建一个新的目标文件:

File targetFile = new File(dir, pFile.getName());
然后,您需要将pFile的内容复制到targetFile。您可以通过多种不同的方式实现这一点,但这里有一种(为了清晰起见,省略了异常处理):

其中,copyStream方法定义为:

public static void copyStream(final InputStream inputStream, final OutputStream outputStream, final int bufferLength) throws IOException {
    // copy the input stream to the output stream
    byte[] buf = new byte[bufferLength];
    int len;
    while ((len = inputStream.read(buf)) > 0) {
        outputStream.write(buf, 0, len);
    }
}

文件类型和字符串类型之间的冲突是什么意思?是否存在编译错误?为了澄清,可以安全地假设您是:使用JFileChooser选择现有文件,然后希望将该文件从其现有位置移动到新目录中?文件对象不表示文件的内容,它们仅表示文件的名称和位置。不能仅通过操纵文件对象来移动物理文件。您需要将源文件的内容复制到目标文件(然后可以选择删除源文件)。重命名只需移动文件即可。这有帮助吗?A4L:该方法需要“String,String”或“File,String”作为参数格式。杰森:是的,那就是我一直出错的地方;我需要摆脱那种假定对象将自动提供其字段的思维模式。感谢Jason,代码准确地描述了它,谢谢,非常感谢!不要忘记关闭inputstream,然后刷新并关闭outputstream。请参阅上面的编辑。谢谢,杰森会这么做的。
FileInputStream fis = new FileInputStream(pFile);
FileOutputStream fos = new FileOutputStream(targetFile);
copyStream(fis, fos, 10000);
fos.flush();
fos.close();
fis.close();
public static void copyStream(final InputStream inputStream, final OutputStream outputStream, final int bufferLength) throws IOException {
    // copy the input stream to the output stream
    byte[] buf = new byte[bufferLength];
    int len;
    while ((len = inputStream.read(buf)) > 0) {
        outputStream.write(buf, 0, len);
    }
}