有人可以帮我解决我的问题吗?
我遇到的问题是 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/