Projekt

Obecné

Profil

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