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