Projekt

Obecné

Profil

Stáhnout (5.67 KB) Statistiky
| Větev: | Revize:
1 88cfe074 jjirman
package data;
2
3
import java.io.*;
4 7cafefe1 Daniel Stuš
import java.nio.charset.Charset;
5
import java.nio.file.Files;
6 88cfe074 jjirman
import java.util.ArrayList;
7 7cafefe1 Daniel Stuš
import java.util.List;
8 88cfe074 jjirman
9
/**
10
 *
11
 * Třída pro základní čtení a parsovani zdrojových souborů
12 b1a901a5 Lukáš Ščurko
 * - issue #7315
13 88cfe074 jjirman
 * @author Daniel Stus, Marek Sobota, Lukas Scurko, Jan Jirman
14
 * @version 1.0
15
 */
16
public class DataLoader {
17
18
    //--------------------------------------- ATRIBUTY: -------------------------------------------------//
19
    //---------------------------------------------------------------------------------------------------//
20
21
    /** Jméno načteného souboru */
22
    private  String fileName;
23
    /** Hashmapa načtených dat */
24
    private ArrayList<String[]> loadedData = new ArrayList<>();
25
    /** Proměnná souboru */
26
    private File file;
27
    /** Proměnná root (JDF) složky */
28
    private File directory;
29
30
    //-------------------------------------- KONSTRUKTOR: -----------------------------------------------//
31
    //---------------------------------------------------------------------------------------------------//
32
33
    /**
34
     * Konstruktor DataLoaderu - Inicializuje slozku se zdrojovymi soubory pro cteni
35 27ba3ec6 Daniel Stuš
     * @param directory Slozka se zdrojovymi soubory pro cteni
36 88cfe074 jjirman
     */
37
    public DataLoader(File directory) {
38
        this.directory = directory;
39
        this.file = null;
40
        this.fileName = "";
41
    }
42
43
    //------------------------------------ METODY: Get() ------------------------------------------------//
44
    //---------------------------------------------------------------------------------------------------//
45
46
    /**
47
     * Vrací pole dat souboru
48
     * @return pole dat souboru
49
     */
50
    public ArrayList<String[]> getLoadedData() {
51
        return loadedData;
52
    }
53
54
    /**
55
     * Vraci hodnotu atributu fileName obsahujici jmeno souboru
56
     *
57
     * @return jméno souboru zpracovávaného metodami
58
     */
59
    public String getFileName() {
60
        return fileName;
61
    }
62
63
    /**
64
     * Vrací instanci souboru
65
     * @return intance souboru
66
     */
67
    public File getFile() {
68
        return file;
69
    }
70
71
    /**
72
     * Vrací instanci root (JDF) složky
73
     * @return intance root (JDF) složka
74
     */
75
    public File getDirectory(){
76
        return directory;
77
    }
78
79
    //----------------------------------------- METODY: -------------------------------------------------//
80
    //---------------------------------------------------------------------------------------------------//
81
82
    /**
83
     * Metoda načte všechna data ze souboru
84
     * @param fileName jméno souboru, ze kterého se bude číst
85
     */
86 773e77aa Jan Jirman
    public ArrayList<String[]> loadData(String fileName){
87 88cfe074 jjirman
        ArrayList<String[]> dataArrayList;
88
        String currLine;
89
90
        //soubor
91
        File file = new File(directory.getAbsolutePath()+"/"+fileName);
92
        if(!file.isFile()){
93 773e77aa Jan Jirman
            System.out.println("Soubor neexistuje..");
94
            return null;
95 88cfe074 jjirman
        }
96
97
        //nastavení atributů
98
        setAttributes(file, fileName);
99
100
        //čtení souboru
101
        try {
102
            BufferedReader BuffReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "Cp1250"));
103
            while((currLine = BuffReader.readLine()) != null) {
104
                //celý záznam - jedná řádka
105
                String[] record = parseLine(currLine);
106
                //přídání do arraylistu loadedData
107
                loadedData.add(record);
108
            }
109
            BuffReader.close();
110
111
        } catch (FileNotFoundException e) {
112
            e.printStackTrace();
113
        } catch (UnsupportedEncodingException e) {
114
            e.printStackTrace();
115
        } catch (IOException e) {
116
            e.printStackTrace();
117
        }
118 773e77aa Jan Jirman
        return loadedData;
119 88cfe074 jjirman
    }
120
121 7cafefe1 Daniel Stuš
    /**
122 27ba3ec6 Daniel Stuš
     * Načte seznam linek z uživatelského soubor a vrátí jej jako pole seznamů
123
     * kde jeden první seznam je seznam linek
124
     * a druhý seznam je seznamem pseudo linek ke generování bitmapy
125
     * pouze podle časových a pevných kódů
126 7cafefe1 Daniel Stuš
     *
127
     * @param lineFile cesta k uživatelskému souboru se seznamem linek
128
     */
129 27ba3ec6 Daniel Stuš
    public List[] loadLines(File lineFile) {
130 7cafefe1 Daniel Stuš
131 27ba3ec6 Daniel Stuš
        List[] lineList = new ArrayList[2];
132
        List<String> lines = new ArrayList<>();
133
        List<String> pseudoLines = new ArrayList<>();
134 7cafefe1 Daniel Stuš
135
        //soubor
136 27ba3ec6 Daniel Stuš
        if(!lineFile.isFile()){
137 7cafefe1 Daniel Stuš
            System.out.println("Soubor neexistuje..");
138
            return null;
139
        }
140
141
        //nastavení atributů
142 27ba3ec6 Daniel Stuš
        setAttributes(lineFile, fileName);
143 7cafefe1 Daniel Stuš
144
145
        try {
146 27ba3ec6 Daniel Stuš
            Files.lines(lineFile.toPath()).forEach(line -> {
147
                if(line.charAt(2)=='-') pseudoLines.add(line);
148
                else if (Character.isDigit(line.charAt(0))) lines.add(line);
149
            });
150
151 7cafefe1 Daniel Stuš
        } catch (IOException e) {
152
            e.printStackTrace();
153
        }
154
155 27ba3ec6 Daniel Stuš
        lineList[0] = lines;
156
        lineList[1] = pseudoLines;
157 82a06985 Daniel Stuš
      return lineList;
158 7cafefe1 Daniel Stuš
    }
159
160 88cfe074 jjirman
    /**,
161
     * Nastavení zbývajících atributů pro DataLoader
162
     * @param file instance souboru
163
     * @param fileName název souborů
164
     */
165
    private void setAttributes(File file, String fileName){
166
        this.file = file;
167
        this.fileName = fileName;
168
    }
169
170
    /**
171
     * Zpracuje a vrátí jeden záznam (řádku) jako pole hodnot
172
     *
173
     * @param line řádka ke zpracování
174
     * @return pole se záznamem
175
     */
176 27ba3ec6 Daniel Stuš
    public static String[] parseLine(String line) {
177 88cfe074 jjirman
        int startIndex = 1;
178
        int shift = 2;
179
180
        /*
181
         Odstraní ze záznamu úvodní uvozovku a konečnou uvozovku se středníkem
182
         příprava pro následující rozdělení záznamu pomocí metody split
183
         */
184
        String subString = line.substring(startIndex, line.length()-shift);
185
186
        String[] entry = subString.split("\",\"");
187
188
        return entry;
189
    }
190
}