28
28
import android .os .AsyncTask ;
29
29
import android .util .JsonWriter ;
30
30
31
- import java .io .BufferedReader ;
31
+ import org .apache .commons .csv .CSVFormat ;
32
+ import org .apache .commons .csv .CSVParser ;
33
+ import org .apache .commons .csv .CSVRecord ;
34
+
32
35
import java .io .File ;
33
- import java .io .FileNotFoundException ;
34
36
import java .io .FileOutputStream ;
35
37
import java .io .IOException ;
36
38
import java .io .InputStream ;
37
- import java .io .InputStreamReader ;
38
39
import java .io .OutputStreamWriter ;
39
- import java .io . UnsupportedEncodingException ;
40
+ import java .nio . charset . Charset ;
40
41
41
42
public class JsonScanTask extends AsyncTask <InputStream , Void , Boolean > {
42
43
@@ -58,15 +59,22 @@ protected void onPreExecute() {
58
59
@ Override
59
60
protected Boolean doInBackground (InputStream ... inputStreams ) {
60
61
try {
61
- BufferedReader reader = new BufferedReader (new InputStreamReader (inputStreams [0 ], "ISO-8859-1" ));
62
+ CSVFormat format = CSVFormat .DEFAULT ;
63
+ if (!allergy ) {
64
+ format .withDelimiter (';' )
65
+ .withSkipHeaderRecord ()
66
+ .withHeader ("WT" , "KW" , "Klasse" , "XBA" , "Name" , "Gericht" );
67
+ }
68
+
69
+ CSVParser csvParser = CSVParser .parse (inputStreams [0 ], Charset .forName ("ISO-8859-1" ), format );
62
70
File json = new File (jsonFolder , allergy ? "allergy.json" : "day.json" );
63
71
JsonWriter writer = new JsonWriter (new OutputStreamWriter (new FileOutputStream (json ), "ISO-8859-1" ));
64
72
if (allergy ) {
65
- scanAllergy (reader , writer );
73
+ scanAllergy (csvParser , writer );
66
74
} else {
67
- scanDay (reader , writer );
75
+ scanDay (csvParser , writer );
68
76
}
69
- } catch (UnsupportedEncodingException | FileNotFoundException e ) {
77
+ } catch (IOException e ) {
70
78
e .printStackTrace ();
71
79
} finally {
72
80
try {
@@ -83,51 +91,16 @@ protected void onPostExecute(Boolean aBoolean) {
83
91
dialog .cancel ();
84
92
}
85
93
86
- private void scanDay (BufferedReader reader , JsonWriter writer ) {
87
- int clazz = 2 ;
88
- int xba = 3 ;
89
- int name = 4 ;
90
- int lunch = 5 ;
94
+ private void scanDay (CSVParser csvParser , JsonWriter writer ) {
91
95
try {
92
96
writer .beginArray ();
93
- String csvLine ;
94
- boolean first = true ;
95
- boolean headline = false ;
96
- while ((csvLine = reader .readLine ()) != null ) {
97
- String [] line = csvLine .split (csvLine .split ("," ).length > 2 ? "," : ";" );
98
- if (first ) {
99
- for (int i = 0 ; i < line .length ; i ++) {
100
- if (line [i ].replace ("\" " , "" ).equalsIgnoreCase ("Klasse" )) {
101
- clazz = i ;
102
- headline = true ;
103
- } else if (line [i ].replace ("\" " , "" ).equalsIgnoreCase ("XBA" )) {
104
- xba = i ;
105
- headline = true ;
106
- } else if (line [i ].replace ("\" " , "" ).equalsIgnoreCase ("Name" )) {
107
- name = i ;
108
- headline = true ;
109
- } else if (line [i ].replace ("\" " , "" ).equalsIgnoreCase ("Gericht" )) {
110
- lunch = i ;
111
- headline = true ;
112
- }
113
- }
114
- if (!headline ) {
115
- writer .beginObject ();
116
- writer .name ("class" ).value (line [clazz ].replace ("\" " , "" ));
117
- writer .name ("xba" ).value (Integer .parseInt (line [xba ].replace ("\" " , "" )));
118
- writer .name ("name" ).value (line [name ].replace ("\" " , "" ));
119
- writer .name ("lunch" ).value (line [lunch ].replace ("\" " , "" ));
120
- writer .endObject ();
121
- }
122
- first = false ;
123
- } else {
124
- writer .beginObject ();
125
- writer .name ("class" ).value (line [clazz ].replace ("\" " , "" ));
126
- writer .name ("xba" ).value (Integer .parseInt (line [xba ].replace ("\" " , "" )));
127
- writer .name ("name" ).value (line [name ].replace ("\" " , "" ));
128
- writer .name ("lunch" ).value (line [lunch ].replace ("\" " , "" ));
129
- writer .endObject ();
130
- }
97
+ for (CSVRecord record : csvParser ) {
98
+ writer .beginObject ();
99
+ writer .name ("class" ).value (record .get ("Klasse" ));
100
+ writer .name ("xba" ).value (Integer .parseInt (record .get ("XBA" )));
101
+ writer .name ("name" ).value (record .get ("Name" ));
102
+ writer .name ("lunch" ).value (record .get ("Gericht" ));
103
+ writer .endObject ();
131
104
}
132
105
writer .endArray ();
133
106
writer .close ();
@@ -136,17 +109,15 @@ private void scanDay(BufferedReader reader, JsonWriter writer) {
136
109
}
137
110
}
138
111
139
- private void scanAllergy (BufferedReader reader , JsonWriter writer ) {
112
+ private void scanAllergy (CSVParser csvParser , JsonWriter writer ) {
140
113
int xba = 0 ;
141
114
int allergy = 1 ;
142
115
try {
143
116
writer .beginArray ();
144
- String csvLine ;
145
- while ((csvLine = reader .readLine ()) != null ) {
146
- String [] line = csvLine .split ("," );
117
+ for (CSVRecord record : csvParser ) {
147
118
writer .beginObject ();
148
- writer .name ("xba" ).value (Integer .parseInt (line [ xba ] ));
149
- writer .name ("allergy" ).value (line [ allergy ] );
119
+ writer .name ("xba" ).value (Integer .parseInt (record . get ( xba ) ));
120
+ writer .name ("allergy" ).value (record . get ( allergy ) );
150
121
writer .endObject ();
151
122
}
152
123
writer .endArray ();
0 commit comments