java 删除某行和读写txt文件


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();
}
Joyce /
Published under (CC) BY-NC-SA in categories java  tagged with txt  io