Jak odczytać tabelę z pliku tekstowego w Javie
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class BuildTableWithArrays {
private static final String separator = "\\s+"; // regex for parsing lines
private static final int rowWidth = 4;
public static void main(String[] args) {
Map<Integer, ArrayList<String>> columns = buildMapWithColumnArrayLists("animals.txt");
printMap(columns); // for demo
// if you want actual arrays
Map<Integer, String[]> colArrays = buildMapWithColumnArrays(columns);
}
public static Map<Integer, ArrayList<String>> buildMapWithColumnArrayLists(
String fileName) {
ArrayList<String> col0 = new ArrayList<String>();
ArrayList<String> col1 = new ArrayList<String>();
ArrayList<String> col2 = new ArrayList<String>();
ArrayList<String> col3 = new ArrayList<String>();
Map<Integer, ArrayList<String>> columns = new HashMap<Integer, ArrayList<String>>();
columns.put(0, col0);
columns.put(1, col1);
columns.put(2, col2);
columns.put(3, col3);
File file = new File(fileName);
try {
Scanner input = new Scanner(file);
while (input.hasNextLine()) {
String[] line = input.nextLine().trim().replaceAll(separator, " ")
.split(separator);
for (int i = 0; i < rowWidth; i++) {
if (line[i] == null) {
columns.get(Integer.valueOf(i)).add("null");
} else {
columns.get(Integer.valueOf(i)).add(line[i]);
}
}
}
input.close();
} catch (FileNotFoundException x) {
System.out.println(x.getMessage());
}
return columns;
}
public static void printMap(Map<Integer, ArrayList<String>> columns) {
for (int i = 0; i < rowWidth; i++) {
System.out.println("col" + i + " #elements = "
+ columns.get(Integer.valueOf(i)).size());
for (String s : columns.get(Integer.valueOf(i))) {
System.out.print(s + " ");
}
System.out.println("\n");
}
}
public static String[] convertArrayList2Array (ArrayList<String> arrayList) {
String[] array = new String[arrayList.size()];
array = arrayList.toArray(array);
return array;
}
public static Map<Integer, String[]> buildMapWithColumnArrays(Map<Integer, ArrayList<String>> columns) {
Map<Integer, String[]> cols = new HashMap<Integer, String[]>();
for (Map.Entry<Integer, ArrayList<String>> entry : columns.entrySet()) {
Integer key = entry.getKey();
ArrayList<String> value = entry.getValue();
String[] val = convertArrayList2Array(value);
cols.put(key,val);
}
return cols;
}
}
Elegant Eagle