如何在java中复制文件

时间:2011-02-15 12:56:39

标签: java

我试图在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());      
        }

更新: 我检查了文件夹权限,它们都对所有用户开放,我的

6 个答案:

答案 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所说,检查你试图写入的目录的权限。