1

Sams 在 24 小时内自学 Java 第六版,Rogers Cadenhead 第 20 章ConfigWriter.java错误

我是Java初学者。我正在阅读这篇文章标题中列出的 Java 书籍。我对这怎么行不通感到非常困惑。该代码应该创建一个名为的文件program.properties并将文本放入其中的第 10 行到第 12 行。

import java.io.*;

class ConfigWriter {
String newline = System.getProperty("line.separator");

ConfigWriter() {
    try {
        File file = new File("program.properties");
        FileOutputStream fileStream = new FileOutputStream(file);
        write(fileStream, "username=max");
        write(fileStream, "score=12550");
        write(fileStream, "level=5");
    } catch (IOException ioe) {
        System.out.println("Could not write file");
    }
}

void write(FileOutputStream stream, String output)
    throws IOException {

    output = output + newline;
    byte[] data = output.getBytes();
    stream.write(data, 0, data.length);
}

public static void main(String[] arguments) {
    ConfigWriter cw = new ConfigWriter();
}

}

相反,它绝对什么都不做。它完全空白。对于此错误,我将不胜感激!

4

2 回答 2

1

您的代码中没有错误或异常。该片段实际上创建了文件。尝试通过提供测试路径来测试 src。

File file = new File("C:\\Test\\test.txt");

上述修改正确地创建了文件。如前所述,您也可以使用fileStream.flush();

于 2013-01-22T02:44:29.527 回答
0

最可能的问题是您对文件的写入位置感到困惑。

如果您使用相对路径名(如“program.properties”)写入文件,Java 将尝试在应用程序的“当前目录”中打开/创建文件。

  • 如果您直接从命令提示符/shell 运行代码,则当前目录将是 shell 的当前目录……在您运行程序时。

  • 如果您使用包装脚本启动,则该脚本可能会在启动程序之前更改当前目录。

  • 如果从 IDE 启动,则 IDE 将确定当前目录。

  • 等等。

要避免此问题,请使用绝对路径名。

弄清楚该文件的实际写入位置也是有益的。在 Windows 上,您可以尝试使用搜索工具。在 Linux 上,该find命令是一个不错的选择;例如

  $ sudo find / -name properties.properties | less

...然后等待。


请注意,在此特定示例中不需要冲洗和关闭。您正在使用FileOutputStream未缓冲的。但是,如果您想这样做,您的代码需要如下所示:

File file = new File("program.properties");
try (FileOutputStream fileStream = new FileOutputStream(file)) {
    write(fileStream, "username=max");
    write(fileStream, "score=12550");
    write(fileStream, "level=5");
    fileStream.flush();
} catch (IOException ioe) {
    System.out.println("Could not write file");
}

请注意,这fileStream是隐式关闭的,因为我们在try

于 2013-01-22T03:10:24.880 回答