I am trying to insert values into maps in java to loop on them and do some calculations so what I am doing is to read a folder of 11k files which containing somethings like these: ps: all the files have the same structure
SFrm EFrm SegAScr Phone
0 36 -158051 SIL
37 105 -644247 +NONTRANS+
106 109 -96452 l SIL w b
110 112 -125055 w l aa i
113 115 -150550 aa w 7 i
116 118 -146662 7 aa i i
119 122 -46757 i 7 d i
123 126 -58440 d i SIL e
127 146 -90776 +MUSIC+
147 152 -61098 t SIL u b
153 158 -67393 u t f i
159 174 -251284 f u f i
175 178 -79772 f f aa i
179 194 -134562 aa f 7 i
195 206 -33695 7 aa a i
207 223 -194024 a 7 SIL e
224 350 -434997 +NOISE+
351 353 -28280 SIL
Total score: -2802095
and checking on them by the code below
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
public class z {
//Enum to match the vowels with string values
public enum Match {
_aa("aa"), _ii("ii"), _uu("uu");
public String value;
private Match(String value) {
this.value = value;
}
public static Match fromString(String s) {
for (Match m : Match.values()) {
if (s.substring(4, 6).equals(m.value))
return m;
}
return null;
}
}
public static void main(String[] args) throws NumberFormatException,
IOException {
**//reading folder**
File folderPhseg = new File(
"/home/bassem/workspace/outputs/new");
File[] listOfPhseg = folderPhseg.listFiles();
Map<Match, List<Integer>> indexes = new HashMap<Match, List<Integer>>();
for (Match m : Match.values()) {
indexes.put(m, new ArrayList<Integer>());
}
String line = "";
for (File file : listOfPhseg) {
if (file.isFile()) {
FileReader inputFile = new FileReader(file.getAbsolutePath());
BufferedReader bufferReader = new BufferedReader(inputFile);
String[] column1 = new String[100];
String[] column2 = new String[100];
String[] column3 = new String[100];
String[] column4 = new String[100];
String[] column5 = new String[100];
int index = 0;
//converting it into five arrays
while ((line = bufferReader.readLine()) != null) {
String temp = "";
int count = 1;
column4[index] = "";
// System.out.println(line);
StringTokenizer st = new StringTokenizer(line, " ");
// String tokenizer gets the token from each space
while (st.hasMoreTokens()) {
temp = st.nextToken();
if (temp.equals("Total")) {
break;
}
// parsing input
if (count == 1) {
column1[index] = temp;
}
if (count == 2) {
column2[index] = temp;
}
if (count == 3) {
column3[index] = temp;
}
if (count == 4) {
column4[index] = temp;
}
if (count == 5) {
column5[index] += temp;
}
if (count < 5)
count++;
}
}
//storing them into Maps
for (int k = 0; k < index - 1; k++) {
String cur = column5[k];
Match m = Match.fromString(cur);
if (m != null) {
indexes.get(m).add(
Integer.valueOf(column3[k])
- Integer.valueOf(column2[k]));
}
}
index++;
}
}
System.out.println(indexes);
}
}
I store these data into the map with key Match
then when I try to print the map I get an empty one!
I tried this code on one of the files and it worked well with me.
the problem is when I try to apply it on the whole folder I get nothing in the map. After debugging the code I figured out that the last for loop isn't getting executed and this loop is the one concerned with storing in map but I can't figure out the reason behind that. I tried to move index++;
to be above the for loops. The code Entered the mentioned for loop but at the end I got the same output