Projekt

Obecné

Profil

Stáhnout (8.36 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
 * -issue #7240
15
 *
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
}
(4-4/8)