【问题标题】:remove the line(object) in text file through console通过控制台删除文本文件中的行(对象)
【发布时间】:2020-05-11 21:27:59
【问题描述】:

我不知道如何通过控制台从文本文件中删除带有姓氏的一行。我必须在控制台中写出一个姓氏并删除该姓氏的所有记录。 我的文件.txt

name surname data 11.11.1111
name1 surnama1 data1 12.12.2010

我的 Person 类:

public class Person implements Serializable, Comparable<Person> {

    public String name;
    public String surname;
    public String secondName;
    public String age;
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age.equals(person.age) &&
                Objects.equals(name, person.name) &&
                surname.equals(person.surname) && secondName.equals(person.secondName);
    }
    getters,setters,toString , constructor here...

    public static Person parseRemove(String string) {
        String[] parts = string.split(" ");
        return new Person(parts[0], parts[1], parts[2], parts[3]);
    }

    compare here

    conparebySurname here

我的 Remove 方法,但效果不佳,我不知道应该在这里解决什么问题:

public static Boolean removeSurname() throws IOException {
        File file;
        String line;
        Scanner in = new Scanner(System.in);
        Set<Person> res = new TreeSet<>();
        System.out.print("from which file: ");
        line = in.nextLine();
        System.out.print("which surname u need to delete ");
        String lineToRemove;
        String inLine = "";
        lineToRemove = in.nextLine();
        try {
            file = new File(in.nextLine());
            System.out.println();
        } catch (NullPointerException n) {
            System.err.println("no file");
            return false;
        }
        FileInputStream fis = new FileInputStream(line + ".txt");
        BufferedWriter bufferWriter = new BufferedWriter(new FileWriter(line + ".txt", true));
        InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8);
        BufferedReader reader = new BufferedReader(isr);
        String strInfo;
        byte[] buffer = new byte[1024];
        while ((strInfo = reader.readLine()) != null) {
            String[] arrInfo = strInfo.split(" ");
            res.add(new Person(arrInfo[0], arrInfo[1], arrInfo[2], arrInfo[3]));
            bufferWriter.write(strInfo) ;
        if(lineToRemove.equals(strInfo)){
                res.remove(strInfo); //???
//                bufferWriter.newLine();
                bufferWriter.flush();
            }
        }
        fis.close();
        reader.close();
        bufferWriter.close();
        return true;
    }

【问题讨论】:

    标签: java list file object java-io


    【解决方案1】:

    你可以试试这个代码:

    public class Main {
        public static void main(String[] args) throws IOException {
            Scanner in = new Scanner(System.in);
            String surname = in.nextLine();
    
            FileInputStream fileInputStream = new FileInputStream("data.txt");
            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    
            String strInfo;
    
            List<String> records = new ArrayList<>();
            while ((strInfo = bufferedReader.readLine()) != null) {
                String[] person = strInfo.split(" ");
    
                String personSurname = person[1];
    
                if (!surname.equals(personSurname))
                    records.add(strInfo);
            }
    
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("data.txt"));
    
            for (String record: records) {
                bufferedWriter.write(record + "\n");
            }
    
            bufferedWriter.flush();
        }
    }
    

    PS:只有在从文件中读取所有数据后,您才应该创建bufferedWriter。当您实例化bufferedWriter 对象时,它将使您的文件为空。

    【讨论】:

      猜你喜欢
      • 2012-04-28
      • 2018-03-21
      • 2010-12-09
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多