Buffered Writer .write 不写入文件

Buffered Writer .write not writing to file

这段代码没有写入文件,我找不到原因。

File file = DirectoryChooser.showDialog(fxcontroller.getPrimaryStage());
if (file != null) {
    BufferedWriter bw; 
    try {
        File defaultMusicPath = new File("../defaultMusicPath.txt");
        bw = new BufferedWriter(new FileWriter(defaultMusicPath,true));
        bw.write(file.getAbsolutePath());
        System.out.println("done");
        bw.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

这张图片显示了 defaultMusicPath.txt

的位置

https://i.stack.imgur.com/8vxSO.png

如果您查看底部的图像,则表明 file.getAbsolutePath() 不为空

根据别人的说法,我在这里做了一个最小可验证的例子。
我简化了它,但它仍然无法写入文件:

BufferedWriter bw;
File defaultMusicPath = new File("../defaultMusicPath.txt");
try {
    bw = new BufferedWriter(new FileWriter(defaultMusicPath,true));
    bw.write("it should write this");

    bw.flush();
    bw.close();
    System.out.println("done");
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

您正在选择一个位置来放置文件

File file = DirectoryChooser.showDialog(fxcontroller.getPrimaryStage());

并且您写入的文件是 Eclipse 项目之外的一个文件夹(以防万一不清楚)

File defaultMusicPath = new File("../defaultMusicPath.txt");
bw = new BufferedWriter(new FileWriter(defaultMusicPath,true));

那你就把第一个File对象的路径正确写入第二个File对象了

bw.write(file.getAbsolutePath());

如果没有错误,那么您正在写入文件,因此您可能需要在编辑器中关闭并重新打开该文件。

如果要写入Eclipse 项目,请删除相关../

此外,我建议在捕获后的 finally 块中关闭编写器。或者像这样使用 try-with-resources

File f = new File("defaultMusicPath.txt");
try (BufferedWriter bw = 
        Files.newBufferedWriter(Paths.get(f.toURI()), StandardOpenOption.APPEND); 
        PrintWriter out = new PrintWriter(bw)) {
    out.println("Hello, world!");
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}