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

标签 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,但是当我双击它时,它会说它是空的。 这怎么可能?我该如何解决这个问题?

最佳答案

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

您可以使用 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 抛出未经检查的异常
  • 复制失败,因此该方法返回 - 调用者可以推断出了问题,但不知道是什么问题

对我来说,这听起来不像是一组明显结果......

关于java - 将文件从一个位置复制到另一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28799664/

相关文章:

java - 如何为 PreferenceActivity 实现自己的数据存储后端

java - 如果通过java使用neo4j,如何重置neo4j数据库?

c - 成功调用 fseek() 函数会清除流的文件结束指示器

c++ - 检查特定目录中是否存在与 abc* 匹配的文件的最佳方法

c++ - std::string 未正确终止

java - 在运行时通过指定路径加载log4j2.xml或properties配置文件

java - Android服务编辑

android - 将 EditTextPreference 绑定(bind)到给定的首选项文件 (getSharedPreferences)

spring - 如何将 log4j 输出重定向到 HttpServletResponse 输出流?

java - 如何在http请求中指定范围?