java - BufferedWriter不写入txt文件

标签 java file save writer buffered

有人可以帮我解决我的问题吗? 我遇到的问题是 BufferedWriter 无法写入文本文件。 程序编译没有错误。

    int number_of_line_to_delete_in_file = 0,number_of_all_lines = 0;

    System.out.println("Trimmer - Logów pocztowych");
    System.out.println("Rafał Biel v0.5");

        try {
            File file_reader = new File("src/log.txt");
            System.out.println("Lokalizacja pliku LOG: " + file_reader.getAbsolutePath());
            File file_saver = new File("src/logTemp.txt");

            BufferedReader reader = new BufferedReader(new FileReader(file_reader));
            BufferedWriter writer = new BufferedWriter(new FileWriter(file_saver));

            LineNumberReader lnr = new LineNumberReader(reader);

            String line_to_delete = "aaa";
            String checked_line,line_counter;

            while ((line_counter = lnr.readLine()) != null){
                if(line_counter.equals(line_to_delete)) {
                    number_of_line_to_delete_in_file++; // sprawdzenie ilośći linii do usunięcia
                }
                number_of_all_lines++;// sprawdzenie ilośći wszystkich linii w pliku
            }

            System.out.println("W pliku znajduje się " + number_of_all_lines + " lini, w tym do usunięcia " + number_of_line_to_delete_in_file + " linii.");

            while((checked_line = reader.readLine()) != null) {
                String trimmed_line = checked_line.trim();
                if(trimmed_line.equals(line_to_delete)) continue;
                    writer.write("TEST");
            } // składnia odpowiadająca za usunięcie napisu z pliku.

            writer.close();//zamknięcie zapisu
            reader.close();//zamkniecia odczytu

            boolean successful = file_saver.renameTo(file_reader);
            System.out.println("Pomyślnie zakończyłem pracę " + successful);

        }catch (Exception e){
            System.err.println("Błąd: " + e.getMessage());
        }

文件已读取,但当我尝试打开 Temp 中保存的文件时,文件为空

最佳答案

问题是您正在第一个 while 循环中读取整个文件。您的文件指针已经到达 EOF。现在您再次尝试在下一个 while 循环中读取该文件。由于指针已经位于 EOF,它将返回 null,并且您的代码永远不会进入第二个 while 循环。

下面是验证我的评论的肮脏方式。我正在重新打开您的 log.txt 文件以重置指针。它效率不高,但指出了错误。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.LineNumberReader;



public class TestMainResuse {




    public static void main(String[] args) throws Exception
    {
        TestMainResuse t = new TestMainResuse();
        t.test();

    }


    public void test() throws IOException{
        int number_of_line_to_delete_in_file = 0,number_of_all_lines = 0;

        System.out.println("Trimmer - Logów pocztowych");
        System.out.println("Rafał Biel v0.5");

            try {
                File file_reader = new File("src/log.txt");
                System.out.println("Lokalizacja pliku LOG: " + file_reader.getAbsolutePath());
                File file_saver = new File("src/logTemp.txt");

                BufferedReader reader = new BufferedReader(new FileReader(file_reader));
                BufferedWriter writer = new BufferedWriter(new FileWriter(file_saver));

                LineNumberReader lnr = new LineNumberReader(reader);

                String line_to_delete = "aaa";
                String checked_line,line_counter;

                while ((line_counter = lnr.readLine()) != null){
                    if(line_counter.equals(line_to_delete)) {
                        number_of_line_to_delete_in_file++; // sprawdzenie ilośći linii do usunięcia
                    }
                    number_of_all_lines++;// sprawdzenie ilośći wszystkich linii w pliku
                }

//              System.out.println("W pliku znajduje się " + number_of_all_lines + " lini, w tym do usunięcia " + number_of_line_to_delete_in_file + " linii.");
                System.out.println(number_of_all_lines);

                reader.close();
                reader = new BufferedReader(new FileReader(file_reader));

                while((checked_line = reader.readLine()) != null) {
                    System.out.println("In second while loop");
                    String trimmed_line = checked_line.trim();
                    if(trimmed_line.equals(line_to_delete)) continue;
                        writer.write("TEST");
                } // składnia odpowiadająca za usunięcie napisu z pliku.

                writer.close();//zamknięcie zapisu
                reader.close();//zamkniecia odczytu

                boolean successful = file_saver.renameTo(file_reader);
                System.out.println("Pomyślnie zakończyłem pracę " + successful);

            }catch (Exception e){
                e.printStackTrace();
            }

    }



}

关于java - BufferedWriter不写入txt文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49330821/

相关文章:

java - 在哪里可以看到我在工作区中创建的新文件?

python - 如何将二进制文件数据读入数组?

java - 从文件中读取时计算数字

html - 为什么我在论坛中的评论没有保存到数据库中?

CakePHP 新手问题 : How do I duplicate a model and its related data?

java - 如何通过移动网络浏览器运行Android应用程序(渐进式应用程序)

java - 通过 UDP 传输字节缓冲区

Java Spring JPA FetchMode.JOIN 不使用 JOIN

java - 比较方法内的自定义对象

android - 如何使用自定义 View android 保存绘画?