【问题标题】:How to close Files.write如何关闭 Files.write
【发布时间】:2017-12-12 12:11:31
【问题描述】:

我将尝试创建目录并将数据写入该文件。我正在尝试使用 java nio 来更有效地编写文件。我的疑问是如何在写下它之后关闭它是我的代码。请给我建议。

这是创建目录和写入大型数据文件 [200 kb] 的正确方法吗?

    java.nio.file.Path path = java.nio.file.Paths.get(filePath);

    try {
        if (!java.nio.file.Files.exists(path)) {
            java.nio.file.Files.createDirectories(path.getParent());
            path = java.nio.file.Files.createFile(path);
            path = java.nio.file.Files.write(path, data.getBytes());
        } else {
            java.nio.file.Files.write(path, data.getBytes("utf-8"), 
                    java.nio.file.StandardOpenOption.CREATE, java.nio.file.StandardOpenOption.TRUNCATE_EXISTING);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
    }

【问题讨论】:

  • 在 Java 11 中,您可以使用 Files.writeString 而不是 Files.write,这样您就不必调用 getBytes

标签: java io nio


【解决方案1】:
  1. 关闭文件

您不必关闭它,因为写入方法本身可以确保在写入最后一个字节后关闭该文件。

根据Files.write()方法的描述。

将字节写入文件。 options 参数指定如何 文件被创建或打开。如果没有选项,那么这个方法 就像 CREATE、TRUNCATE_EXISTING 和 WRITE 选项一样 展示。换句话说,它打开文件进行写入,创建 如果文件不存在,或者最初截断现有文件 常规文件的大小为 0。字节数组中的所有字节都被写入 到文件。该方法确保在所有字节时关闭文件 已被写入(或 I/O 错误或其他运行时异常是 抛出)。如果发生 I/O 错误,那么它可能会在文件具有 创建或截断,或在某些字节已写入 文件。

  1. 创建目录和写入大数据文件的正确方法。

只要处理所有异常情况就可以了。

【讨论】:

  • @Umesh。我们可以传递 File 对象来使用 nio 写入吗?
  • 不,没有提供这种方法,但你可以随时写你的
【解决方案2】:

Files.write(...) 方法“...确保在写入所有字节后关闭文件..”,请参阅Java SE 8 Doc

如需将数据写入文件,请参阅Reading, Writing, and Creating Files

【讨论】:

【解决方案3】:

如果您使用 JDK 1.7 及更高版本,请使用 try-with-resource 它将自动处理资源的关闭。例如。 try(initialize your file resource here){} 阅读更多关于 try-with-resource here

【讨论】:

  • @Anil,我们可以在 try-with-resource 中使用 java nio,我尝试了链接。但我没有得到。
猜你喜欢
  • 2012-12-25
  • 2013-11-29
  • 2018-12-08
  • 1970-01-01
  • 2012-05-04
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多