将文件从某个位置复制到另一个位置

时间:2015-03-01 22:02:20

标签: java file outputstream file-writing

我正在尝试读取文件并将其写入特定文件夹。 我正在使用此代码:

private void saveFile(File file){
    try {
        OutputStream out = new FileOutputStream(new File("/Users/default/Desktop/fotos/test.png"));
        Files.copy(file.toPath(), out);
                System.exit(0);

    } catch (IOException ex) {
        Logger.getLogger(GetFiles.class.getName()).log(Level.SEVERE, null, ex);
    }
}

该文件是.png文件。如果我使用这种方法,它将在fotos目录中创建一个新的.png,但是当我双击它时它表示它是空的。 这怎么可能,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

您没有关闭输出流。因此,在写入磁盘之前缓冲在其中的任何数据都将丢失。

您可以使用try-with-resources语句自动关闭流 - 或者您可以使用:

// Alternatives, pass in the `File` to copy to, or make the method generally
// more flexible in other ways.
Files.copy(file.toPath(), Paths.get("/Users/default/Desktop/fotos/test.png"));

顺便说一句,在这样的方法中调用System.exit是不寻常的 - 它不像方法saveFileAndTerminateApplication。同样,你的例外"处理"不是理想的。我基本上会让异常冒泡,即声明你的方法抛出异常。目前,有三种可能性:

  • 一切正常,应用程序终止
  • 副本有效,但System.exit会抛出未经检查的异常
  • 副本失败,因此该方法返回 - 调用者可以推断出错了,但不知道是什么

这对我来说听起来不像明显的结果......