有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java通过使用数组来存储文本文件的行,通过覆盖来删除文本文件中的行

我需要尽可能以最简单的方式完成。。。。。我哪里出了问题

这是我到目前为止的代码

import java.io.*;
class test
{
public static void main()throws IOException
{
    FileReader f=new FileReader("g.txt");
    BufferedReader in=new BufferedReader(f);
    PrintWriter p=new PrintWriter(new BufferedWriter(new FileWriter("g.txt")));
    String ar[]=new String[5];
    String text;int i=0;
    while((text=in.readLine())!=null)
    {
        ar[i]=text;
        i++;
    }
    i=0;
    for(i=0;i<ar.length;i++)
    {
        if(ar[i].equals("the da vinci code"))
        {
            ar[i]=null;
            break;
        }
    }
    for(int j=0;j<ar.length;j++)
    {
        System.out.println(ar[j]);
        p.println(ar[i]);
    }
    in.close();
    p.close();
}
}

共 (2) 个答案

  1. # 1 楼答案

    这里有一种更好的方法,就是在阅读本文时写入另一个文件,尝试捕获并关闭文件句柄,最后使用日志

    package files;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;//growing array
    
    class ReadFileRemoveLines// class test is a bad name
    {
        public static void main(String[]args)throws IOException//need to follow the signature or cant start the program
    {
        FileReader f=new FileReader("g.txt");
        BufferedReader in=new BufferedReader(f);
    
        ArrayList<String> ar = new ArrayList<String>(5);//initial size if you expect so many lines or leave out the 5 ()
        String text;int i=0;
        while((text = in.readLine()) != null)//spaces between symbols help readability
        {
            //why not test test here
            if(!text.equals("the da vinci code")){
                ar.add(text);
            }
            ///i++;
        }
        /*
        i=0;
        for(i=0;i<ar.length;i++)
        {
            if(ar[i].equals("the da vinci code"))
            {
                ar[i]=null;
                break;
            }
        }*/
        in.close();
        PrintWriter p=new PrintWriter(new BufferedWriter(new FileWriter("g.txt")));
        for(int j=0;j<ar.size();j++)
        {
            System.out.println(ar.get(j));
    
            p.println(ar.get(j));//why are you printint of i loop is j
        }
    
        p.close();
    }
    }
    
  2. # 2 楼答案

    仅对该行进行底层引用null不会删除该文件中的该行

    1. 你需要完整地阅读文件
    2. 选择您想要的行并将其存储在集合中
    3. 重命名或移动该文件(创建备份以防万一)
    4. 使用相同的文件名再次写入所有行