3

出于某种原因,当我在我的程序中创建一个新的 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();
    }
}

AESencrp.encrypt 只是我拥有的一个加密类,它不会影响它。如果我创建一个新的 FileWriter 和 BufferedWriter 那么这个循环甚至不会运行(至少我不相信,因为我没有得到行的加密或打印的文件的原始内容,如果我没有打印的话' t 创建了新的 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();
        }
4

3 回答 3

3

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

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

new FileWriter(theFile, true);
于 2013-06-21T21:41:21.553 回答
2

听起来您想追加到文件中,而不是覆盖它。使用正确的FileWriter构造函数来boolean决定是否追加

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

您正在使用的构造函数,没有boolean, 默认为“覆盖”模式。一旦您创建了FileWriter覆盖模式,它就会清除文件,以便它可以从头开始写入。

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

于 2013-06-21T21:41:40.267 回答
0

您打开它进行写入(附加使用带有附加选项的构造函数)。你预计还会发生什么?此外,您的评论close()位于错误的位置。它应该在循环之外。

于 2013-06-21T21:41:38.803 回答