【问题标题】:BufferedWriter don't write txt fileBufferedWriter 不写 txt 文件
【发布时间】:2018-08-26 02:46:35
【问题描述】:

有人可以帮我解决我的问题吗? 我有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 中的文件时,文件为空

【问题讨论】:

    标签: java file save writer buffered


    【解决方案1】:

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

    以下是验证我的 cmets 的肮脏方式。我正在重新打开您的 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();
                }
    
        }
    
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多