Чтение текстового файла и добавление содержимого в ArrayList - PullRequest
0 голосов
/ 09 ноября 2018

Я изучаю все различные способы получения ввода из текстового файла и чтения содержимого.Я изо всех сил пытаюсь использовать блок try - catch (с ресурсами) и читая имя файла.

Ниже приведено то, что я написал для этой части: -

public static void main(String[] args) 
{

    ArrayList<StationRecord> data = new ArrayList<>();
    String stationName = null;

    Scanner scan = new Scanner(System.in);
    System.out.println("What is the filename?");
    String input = scan.nextLine();
    File file = new File(input);

    try(BufferedReader in = new BufferedReader(new FileReader(file))){

      while(scan.hasNext()){

       stationName = scan.nextLine();
       int yearMonthDay = scan.nextInt();
       int max = scan.nextInt();
       int min = scan.nextInt();
       int avg = scan.nextInt();
       double dif = scan.nextDouble();

       StationRecord sr = new StationRecord(yearMonthDay, max, min, avg, dif);
       data.add(sr);
      }

    }
    catch(IOException e)
    {
        e.printStackTrace();
    }
    catch(Exception e)
    {
        e.printStackTrace();

    }
}

Я пытаюсь сделать это не только для одного файла, но и для двух.Независимо от этого, вот пример ввода: -

Консоль: Какое имя файла?

TempData2018a.txt

После того, как это введено, я пытаюсь просмотреть данные в текстовом файле идобавьте его в ArrayList типа StationRecord (мой другой класс).

Будем весьма благодарны за любые предложения и рекомендации!Также любой вклад в то, как вы могли бы сделать это с 2 файлами, был бы потрясающим!

Редактировать: пример данных файла .txt

PITTSBURGH ALLEGHENY CO AIRPORT PA
20180101 11 2 7 -22.614762
20180102 12 5 9 -20.514762
20180103 23 2 13 -16.414762

Я пытаюсь сохранить всю первую строку в переменной с именем stationName.Затем я пытаюсь сохранить следующий двойной тип int, int, int, int в ArrayList типа StationRecord .

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Поскольку это 2018, пожалуйста, прекратите использовать new File(..) и начните использовать API nio. Поскольку вы используете Java 8, вы можете легко достичь того, чего вы пытаетесь достичь здесь! Итак, вы можете создать свой StationRecord так:

Path filePath = Paths.get(pathToFile);

       String stationName =  Files.lines(filePath)
            .findFirst()
            .get();

        List<StationRecord> stationRecords =
            Files.lines(filePath)
                .skip(1) //Skip first line since it has station name
                .map(line -> line.split("\\s")) // split at a space starting from 2nd line
                .map(
                stationData -> new StationRecord(Integer.valueOf(stationData[0]),
                    Integer.valueOf(stationData[1]), Integer.valueOf(stationData[2]),
                    Integer.valueOf(stationData[3]), Double.valueOf(stationData[4]))) // Create StationRecord object using the split fields
                .collect(Collectors.toList()); // Collect result to an ArrayList
0 голосов
/ 09 ноября 2018

Используя Java 7 & Java 8 API , вы можете решить вашу проблему, как показано ниже:

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class LineOperation {

private static List<String> lines;

public static void main(String[] args) throws IOException {

    lines = Collections.emptyList();

    try {
          lines = Files.readAllLines(Paths.get("C:\\Users\\Abhinav\\Downloads\\TempData2018a.txt"), StandardCharsets.UTF_8);

          String stationName = lines.get(0);

          String[] arr = null;

          ArrayList<StationRecord> data = new ArrayList<>();

          for(int i=1;i<lines.size();i++) {

              arr = lines.get(i).split(" ");

              data.add(new StationRecord(Long.parseLong(arr[0]), Integer.parseInt(arr[1]), Integer.parseInt(arr[2]), Integer.parseInt(arr[3]), Double.parseDouble(arr[4])));
          }
        } catch (IOException e) {
          e.printStackTrace();
        }
}
}

Но я настоятельно рекомендую вам обратиться к ссылкам ниже для дальнейших разъяснений по Java I / O : -

  1. Java - чтение из файла

  2. Считать файл в ArrayList

...