Projekt

Obecné

Profil

Stáhnout (8.34 KB) Statistiky
| Větev: | Revize:
1
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
}
(2-2/5)