2016-02-15 4 views
3

Мне нужно прочитать информацию о машинах из txt-файла, а затем сохранить его на ArrayList. Первая строка в файле сообщает вам, сколько автомобилей находится внутри файла.Создание объекта из текстового файла с несколькими объектами

файл TXT выглядит следующим образом:

3 
2011 
Toyota 
Corolla 
2009 
Honda 
Civic 
2012 
Honda 
Accord 

и так далее ..

Я знаю, как создать объект из входа пользователей, но я пытаюсь изменить его так читает из файл.

+1

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

ответ

3

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

Scanner sc = new Scanner(System.in); 

с этим:

Scanner sc = new Scanner(new File("someFile.txt")); 

Вы можете использовать Scanner вроде:

String fileName = "cars.txt"; 
List<Car> cars = new ArrayList<>(); 
try (Scanner sc = new Scanner(new File("someFile.txt"))){ 
    int count = sc.nextInt(); 
    for (int i = 0; i < count; i++) { 
     int year = sc.nextInt(); 
     String brand = sc.next(); 
     String type = sc.next(); 
     cars.add(new Car(year, brand, type)); 
    } 
} catch (IOException e) { 
    System.err.println("error reading cars from file "+fileName); 
    e.printStackTrace(); 
} 

использовать также sc.hasNext() и sc.hasNextInt(), прежде чем читать из Scanner, так как код в противном случае может вызвать исключения, если файл не действительное содержания ..

Вы можете увидеть Car класс в другом (отличном) ответ я отправил

+0

Я уже сделал эту часть, я знаю, как читать текстовый файл. Проблема, которую я испытываю, заключается в том, что я хочу сохранить каждую часть автомобиля; год, имя, модель. Затем мне нужно использовать эти сохраненные переменные и создать с ними объект. – BMW

+0

Я добавил часть, в которой вы используете «Сканер» для чтения значений –

+0

и, пожалуйста, подумайте над тем, чтобы помочь ответить. также не забудьте принять правильный ответ, если он был отправлен! –

2

В случае, если вы не просто хотите, чтобы реорганизовать код, который используется Scanner, вы можете сделать это с FileReader:

String fileName = "cars.txt"; 
List<Car> cars = new ArrayList<>(); 
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))){ 
    int count = Integer.parseInt(reader.readLine()); 
    for (int i = 0; i < count; i++) { 
     int year = Integer.parseInt(reader.readLine()); 
     String brand = reader.readLine(); 
     String type = reader.readLine(); 
     cars.add(new Car(year, brand, type)); 
    } 
} catch (IOException | NumberFormatException e) { 
    System.err.println("error reading cars from file "+fileName); 
    e.printStackTrace(); 
} 

Пожалуйста, обратите внимание, что вам может понадобиться, чтобы сделать правильную обработку ошибок в блоке поймать. Кроме того, читатель может вернуться null, когда он достигает конца файла, только в случае, если вы хотите, чтобы подтвердить ввод приходит из файла (который вы всегда должны) ..

А вот ваш Car класс:

public class Car { 
    private final int year; 
    private final String brand; 
    private final String type; 

    public Car(int year, String brand, String type) { 
     this.year = year; 
     this.brand = brand; 
     this.type = type; 
    } 

    public int getYear() { 
     return year; 
    } 

    public String getBrand() { 
     return brand; 
    } 

    public String getType() { 
     return type; 
    } 
} 
+0

, так как у меня были плохие впечатления в прошлом: обратите внимание, что это не только принято, но и желательно (http://meta.stackexchange.com/a/25210/316262) ответить дважды, если у вас есть два разных ответа –

Смежные вопросы