Java BufferedWriter不';无法写入文件

Java BufferedWriter不';无法写入文件,java,bufferedwriter,Java,Bufferedwriter,我想在文件中写入一些字符串(使用Java8)。这个代码段编译时并没有任何错误,但并没有写入到文件中…我是NoobOfcorz…有什么建议吗 import java.io.BufferedWriter; import java.io.FileWriter; public class Main { private static final String FILENAME = "C:\\IntelliJfiles\\write-to-

我想在文件中写入一些字符串(使用Java8)。这个代码段编译时并没有任何错误,但并没有写入到文件中…我是NoobOfcorz…有什么建议吗

import java.io.BufferedWriter;
import java.io.FileWriter;

public class Main {
    private static final String FILENAME = "C:\\IntelliJfiles\\write-to- 
                                              file\\src\\pl\\sca\\file.txt";

    public static void main(String[] args) {

        try {
            String str = "kal";

            BufferedWriter writer = new BufferedWriter(new 
            FileWriter(FILENAME));
            writer.write(str);

            System.out.println("Done");

        }
        catch (Exception e) {
            System.out.println("There's no file");
            e.printStackTrace();
        }
    }
}

在您关闭文件之前,它可能不会写入该文件-写入磁盘非常耗时,因此它会等到写入足够的字符后才将它们实际放入文件中。这就是
BufferedWriter
中缓冲的意思。如果您关闭它,它将“刷新”磁盘上的缓冲区

您可以使用
writer.close()

或者,您可以使用,它将自动关闭写入程序:

try (FileWriter fw = new FileWriter("C:\\IntelliJfiles\\write-to-file\\src\\pl\\sca\\file.txt");
     BufferedWriter bw = new BufferedWriter(fw)){
    bw.write("kal");
} catch (Exception e) {
    e.printStackTrace();
}

在您关闭文件之前,它可能不会写入该文件-写入磁盘非常耗时,因此它会等到写入足够的字符后才将它们实际放入文件中。这就是
BufferedWriter
中缓冲的意思。如果您关闭它,它将“刷新”磁盘上的缓冲区

您可以使用
writer.close()

或者,您可以使用,它将自动关闭写入程序:

try (FileWriter fw = new FileWriter("C:\\IntelliJfiles\\write-to-file\\src\\pl\\sca\\file.txt");
     BufferedWriter bw = new BufferedWriter(fw)){
    bw.write("kal");
} catch (Exception e) {
    e.printStackTrace();
}

您需要关闭编写器,您可以使用:

或者只需添加
writer.close()


您需要关闭编写器,您可以使用:

或者只需添加
writer.close()


BufferWriter
的另一种选择是,如果您的目标是只向文件写入一次

String str = "test";
Path path = Paths.get("file.txt");

try {
    byte[] bytes = str.getBytes(StandardsCharsets.UTF_8);
    Files.write(path, bytes);
} catch (FileNotFoundException e) {
    // Handle file absence.
} catch (IOException e) {
    // Handle other exceptions related to io.
}

注意:如上所述,捕获
异常
并不表示所有情况下都没有文件。如果要处理与io相关的所有异常情况的文件缺失或IOException,请捕获
FileNotFoundException

缓冲写入程序的另一种替代方法是只向文件写入一次

String str = "test";
Path path = Paths.get("file.txt");

try {
    byte[] bytes = str.getBytes(StandardsCharsets.UTF_8);
    Files.write(path, bytes);
} catch (FileNotFoundException e) {
    // Handle file absence.
} catch (IOException e) {
    // Handle other exceptions related to io.
}
注意:如上所述,捕获
异常
并不表示所有情况下都没有文件。如果要处理与io相关的所有异常情况的文件缺失或IOException,请捕获
FileNotFoundException

试试这个

try {
            String str = "kal";
            BufferedWriter writer = new BufferedWriter(new 
            FileWriter(FILENAME));
            writer.write(str);
            writer.close();
            System.out.println("Done");

        }
试试这个

try {
            String str = "kal";
            BufferedWriter writer = new BufferedWriter(new 
            FileWriter(FILENAME));
            writer.write(str);
            writer.close();
            System.out.println("Done");

        }

写入文件后,应将其关闭。永远不要让资源处于打开状态。您应该使用“Try with resources”Does
writer.close()帮助?尝试使用资源或添加
writer.close()writer.close();帮助,谢谢:)您应该在写入文件后关闭该文件。永远不要让资源处于打开状态。您应该使用“Try with resources”Does
writer.close()帮助?尝试使用资源或添加
writer.close()writer.close();帮助,谢谢:)一个小的改进:捕获异常并不表示文件在所有情况下都丢失。如果您对此“事件”感兴趣,则应捕获
FileNotFoundException
,并捕获处理io时可能遇到的其他错误情况的
IOException
s。此外,您还可以将catch子句移动到内部try块。@sn42我刚刚从问题中复制了代码并对其进行了补充:)@PeterSamokhin肯定这是解决原始问题的一个好答案。一个很好的答案是,要么说明您提供的代码有一个bug(IO操作失败并不意味着所有情况下都没有文件),要么更改原始代码,并解释为什么这些更改是必要的或可取的。特别是对于那些从Java开始的开发人员来说,我想这些建议是很有价值的。仅供参考这是一个改进无需更正:)一个小改进:捕获异常并不表示文件在所有情况下都丢失。如果您对此“事件”感兴趣,则应捕获
FileNotFoundException
,并捕获处理io时可能遇到的其他错误情况的
IOException
s。此外,您还可以将catch子句移动到内部try块。@sn42我刚刚从问题中复制了代码并对其进行了补充:)@PeterSamokhin肯定这是解决原始问题的一个好答案。一个很好的答案是,要么说明您提供的代码有一个bug(IO操作失败并不意味着所有情况下都没有文件),要么更改原始代码,并解释为什么这些更改是必要的或可取的。特别是对于那些从Java开始的开发人员来说,我想这些建议是很有价值的。仅供参考,这是一个改进,无需更正:)谢谢你的提及,认为IOException足够:)谢谢你的提及,认为IOException足够:)