Projekt

Obecné

Profil

Stáhnout (8.36 KB) Statistiky
| Větev: | Revize:
1 8ee87ecf Daniel Stuš
package data;
2
3
import java.io.*;
4
import java.nio.charset.Charset;
5
import java.nio.file.Files;
6
import java.nio.file.Path;
7
import java.util.Arrays;
8
import java.util.List;
9
10
/**
11
 *
12
 * Zaklady cteni a parsovani zdrojovych souboru
13
 * cteni celeho souboru, podle linek, nacteni uzivatelskeho seznamu linek pro generovani
14 b1a901a5 Lukáš Ščurko
 * -issue #7240
15 8ee87ecf Daniel Stuš
 *
16
 * @author Daniel Stus, Marek Sobota, Lukas Scurko, Jan Jirman
17
 * @version 1.0
18
 */
19
public class DataReader {
20
21
    /** Cesta ke slozce obsahujici zdrojove soubory */
22
    private File directory;
23
24
    /** Jmeno souboru ktery zpracovavaji jednotlive metody tridy */
25
    private String fileName;
26
27
    /** Pole retezcu obsahujici cisla linek ke zpracovani*/
28
    private String[] busLines;
29
30
    /**
31
     *
32
     * Konstruktor DataReaderu - Inicializuje slozku se zdrojovymi soubory pro cteni a nacte seznam Linek ke zpracovani
33
     *
34
     * @param directory cesta ke slozce se zdrojovymi soubory
35
     * @param lineList cesta k souboru obsahujici cisla linek ke zpracovani
36
     */
37
    public DataReader(File directory, File lineList) {
38
        this.directory = directory;
39
        loadBusLines(lineList);
40
    }
41
42
    /**
43
     * Vrací hodnotu atributu directory obsahujici cestu ke slozce se zdrojovymi soubory
44
     *
45
     * @return cesta ke slozce se zdrojovymi soubory
46
     */
47
    public File getDirectory() {
48
        return directory;
49
    }
50
51
    /**
52
     * Umoznuje nastavit cestu ke slozce se zdrojovymi soubory
53
     *
54
     * @param directory cesta ke slozce se zdrojovymi soubory
55
     */
56
    public void setDirectory(File directory) {
57
        this.directory = directory;
58
    }
59
60
    /**
61
     * Vraci hodnotu atributu fileName obsahujici jmeno souboru zpracovavaneho metodami
62
     *
63
     * @return jméno souboru zpracovávaného metodami
64
     */
65
    public String getFileName() {
66
        return fileName;
67
    }
68
69
    /**
70
     * Nastavi hodnotu atributu fileName obsahujici jmeno souboru zpracovavaneho metodami
71
     * hodnota je ve formatu jmenoSouboru.pripona napr. 'Spoje.txt'
72
     *
73
     * @param fileName jmeno souboru pro zpracovani metodami
74
     */
75
    public void setFileName(String fileName) {
76
        this.fileName = fileName;
77
    }
78
79
    /**
80
     * Vraci hodnotu atributu busLines obsahujici pole s cislami linek ke zpracovani
81
     *
82
     * @return pole cisel linek ke zpracovani
83
     */
84
    public String[] getBusLines() {
85
        return busLines;
86
    }
87
88
    /**
89
     * Nastavi hodnotu atributu busLines obsahujici pole s cislami linek ke zpracovani
90
     *
91
     * @param busLines pole cisel linek ke zpracovani
92
     */
93
    public void setBusLines(String[] busLines) {
94
        this.busLines = busLines;
95
    }
96
97
98
    /**
99
     * Vypise vsechny soubory obsazene v adresari se zdrojovymi soubory ulozene v atributu {@code directory}
100
     */
101
    public void printFilesInDirectory() {
102
        File[] files = directory.listFiles();
103
104
        System.out.printf("Soubory v adresáři %s jsou:\n", getDirectory());
105
106
        for (File file : files) {
107
            System.out.println(file);
108
        }
109
    }
110
111
    /**
112
     * Precte a zpracuje cely soubor
113
     *
114
     */
115
    public void processFile() {
116
117
        String currLine;
118
119
        try {
120
            File file = new File(directory.getAbsolutePath()+"/"+this.fileName);
121
122
            BufferedReader BuffReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "Cp1250"));
123
124
            while((currLine = BuffReader.readLine()) != null) {
125
                String[] record = parseLine(currLine);
126
                // TODO: Vlastní výkonový kód pro každý záznam
127
            }
128
129
            BuffReader.close();
130
131
        } catch (FileNotFoundException e) {
132
            e.printStackTrace();
133
        } catch (UnsupportedEncodingException e) {
134
            e.printStackTrace();
135
        } catch (IOException e) {
136
            e.printStackTrace();
137
        }
138
139
    }
140
141
142
    /**
143
     * Precte a zpracuje vybranou linku autobusu
144
     *
145
     */
146
    public void processBusLine(String busLine) {
147
148
        String currLine;
149
150
        if (fileName.equals("Spoje.txt")  || fileName.equals("Caskody.txt"))
151
        {
152
            try {
153
                File file = new File(directory.getAbsolutePath()+"/"+this.fileName);
154
155
                BufferedReader BuffReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "Cp1250"));
156
157
                System.out.printf("Zpracované řádky:\n- - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");
158
                while((currLine = BuffReader.readLine()) != null) {
159
160
                    if (currLine.startsWith("\""+busLine)) {
161
                        System.out.println(currLine);
162
                        String[] record = parseLine(currLine);
163
                        // TODO: Vlastní výkonový kód pro každý záznam jednotlivé linky
164
                    }
165
                }
166
167
                BuffReader.close();
168
169
            } catch (FileNotFoundException e) {
170
                e.printStackTrace();
171
            } catch (UnsupportedEncodingException e) {
172
                e.printStackTrace();
173
            } catch (IOException e) {
174
                e.printStackTrace();
175
            }
176
        }
177
    }
178
179
    /**
180
     * Precte a zpracuje vybrane linky autobusu zadane jako pole Linek (Stringu)
181
     *
182
     */
183
    public void processBusLines(String[] busLines) {
184
185
        String currLine;
186
187
188
        if (fileName.equals("Spoje.txt")  || fileName.equals("Caskody.txt"))
189
        {
190
            try {
191
                File file = new File(directory.getAbsolutePath()+"/"+this.fileName);
192
193
                BufferedReader BuffReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "Cp1250"));
194
195
                System.out.printf("Zpracované řádky:\n- - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");
196
                while((currLine = BuffReader.readLine()) != null) {
197
198
                    if (Arrays.stream(busLines).anyMatch(currLine.substring(1, 7)::equals)) {
199
                        System.out.println(currLine);
200
                        String[] record = parseLine(currLine);
201
                        // TODO: Vlastní výkonový kód pro každý záznam jednotlivé linky
202
                    }
203
                }
204
205
                BuffReader.close();
206
207
            } catch (FileNotFoundException e) {
208
                e.printStackTrace();
209
            } catch (UnsupportedEncodingException e) {
210
                e.printStackTrace();
211
            } catch (IOException e) {
212
                e.printStackTrace();
213
            }
214
        }
215
    }
216
217
    /**
218
     * Zpracuje a vrátí jeden záznam (řádku) jako pole hodnot
219
     *
220
     * @param line řádka ke zpracování
221
     * @return pole se záznamem
222
     */
223
    public static String[] parseLine(String line) {
224
225
        /*
226
         Odstraní ze záznamu úvodní uvozovku a konečnou uvozovku se středníkem
227
         příprava pro následující rozdělení záznamu pomocí metody split
228
         */
229
        String subString = line.substring(1, line.length()-2);
230
231
        String[] entry = subString.split("\",\"");
232
233
        return entry;
234
    }
235
236
    /**
237
     * Načte seznam linek z uživatelského soubor a uloží jej jako pole řetězců do atributu {@code busLines[]}
238
     *
239
     * @param lineList cesta k uživatelskému souboru se seznamem linek
240
     */
241
    private void loadBusLines(File lineList) {
242
243
        // Přepokládám, že je v souboru zadána každá linka na samostatný řádek(jak bylo domluveno při druhé schůzce se zadavatelem.
244
        // TODO: Ověřování a kontrola vstupů
245
246
        Path filePath = lineList.toPath();
247
        Charset charset = Charset.defaultCharset();
248
        List<String> linkList = null;
249
250
        try {
251
            linkList = Files.readAllLines(filePath, charset);
252
        } catch (IOException e) {
253
            e.printStackTrace();
254
        }
255
256
257
        this.busLines = linkList.toArray(new String[]{});
258
    }
259
260
261
262
    /**
263
     *
264
     * hlavni metoda pro ozkouseni funkcnosti {@code DataReader}
265
     *
266
     * @param args parametry programu
267
     */
268
    public static void main(String[] args) {
269
270
        DataReader reader = new DataReader(new File("JDF"), new File("JDF/SeznamLinek.txt"));
271
272
        System.out.printf("Jméno (Cesta) ke složce se zdrojovými soubory: %s\n", reader.getDirectory());
273
        System.out.printf("Načtené linky z uživatelského seznamu linek: %s\n\n", Arrays.toString(reader.getBusLines()));
274
275
        reader.setFileName("Spoje.txt");
276
        reader.processBusLine("445040");
277
278
        reader.setFileName("Caskody.txt");
279
        reader.processBusLines(reader.getBusLines());
280
281
282
283
    }
284
285
}