我试图在java中复制文件并将其移动到新文件夹。这是我一直在使用的代码,但我总是在指定的目录中收到此错误“(访问被拒绝)”。有没有办法可以解决这个或更好的方法来复制文件?感谢
try{
File f1 = new File(fpath);
File f2 = new File("C:/users/peter/documents/foldertest2/hats");
InputStream in = new FileInputStream(f1);
//For Append the file.
//OutputStream out = new FileOutputStream(f2,true);
//For Overwrite the file.
OutputStream out = new FileOutputStream(f2);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0){
out.write(buf, 0, len);
}
in.close();
out.close();
System.out.println("File copied.");
}
catch(FileNotFoundException ex){
System.out.println(ex.getMessage() + " in the specified directory.");
System.exit(0);
}
catch(IOException e){
System.out.println(e.getMessage());
}
更新: 我检查了文件夹权限,它们都对所有用户开放,我的
答案 0 :(得分:36)
Apache Commons IO也是另一种方式,特别是FileUtils.copyFile();
它可以为你处理所有繁重的工作。
答案 1 :(得分:18)
使用Java 7:
import static java.nio.file.StandardCopyOption.*;
Files.copy(source, target, REPLACE_EXISTING);
http://docs.oracle.com/javase/tutorial/essential/io/copy.html
答案 2 :(得分:3)
有没有办法可以解决此问题或更好的方法来复制文件?
如果您有选项,我建议您使用Java version 7,并使用Path.copyTo
方法。
将此路径所在的文件复制到目标位置。 [...]
否则我建议至少使用NIO包和FileChannels
。
答案 3 :(得分:2)
编辑乱搞,第二次尝试:
您必须为FileOutputStream提供一个有效的文件名,只需将文件名附加到目标路径C:/users/peter/documents/foldertest2/hats/hat3
,只有文件夹名称,它将尝试访问该文件夹,就好像它是一个文件一样
答案 4 :(得分:0)
如果您收到此异常,则访问权限将被拒绝,即您无权写入指定的目录或文件。 所以,先检查一下。例如,尝试手动在指定目录中创建文件。你可能试图在别人的主目录中创建文件?或者您的java程序正在以其他用户身份运行? foldertest2怎么样?它是否存在且可写?尝试将文件复制到那里。
最后的提示。当您设法复制文件时,我建议您使用IOUtils.copy()
(来自jacarta commons)。我经常使用它。它几乎完全与您实现的相同,但只能编写一行代码。
答案 5 :(得分:0)
嗯,看起来你试图在Windows上运行它,如果你不在你的路径中使用\而不是/?
正如AlexR所说,检查你试图写入的目录的权限。