2016-11-09 4 views
0

Я хочу, чтобы иметь возможность принимать первые 3 строки текстового файла и использовать каждую строку в качестве отдельного параметра. Например:Чтение из файла в объект

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Scanner; 
    try { 
       File file = new File("test.txt"); 
       FileReader fileReader = new FileReader(file); 
       BufferedReader bufferedReader = new BufferedReader(fileReader); 
       StringBuffer stringBuffer = new StringBuffer(); 
       String line; 
       while ((line = bufferedReader.readLine()) != null) { 
        stringBuffer.append(line); 
        stringBuffer.append("\n"); 
       } 
       fileReader.close(); 
       System.out.println("Contents of file:"); 
       System.out.println(stringBuffer.toString()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

Это, как я в настоящее время чтения из файла, так что если у меня есть объект, называемый адрес, который смотрит на первые три строки в текстовый файл и получает название улицы, город, страна, как бы я читать каждой строке и установить их для параметра для нового объекта Address?

Address test = new Address(String sname, String city, String country) 

это мой пример конструктора.

ответ

1

Вы можете сохранить эти 3 строки в String массиве, а затем вызвать их с помощью индексов:

public static void main(String[] args) { 
    try { 
     File file = new File("test.txt"); 
     FileReader fileReader = new FileReader(file); 
     BufferedReader bufferedReader = new BufferedReader(fileReader); 
     String[] lines = new String[3]; 
     int i = 0; 
     while ((lines[i] = bufferedReader.readLine()) != null) { 
      if (i == 2) { 
       break; 
      } 
      i++; 
     } 
     fileReader.close(); 
     Address test = new Address(lines[0], lines[1], lines[2]); 
     // do something with test 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

где

  • lines[0] = название улицы
  • lines[1] = город
  • lines[2] = страна

По вашему комментарию, если вы хотите иметь несколько адресов:

public static void main(String[] args) { 
    try { 
     BufferedReader br = new BufferedReader(new FileReader(new File("test.txt"))); 
     List<Address> addresses = new ArrayList<>(); 
     List<String> lines = new ArrayList<>(); 
     String line; 
     while ((line = br.readLine()) != null) { 
      lines.add(line); 
     } 
     int noOfAddresses = lines.size() - lines.size() % 3; 
     for (int i = 0; i < noOfAddresses; i += 3) { 
      addresses.add(new Address(lines.get(i), lines.get(i + 1), lines.get(i + 2))); 
     } 
     // do something with addresses 
     // (Example - print them, if you defined toString in Address class) 
     for (int i = 0 ; i < addresses.size() ; i++) { 
      System.out.println(addresses.get(i)); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Шаги:

  1. Создать новый список, который будет хранить строки (lines)
  2. Создать новый список, в котором будут храниться объекты Address (addresses)
  3. Прочтите все строки и добавьте их в список lines.
  4. Вероятно, эта линия является хитрым:

    int noOfAddresses = lines.size() - lines.size() % 3; 
    

    Он игнорирует последние 0, 1 или 2 строки, которые не нужны, если вы хотите иметь правильный адрес (без null улицы, города и страны).

  5. Затем первые 3 строки используются для первого адреса, следующих 3 строк для второго адреса и т. Д. Вот почему я использовал i += 3.

+0

Хммм, ладно спасибо! Насколько сложно было бы включить другие 3-сегментные сегменты, поэтому, если есть 21 строка (7 параметров объекта), как я могу включить это? просто создайте массив строк и найдите способ его петли? – HaffCaff

-1

Я предлагаю вам использовать JSON или другой эквивалентной технологии для сериализации/десериализации объектов Java.

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

  • Нет связанных вопросов^_^