Java - 打开现有文件或使用IO流创建一个文件(如果不存在)

时间:2009-08-28 12:54:59

标签: java file-io overwrite

我正在遵循Java网站(http://java.sun.com/docs/books/tutorial/essential/io/file.html#createStream)关于使用IO流创建或编写文件的指示。但是,它提供的代码似乎在多个地方被破坏了:

import static java.nio.file.StandardOpenOption.*;

Path logfile = ...;

//Convert the string to a byte array.
String s = ...;
byte data[] = s.getBytes();

OutputStream out = null;
try {
    out = new BufferedOutputStream(logfile.newOutputStream(CREATE, APPEND));
    ...
    out.write(data, 0, data.length);
} catch (IOException x) {
    System.err.println(x);
} finally {
    if (out != null) {
        out.flush();
        out.close();
    }
}

例如,Eclipse在导入时崩溃,在使用Path类时崩溃为初学者。但是,本教程似乎提供了我想要做的事情 - 我想写一个文件,如果它存在(覆盖)或创建一个文件,如果它不存在,最后我将写一个输出流(其中使用.newOutputStream()方法在这里创建。因此,使用输出流创建/写入似乎是一个可能的候选者。有谁知道如何解决上述问题以使其有效,或者更好的方式来做我想做的事情?

1 个答案:

答案 0 :(得分:3)

该示例似乎使用的是不属于Sun Java 6的API。

Path和包java.nio.file是将在Sun JDK 7中添加的API的一部分。请注意,Path文档的链接指向API Sun的Java开源开发版OpenJDK的文档。

因此,如果您使用的是常规Sun Java 6,则无法使用这些API。

阅读the start page of the tutorial上的警告:

  

文件I / O(具有NIO.2)

     

本节正在更新,以反映即将发布的版本JDK7的功能和约定。您可以从java.net下载当前的JDK7快照。我们已经发布了这个初步版本,因此您现在可以获得最新信息,因此您可以告诉我们有关本教程可能出现的错误,遗漏或改进。

在Sun Java 6中,您只需使用FileOutputStream即可。如果文件不存在,它将自动创建一个新文件,如果存在则覆盖现有文件:

FileOutputStream out = new FileOutputStream("filename.xyz");
out.write(data, 0, data.length);

注意:要编写文本文件(您似乎想要做什么),请使用Writer(例如FileWriter)而不是直接使用OutputStreamWriter将负责使用字符编码转换文本。

有关Java SE 6中可用内容的信息,请参阅Java SE 6 API Documentation(特别是软件包java.io的文档)。