5 / 5 / 1
Регистрация: 08.07.2015
Сообщений: 91
1

Чтение текстового файла. Парсинг его данных. Создание исключений для данных. Запись свойств объектов в файл

09.07.2015, 12:47. Показов 7078. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Проблема такая. Есть файл data.txt. В нем например какие-то данные.


Landon Donovan, 150, A
Hulk Hogan , 100, M
Duke Nukem, 50, M
Irina Alegrova, 200, F
Jack London , -40, M


Прочитать и вывести на экран можно таким способом:

Java
1
2
3
4
5
6
7
8
9
10
        File file = new File("data.txt");
        FileReader fileReader = new FileReader(file);
            if(fileReader.ready())
            {
                char[] chars = new char[(int)file.length()];
                fileReader.read(chars);
                String s = new String(chars);
                fileReader.close();
                System.out.println(s);
            }
Но от нас требуют еще если пол не М или F, бросать исключение и если возраст меньше 1, бросать исключение.
+ ко всему этому записывать любые созданные и объекты и их свойства в файл. С помощью каких инструментов можно бросать исключения ? Подскажите как реализовать данную задачу ? Заранее спасибо, буду благодарен.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2015, 12:47
Ответы с готовыми решениями:

Работа с двумерными массивами. Чтение данных из текстового файла и запись в текстовый файл
В матрице А найти отношение количества нулевых элементов в количестве ненулевых. Матрицу В...

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

Парсинг текстового файла и запись данных в Excel
есть текстовый док с такими строками : HS oper-209 UN Linux HS oper-203 UN Linux нужно...

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

3
Mobile Software Engineer
Эксперт С++
5381 / 1585 / 956
Регистрация: 23.01.2011
Сообщений: 3,214
09.07.2015, 14:23 2
Лучший ответ Сообщение было отмечено Duke_Nukem147 как решение

Решение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import java.io.*;
import java.lang.*;
import java.util.*;
 
/**
 * Created by Ev[G]eN on 09.07.2015.
 */
 
class IncorrectAgeException extends Throwable {
    private String message;
 
    public IncorrectAgeException(String message) {
        this.message = message;
    }
 
    public void showMessage() {
        System.out.println(message);
    }
}
 
class IncorrectSexException extends Throwable {
    private String message;
 
    public IncorrectSexException(String message) {
        this.message = message;
    }
 
    public void showMessage() {
        System.out.println(message);
    }
}
 
class Human {
    private String name;
    private int age;
    private char sex;
 
    public void setName(String name) {
        this.name = name;
    }
 
    public void setAge(int age) throws IncorrectAgeException {
        if (age < 1) {
            throw new IncorrectAgeException("Incorrect age exception!");
        } else {
            this.age = age;
        }
    }
 
    public void setSex(char sex) throws IncorrectSexException {
        if ((sex != 'M') && (sex != 'F')) {
            throw new IncorrectSexException("Incorrect sex exception!");
        } else {
            this.sex = sex;
        }
    }
 
    public String getName() {
        return name;
    }
 
    public int getAge() {
        return age;
    }
 
    public char getSex() {
        return sex;
    }
 
    public boolean isCorrectHuman() {
        return (name != null) && (age != 0) && (sex != '\0');
    }
 
    public String toString() {
        return "Name: " + name + ";\nAge: " + age + ";\nSex: " + sex + ";\n";
    }
}
 
public class MainClass {
    private static String currentFileString;
    private static BufferedReader inputFile;
    private static List <Human> humanDataList;
 
    public static void main(String args[]) throws IOException {
 
        humanDataList = new ArrayList <Human> ();
        inputFile = new BufferedReader(new FileReader("C:\\data.txt"));
 
        while ((currentFileString = inputFile.readLine()) != null) {
            String stringData[] = currentFileString.split("\\s*,\\s+");
 
            Human newHuman = new Human();
            newHuman.setName(stringData[0]);
 
            try {
                newHuman.setAge(Integer.parseInt(stringData[1]));
                newHuman.setSex(stringData[2].charAt(0));
            } catch (IncorrectAgeException e) {
                //e.showMessage();
            } catch (IncorrectSexException e) {
                //e.showMessage();
            }
 
            if (newHuman.isCorrectHuman()) {
                humanDataList.add(newHuman);
            }
        }
        inputFile.close();
 
        System.out.println("Correct data from file: ");
        for (Human currentHuman : humanDataList) {
            System.out.println(currentHuman);
        }
    }
}
1
5 / 5 / 1
Регистрация: 08.07.2015
Сообщений: 91
09.07.2015, 14:38  [ТС] 3
Спасибо большое. Правда такой код для меня пока тяжеловат =) Буду разбираться =)
0
95 / 95 / 50
Регистрация: 07.07.2015
Сообщений: 208
09.07.2015, 15:29 4
Прикольная задачка. Вот мое решение. Думаю попроще будет.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import java.io.*;
import java.util.StringTokenizer;
 
/**
 * Из файла в файл...
 */
public class FileShit {
    public static void main(String[] args) throws IOException {
        File inputFile = new File("D:\\data.txt");
        File outputFile = new File("D:\\newdata.txt");
        FileReader fileReader = new FileReader(inputFile);
        char[] chars = new char[(int)inputFile.length()];
        if(fileReader.ready())
        {
            fileReader.read(chars);
            String s = new String(chars);
            fileReader.close();
            System.out.println(s);
        }
        String data = String.valueOf(chars);
        Person person = null;
 
        //парсим входные данные
        StringTokenizer st = new StringTokenizer(data," ,.!?\\\n\r");
        while (st.hasMoreTokens()){
            try {
                //запихиваем, то что распарсили в обьект
                person = new Person(st.nextToken(),
                        st.nextToken(),
                        Integer.parseInt(st.nextToken()),
                        st.nextToken());
                //проверяем, подходит ли обьект условиям
                if (goodPerson(person)){
                    //и записываем если подходит
                    wrightPerson(person, outputFile);
                }
            }
            catch (IllegalArgumentException iae){
                System.out.println(iae.getMessage());
            }
            catch (Exception e){
                e.printStackTrace();
            }
        }
    }
 
    /**
     * Уточняем, а подходит ли нам данный
     * @param person человек
     * @return true или генерируем ошибки.
     */
    private static boolean goodPerson(Person person) {
        if (person.age < 0) {
            throw new IllegalArgumentException("Wrong age! Your " + person.name + " " +
                                                    person.surname + " is " + person.age + " years old!");
        } else if (!(person.sex.equals("M") || person.sex.equals("F"))) {
            throw new IllegalArgumentException("Wrong sex! Sex of " + person.surname +" is " + person.sex);
        } else{
            return true;
        }
    }
 
    /**
     * Записываем
     * @param person человека
     * @param outputFile в файл
     * @throws IOException может выплюнуть
     */
    private static void wrightPerson(Person person, File outputFile) throws IOException {
        if(!outputFile.exists()){
            outputFile.createNewFile();
        }
        FileWriter out = new FileWriter(outputFile, true);
        try{
            out.write("Имя: " + person.name +
                    ", Фамилия: " + person.surname +
                    ", Возраст: " + person.age +
                    ", Пол: " + person.sex +
                    ", Инфа обьекта(например): " + person.toString() + "\n");
        }
        finally {
            out.close();
            System.out.println(person.surname + " writed!");
        }
    }
}
 
/**
 * Обект, который хранит данные об одном человеке
 */
class Person{
    String name;
    String surname;
    int age;
    String sex;
    Person(String name, String surname, int age, String sex){
        this.name = name;
        this.surname = surname;
        this.age = age;
        this.sex = sex;
    }
}
0
09.07.2015, 15:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.07.2015, 15:29
Помогаю со студенческими работами здесь

Чтение и парсинг одного файла, запись данных во второй. Исправить код
Задание. Есть текстовый файл, он имеет структуру: Имя1 время1 время2. То есть примерно в файле...

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

Создание файла для записи и чтения, запись в файл данных
Написать простейшую программу, которая для своей работы использует системные вызовы...

Создание текстового файла и чтение данных из файла
Здравствуйте. Дана задача : Создать файл, содержащий сведения о сдаче студентами первого курса...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru