java中貌似没有直接删除某行的方法,这里用的方法是把文件里的内容读出来,写入一个String里,(不要的那行找到,不要写入String),然后再重新写入文件,注意:
这里重新写入不要用下面的raf的方法写入,因为这里的raf写入是从头开始覆盖之前的文件,如果现在的String比之前的文件大的话可以把之前的文件全部覆盖掉,但是如果新的String比之前的方件小的话,那写入后的结果是新的String和旧的String长出新的String的结合体。
还要注意,这里用bw写入文件,最后要关掉流:bw.close();
还有这里一旦开始:
FileWriter fw = new FileWriter("./a.txt");
BufferedWriter bw = new BufferedWriter(fw);
之后,在close()之前,这个文件的其它操作如下面的s = lnr.readLine();就无效了,你会发现如果
FileWriter fw = new FileWriter("./a.txt");
BufferedWriter bw = new BufferedWriter(fw);
写在s = lnr.readLine();之前的话,close()之前,这个s的值是空的,得不到值。
public static void delete(String name) throws Exception {
RandomAccessFile raf = new RandomAccessFile("./a.txt", "rw");
FileReader fr = new FileReader("./a.txt");
LineNumberReader lnr = new LineNumberReader(fr);
FileWriter fw = new FileWriter("./a.txt");
BufferedWriter bw = new BufferedWriter(fw);
String s = null;
String file = "";
int count = 0;
s = lnr.readLine();
while (s != null) {
String[] x = s.split(" ");
if (!x[0].equals(name)) {
if (count == 0)
file += s;
else
file += "\n" + s;
}
count++;
s = lnr.readLine();
}
FileWriter fw = new FileWriter("./a.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write(file);
bw.close();
fw.close();
}