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();
}
}
相反,它绝对没有。它完全是空白的。我非常感谢任何有关此错误的帮助!答案 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