Buffered Writer .write不写入文件

时间:2017-06-09 00:31:31

标签: java io bufferedwriter

此代码未写入文件,我无法找到原因。

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()不为空

enter image description here

按照别人的说法,我在这里做了一个最低限度可验证的例子 我简化了它,它仍然无法写入文件:

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

1 个答案:

答案 0 :(得分:0)

您正在选择将文件放在此处的位置

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