BufferedWriter不写txt文件

时间:2018-03-16 23:26:53

标签: 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中的文件时,文件为空

1 个答案:

答案 0 :(得分:1)

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

以下是验证我的评论的脏方法。我重新打开你的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();
            }

    }



}