Как я могу добавить текстовый файл в Arraylist (JaVa)

#java

#java

Вопрос:

У меня есть файл с именем Vehicle.txt содержит пример:

(123,123,123,123,123
456,4,456,456,456)

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

     static void readVehicleFile() {
        Vehicle vehicle;
        try {

            input = new Scanner(new File("Vehicle.txt"));
            StringTokenizer tokenizer =  new StringTokenizer(input.next(),",");
            while (input.hasNextLine() amp;amp; tokenizer.hasMoreTokens()) {
                vehicle = new Vehicle();
                vehicle.setPlateNumber(tokenizer.nextToken());
                vehicle.setNumOfYear(Integer.parseInt(tokenizer.nextToken()));
                vehicle.setMake(tokenizer.nextToken());
                vehicle.setModel(tokenizer.nextToken());
                vehicle.setEngineCapacity(Integer.parseInt(tokenizer.nextToken()));
                vehicle.setOwnerID(Integer.parseInt(tokenizer.nextToken()));


                vehicleList.add(vehicle);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
  

Ответ №1:

Вместо использования Scanner я рекомендую использовать FileReader и BufferedReader . У BufferedReader есть метод с именем readLine(), который считывает следующую строку.

 private static String[] getCSV(File path) {
        if (!path.exists())
            return null;
        try {
            ArrayList<String> array = new ArrayList<>();
            FileReader reader= new FileReader(path);
            BufferedReader br = new BufferedReader(reader);
            String line;
            while((line = br.readLine()) != null){
                String[] csv = line.split(",");
                array.addAll(Arrays.asList(csv));
            }
            br.close();
            reader.close();
            return Arrays.copyOf(array.toArray(), array.size(), String[].class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
  

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

Обработка исключений должна быть немного более отточенной, если при чтении файла возникает ошибка, считыватели не закрываются, что приводит к утечке памяти. Я надеюсь, что это, по крайней мере, поможет вам прочитать ваши значения.

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

Ответ №2:

Вы можете использовать java.nio.file.Files.readline

 import java.nio.file.Files;
import java.nio.file.Paths;    
...
List<String> lines = Files.readAllLines(Paths.get("/tmp/readlines.txt"));