1

我按照 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() 方法在此处创建)。因此,使用输出流创建/写入似乎是一个可能的候选者。有谁知道如何解决上述问题以使其正常工作,或者是一种更好的方法来做我想做的事情?

4

1 回答 1

3

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

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

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

阅读教程起始页上的警告:

文件 I/O(采用 NIO.2)

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

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

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

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

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

于 2009-08-28T12:59:30.387 回答