当前位置: 首页 > 知识库问答 >
问题:

出于某种原因使用FileWriter和BufferedWriter清除文件?

贲言
2023-03-14

出于某种原因,当我在我的程序中创建一个新的BufferedWriter和FileWriter时(即使我还没有用它来写任何东西),它会清除我所选择的文件中的所有文本。

selectedFile由JFileChooser确定。

public static File selectedFile;

    public static void Encrypt() throws Exception {

    try {
        //if I comment these two writers out the file is not cleared.
        FileWriter fw = new FileWriter(selectedFile.getAbsoluteFile());
        BufferedWriter bw = new BufferedWriter(fw);

        List<String> lines = Files.readAllLines(Paths.get(selectedFile.toString()),
                Charset.defaultCharset());
        for (String line : lines) {
            System.out.println(line);
            System.out.println(AESencrp.encrypt(line));

            /*file is cleared regardless of whether or not these are commented out or
             * not, as long as I create the new FileWriter and BufferedWriter the file
             * is cleared regardless.*/

            //bw.write(AESencrp.encrypt(line));
            //bw.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

埃森克普。encrypt只是我拥有的一个加密类,它不会影响它。如果我创建了一个新的FileWriter和BufferedWriter,那么这个循环甚至不会运行(至少我不这么认为,因为我没有打印行的加密或文件的原始内容,如果我没有创建新的FileWriter/BufferedWriter,它会打印)

        for (String line : lines) {
            System.out.println(line);
            System.out.println(AESencrp.encrypt(line));

            /*file is cleared regardless of whether or not these are commented out or
             * not, as long as I create the new FileWriter and BufferedWriter the file
             * is cleared regardless.*/

            //bw.write(AESencrp.encrypt(line));
            //bw.close();
        }

共有3个答案

戚奇略
2023-03-14

你打开它写(为了追加使用附加选项的构造函数)。你期望会发生什么?此外,您的out注释关闭()在错误的地方。它应该在循环之外。

易昌翰
2023-03-14

听起来像是要附加到文件中,而不是覆盖它。使用适当的FileWriter构造函数,该构造函数接受关于是否追加的布尔值。

FileWriter fw = new FileWriter(selectedFile.getAbsoluteFile(), true);

您正在使用的构造函数,没有布尔值,默认为覆盖模式。当您以覆盖模式创建FileWriter时,它会清除文件,以便可以从头开始写入。

true作为第二个参数传递将允许追加而不是覆盖。

单淳
2023-03-14

这是因为您正在使用的FileWriter的构造函数会截断已经存在的文件。

如果要附加数据,请使用:

new FileWriter(theFile, true);
 类似资料:
  • 我想知道FileWriter是否缓冲。 在这个SO问题中,它似乎是,然而在这个SO问题中,它似乎不是。(这将是每次写入(...)被调用时的系统调用。 所以基本上读这两个问题 提前感谢。 编辑:通过阅读此API解决了问题,我引用了相关部分: 每次调用write()方法都会导致对给定字符调用编码转换器。在写入底层输出流之前,生成的字节在缓冲区中累积。可以指定此缓冲区的大小,但默认情况下,它对于大多数用

  • 这是我的密码 没有语法错误,但是我的Jtag没有添加(按钮工作正常)。我不想从null更改布局,因为我希望能够定义按钮和标签的位置。有人知道为什么这行不通吗?

  • 问题内容: 只是尝试删除所有文档,并这样做: 然后承诺: 我得到答复: 但是当我搜索时,我仍然会得到结果。 我做错什么了? 问题答案: 不确定是否重要,但是您也可以编码: 要尝试的另一件事是使用POST方法(调用update的首选方法):

  • 这两者有什么区别?我只是在学习Java ATM,但似乎我可以双向写入文件,即(我没有复制try-catch块) 和 我理解先缓冲数据的概念,那么这是否意味着第一个示例逐个写入字符,第二个示例先将其缓冲到内存中并写入一次?

  • 问题内容: 两者之间有什么区别?我只是在学习Java ATM,但似乎可以双向写文件,即(我没有在这里复制try-catch块。) 和 我了解先缓冲数据的概念,这是否意味着第一个示例将字符一个接一个地写入,而第二个第一个示例则将其缓冲到内存中并写入一次? 问题答案: 如果您使用BufferedWriter则效率更高 在刷新/关闭之间有多次写入 与缓冲区大小相比,写操作较小。 在您的示例中,您只有一次

  • 问题内容: 我是PHP的新手,正在使用mail函数发送无法正常工作的电子邮件。我收到成功消息,但仍然无法正常工作 相同的代码 我是否缺少任何内容,我是否需要为此功能包括任何文件。.我来自asp.net,这是在网站上找到的基本脚本。 我尝试了其他与邮件相关的脚本,这些脚本也无法使用。 我正在网站上而不是在本地上运行此脚本 问题答案: 这可能是配置错误。如果您坚持使用PHP 函数,则必须进行编辑。 如