我正在遵循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()方法在这里创建。因此,使用输出流创建/写入似乎是一个可能的候选者。有谁知道如何解决上述问题以使其有效,或者更好的方式来做我想做的事情?
答案 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
)而不是直接使用OutputStream
。 Writer
将负责使用字符编码转换文本。
有关Java SE 6中可用内容的信息,请参阅Java SE 6 API Documentation(特别是软件包java.io
的文档)。