Projekt

Obecné

Profil

Stáhnout (5.67 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.util.ArrayList;
7
import java.util.List;
8

    
9
/**
10
 *
11
 * Třída pro základní čtení a parsovani zdrojových souborů
12
 * - issue #7315
13
 * @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
     * @param directory Slozka se zdrojovymi soubory pro cteni
36
     */
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
    public ArrayList<String[]> loadData(String fileName){
87
        ArrayList<String[]> dataArrayList;
88
        String currLine;
89

    
90
        //soubor
91
        File file = new File(directory.getAbsolutePath()+"/"+fileName);
92
        if(!file.isFile()){
93
            System.out.println("Soubor neexistuje..");
94
            return null;
95
        }
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
        return loadedData;
119
    }
120

    
121
    /**
122
     * 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
     *
127
     * @param lineFile cesta k uživatelskému souboru se seznamem linek
128
     */
129
    public List[] loadLines(File lineFile) {
130

    
131
        List[] lineList = new ArrayList[2];
132
        List<String> lines = new ArrayList<>();
133
        List<String> pseudoLines = new ArrayList<>();
134

    
135
        //soubor
136
        if(!lineFile.isFile()){
137
            System.out.println("Soubor neexistuje..");
138
            return null;
139
        }
140

    
141
        //nastavení atributů
142
        setAttributes(lineFile, fileName);
143

    
144

    
145
        try {
146
            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
        } catch (IOException e) {
152
            e.printStackTrace();
153
        }
154

    
155
        lineList[0] = lines;
156
        lineList[1] = pseudoLines;
157
      return lineList;
158
    }
159

    
160
    /**,
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
    public static String[] parseLine(String line) {
177
        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
}
(3-3/7)