Java 从文本文件中删除元素
我创建了一个名为“Month.txt”的文本文件,其中包含以下字符串:“一月-二月-三月”。 下面是我从文本文件中删除“二月”的程序:Java 从文本文件中删除元素,java,Java,我创建了一个名为“Month.txt”的文本文件,其中包含以下字符串:“一月-二月-三月”。 下面是我从文本文件中删除“二月”的程序: import java.io.*; import java.util.*; class Delete_element_from_txtfile { public static void main()throws IOException { FileReader fr=new FileReader("Month.txt");
import java.io.*;
import java.util.*;
class Delete_element_from_txtfile
{
public static void main()throws IOException
{
FileReader fr=new FileReader("Month.txt");
BufferedReader br=new BufferedReader(fr);
FileWriter fw=new FileWriter("Month.txt");
BufferedWriter bw=new BufferedWriter(fw);
PrintWriter pw=new PrintWriter(bw);
String str;
String newstr="";
while((str=br.readLine())!=null)
{
StringTokenizer S=new StringTokenizer(str);
while(S.hasMoreTokens()==true)
{
String month=S.nextToken();
if(month.equals("February"))
{
continue;
}
else
newstr=newstr+(month+" ");
}
}
pw.print(newstr);
pw.close();
bw.close();
fw.close();
br.close();
fr.close();
}
}
但是在运行程序之后,当我打开文件时,它是空的。我刚刚开始用java处理文件,所以我不知道发生了什么。我想在这个问题上得到一些帮助。谢谢 问题在于您正在打开同一个文件进行读写。因为您在读取后立即打开文件进行写入,因此它将覆盖当前数据 关闭文件读取器后,只需移动写入代码即可 更新代码如下:
public static void main(String []ars)throws IOException
{
FileReader fr=new FileReader("Month.txt");
BufferedReader br=new BufferedReader(fr);
String str;
String newstr="";
while((str=br.readLine())!=null)
{
StringTokenizer S=new StringTokenizer(str);
while(S.hasMoreTokens()==true)
{
String month=S.nextToken();
if(month.equals("February"))
{
continue;
}
else
newstr=newstr+(month+" ");
}
}
br.close();
fr.close();
FileWriter fw=new FileWriter("Month.txt");
BufferedWriter bw=new BufferedWriter(fw);
PrintWriter pw=new PrintWriter(bw);
pw.print(newstr);
pw.close();
bw.close();
fw.close();
}
以下是一个更紧凑、外观更好的解决方案:
List<String> lines = Files.readAllLines(Paths.get("Month.txt")); //read every line
//filer out lines that contain february
lines = lines.stream().filer(line -> !line.contains("February")).collect(Collectors.toList());
Files.write(Paths.get("Month.txt"), lines, Charset.defaultCharset()); //write it back
List line=Files.readAllLines(path.get(“Month.txt”)//读每一行
//文件管理器输出包含二月的行
lines=lines.stream().filer(line->!line.contains(“二月”)).collect(Collectors.toList());
write(path.get(“Month.txt”)、line、Charset.defaultCharset()//写回
无需手动关闭文件读取流,无需使用while循环和类,如
StringTokenizer
我明白了。你能再澄清一下为什么文件会被覆盖吗?谢谢签出此问题