Sams在24小时编写自己的Java第6版。第一章。 20 ConfigWriter.java错误

时间:2013-01-22 02:32:59

标签: java file-io runtime-error

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();
}

}

相反,它绝对没有。它完全是空白的。我非常感谢任何有关此错误的帮助!

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

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

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

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

  • 等等。

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

找出实际写入文件的位置也很有帮助。在Windows上,您可以尝试使用“搜索”工具。在Linux上,find命令是一个不错的选择; e.g。

  $ 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

之后将其声明为“资源”