Как получить конкретную строку из текстового файла в список массивов? - PullRequest
0 голосов
/ 11 мая 2019

Я хочу получить определенные строки данных из текстового файла, используя arraylist. (больше контекста: сведения об ученике хранятся в Student.txt. если мне нужно обновить конкретного учащегося, я хочу получить строку этого учащегося из текстового файла в массив для его редактирования)

Text file looks like this (ID, Name, Degreelevel, Email, Conatctno : courses);

A30, sarah, sarah@gmail.com, +64732 ; Computer Science, Cyber Security, Digital Media
A45,zaha, zaha@gmail.com, +3683: Software Engineering

Мой код печатает все данные из текстового файла в массив.

try {
    BufferedReader reader = new BufferedReader(new FileReader(file));
    ArrayList<String> lines = new ArrayList<>();
    String line = reader.readLine(); 
    while (line != null)
    {
        lines.add(line);
        line = reader.readLine();
    } 
    reader.close();
    System.out.println(lines);            
}

токовый выход: [ID, Name, Degreelevel, Email, Conatctno : courses, A30, sarah, sarah@gmail.com, +64732 ; Computer Science, Cyber Security, Digital Media, A45,zaha, zaha@gmail.com, +3683: Software Engineering]

Так, как я могу найти конкретный идентификатор студента и ввести только эту строку в массив. Любой намек помогает. Спасибо.

1 Ответ

0 голосов
/ 11 мая 2019

Вы должны пройти через каждую строку, пока не найдете свой соответствующий идентификатор. Это одна из причин, почему нам обычно нравится хранить этот тип информации в базах данных, а не в текстовых файлах.

Просто добавьте оператор if, который проверяет, что вы получили правильную строку, прежде чем добавить его в массив.

Очень простой способ сделать это:

String myId = "A30";
while (line != null){
    if(line.startsWith(myId){
        lines.add(line);
        break;
    }
    line = reader.readLine();
} 

Обычно при разборе текстовых файлов можно разделить каждую строку, используя некоторый разделитель данных, например, line.split (","), а не с помощью startWith. Однако данные в вашем примере плохо структурированы, в качестве разделителей используются двоеточие, точка с запятой и запятая. Одним из распространенных способов решения проблемы, заключающейся в том, что строка содержит разделитель, является инкапсуляция всей строки в кавычки и обработка любого специального символа в кавычках как обычного символа. Полуформализованный структурированный формат для данных в текстовом файле: csv . Большинство языков (включая Java) имеют библиотеки для разбора CSV-файлов.

...