Чтение из файла, FileReader

272
02 апреля 2018, 23:44

Есть файл.txt примерно следующего содержания:

Дверь Окно  Лестница
1000  1200  2700
3     5     13

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

Object ob = new Object(Name, Cost, Num);
array.add(ob);

Но никак не могу сообразить как распарить файл так, что бы правильно создать объект. Может быть кто подскажет? Значения в строке разделены пробелом, строки - знаком конца строки ("\n"). Буду рад помощи

Answer 1

Считывание файла идёт построчно, т.е в 1-ой строке считываешь Stringи и кидаешь их в соответствуещее поле в своих объектах, потом так же и с остальными строками

Answer 2

Попробуйте так:

    import java.util.HashMap;
    import java.util.Map;
    import java.util.Scanner;
    public class AppFile {
        public static void main(String[] args) {
            Map<Integer, ObjectTest> map = new HashMap<>();
            try (Scanner scanner =
                         new Scanner(AppFile.class.getResourceAsStream("/file.txt"))
            ) {
                int lineNumber = 1;
                while (scanner.hasNextLine()) {
                    String line = scanner.nextLine();
                    String[] source = line.split(" ");
                    for (int i = 0; i < source.length; i++) {
                        ObjectTest objectTest;
                        if (map.containsKey(i)) {
                            objectTest = map.get(i);
                        } else {
                            objectTest = new ObjectTest();
                        }
                        switch (lineNumber) {
                            case 1:
                                objectTest.setName(source[i]);
                                break;
                            case 2:
                                objectTest.setCost(source[i]);
                                break;
                            case 3:
                                objectTest.setNum(source[i]);
                                break;
                        }
                        map.put(i, objectTest);
                    }
                    lineNumber++;
                }
            }
            map.forEach((i, o) -> {
                System.out.printf("number: %s object name: %s\n", i, o.getName());
            });
        }
    }
    class ObjectTest {
        private String name;
        private String cost;
        private String num;
        public ObjectTest(String name, String cost, String num) {
            this.name = name;
            this.cost = cost;
            this.num = num;
        }
        public ObjectTest() {
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getCost() {
            return cost;
        }
        public void setCost(String cost) {
            this.cost = cost;
        }
        public String getNum() {
            return num;
        }
        public void setNum(String num) {
            this.num = num;
        }
    }

Вывод:
number: 0 object name: Дверь
number: 1 object name: Окно
number: 2 object name: Лестница

Answer 3
ArrayList<String> words = new ArrayList<>();
    String[] wordsArr = null;
    try{
        BufferedReader in = new BufferedReader(new FileReader("D:\\testout.txt"));
        String line = null;
        while(true){
            line = in.readLine();
            if(line == null){break;}
            else{
                wordsArr = line.split("\t");
                for(String x: wordsArr){
                    if(!"".equals(x)){
                        words.add(x);
                    }
                }
            }
        }
        in.close();
    } catch(Exception x) {
        System.out.println(x);
    }
    String[] names = null;
    String[] costs = null;
    String[] nums = null;
    for(int i=0;i<1; i++){
        String lineOne = words.get(i);
        names = lineOne.split(" ");
    }
    for(int i=0;i<2; i++){
        String lineOne = words.get(i);
        costs = lineOne.split(" ");
    }
    for(int i=0;i<3; i++){
        String lineOne = words.get(i);
        nums = lineOne.split(" ");
    }
READ ALSO
проблемы с Android Studio

проблемы с Android Studio

Я хочу сделать программу под андроид в Android Studio, но когда пытаюсь пробно собрать свой первый проект (пока без кода), то Android Studio ругается на отсутствие...

171
Не собирается проект Gradle

Не собирается проект Gradle

Execution failed for task ':app:processDebugResources'

228
Fragment и его использование на практике

Fragment и его использование на практике

Объясните суть использования Fragment, плюсы и минусы

155
Есть ли уроки/книги/гайды по EasyAR?

Есть ли уроки/книги/гайды по EasyAR?

Хочу приступить к изучению библиотеки, связанной с дополненной реальностью (AR) на AndroidВроде приглянулась EasyAR (даже смог подключить, еее)

181