2015-05-22 2 views
1

Файл dat содержит следующую информацию, которая написана с использованием writeUTF: Fruit, Colour, Taste, Yes/No, последний из которых является да или нет, однако это строка.Создание экземпляра на основе первичных данных

Теперь класс определяется следующим образом

public class Food { 
    private String name; 
    private String colour; 
    private String taste; 
    private boolean availability; 


    public Food(String name, String colour, String taste, boolean availability) { 
     this.name = name; 
     this.colour = colour; 
     this.taste = taste; 
     this.availability = availability; 
    } 


} 

Когда я прочитал dat файл:

FileInputStream fis = new FileInputStream("food.dat"); 
DataInputStream dis = new DataInputStream(fis); 

Могу ли я каким-то образом преобразовать строку текста сразу в экземпляр Food? Трудный бит - String -> boolean.

Сначала я хотел бы добавить каждую строку файла на ArrayList, затем разделить каждую строку из , и добавить его в строку массивной и использовать if логики для обработки Yes/No части, но что, если есть тысячи строк эта информация? Этот подход не слишком привлекателен.

При условии, что это не написано с использованием ObjectOutputStream, к сожалению (присвоение какого-то рода, я не создавал правил). Есть ли способ прочитать строку из файла и создать экземпляр на основе информации?

ответ

2

Зачем добавлять все это в список? Прочитайте каждую строку через readUTF, разделите ее запятыми, затем введите метод, который генерирует объект Food из 4 компонентов. Затем добавьте свои продукты в любой контейнер, который вы хотите.

public Food (String[] data){ 
    if (data==null || data.length!=4){ 
    // error handling 
    } 
    this.name=data[0]; 
    ... 
    this.availability="Yes".equals(data[3]) 
} 
+0

Параметр доступности является логическим. Не станет ли это проблемой? –

+0

Вы создаете второй конструктор: у вас есть один с 4 параметрами, вы его сохраняете, затем добавляете тот, который я дал вам для создания из текстовой строки. –

+0

Я понимаю, но что, если я создал экземпляр с использованием исходного конструктора, а затем захотел «DataOutputStream'' в уже существующий файл. Затем я определяю метод, в котором я изменяю логическое значение в текст перед записью? –

1

Да, вы можете это сделать. И для этого вам нужно знать формат данных и написать парсер соответственно.

1) Если данные линии ввода (или) разделены на , | :, затем разделить данные и создать объект Food для каждой строки. Задайте данные в объекте с помощью методов настройки.

String[] splitData = input.split("delimiter"); 
//length and error check of SplitData 
Food food = new Food(); 
food.setName(splitData[0])); 
... 

(или)

Pass входной линии к объекту еды через конструктора, и пусть конструктор делать разделения и данные назначения.

Food(String input){ 
      String[] splitData = input.split("delimiter"); 
      //length and error check of SplitData 
      name = splitData[0]; 
      ... 
    } 

После создания Food объекта, вы можете добавить его в любой коллекции в зависимости от ваших требований.

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