我需要创建一个可以创建数据图形表示的工具。 我需要查看输入文件,该文件可以是具有不同列数的任何.txt或.csv,之后,用户可以选择要在图表上表示的数据。
我们说我有一个像这样的输入文件:
Column1;Row1;50;20;Column5
Column1;Row2;60;30;Column5
Column1;Row3;70;40;Column5
Column1;Row4;80;50;Column5
Column1;Row5;90;60;Column5
我需要为输入文件的每一列创建一个列表。对于此示例,要创建5个列表。如果它有10列可以创建10个列表。 我尝试了列表列表,但我不知道如何动态创建对象:
try {
fis = new FileInputStream("C:/Users/User/Desktop/test1.txt");
reader = new BufferedReader(new InputStreamReader(fis));
String line = reader.readLine();
String[] column = line.split(";");
while(line != null){
singleList.add(column[0]);
line = reader.readLine();
}
listOfLists.add(singleList);
任何人都可以帮助我吗?如果你能用一个特定的例子(我在Java中有点新的话)。
答案 0 :(得分:1)
请不要使用自定义实现
使用opencsv
的示例import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.opencsv.CSVReader;
/**
*
* @author V.Ladynev
*/
public class Example {
public static void main(String[] args) throws Exception {
// Build reader instance
CSVReader reader = new CSVReader(
new FileReader("C:/Users/User/Desktop/test1.txt"), ';', '"');
// Read all rows at once
List<String[]> allRows = readAll(reader);
int colsCount = size(first(allRows));
if (colsCount == 0) {
return;
}
List<List<String>> result = new ArrayList<List<String>>();
for (int colIndex = 0; colIndex < colsCount; colIndex++) {
List<String> col = new ArrayList<String>();
for (String[] row : allRows) {
col.add(get(row, colIndex));
}
result.add(col);
}
System.out.println(Arrays.toString(result.toArray()));
}
public static List<String[]> readAll(CSVReader reader) throws IOException {
try {
return reader.readAll();
} finally {
reader.close();
}
}
public static <T> T first(List<T> items) {
return items == null || items.size() == 0 ? null : items.get(0);
}
public static <T> int size(T[] array) {
return array == null ? 0 : array.length;
}
public static <T> T get(T[] array, int index) {
return size(array) > index ? array[index] : null;
}
}
答案 1 :(得分:1)
我想这就是你想要的:
FileInputStream fis = new FileInputStream("C:/Users/User/Desktop/test1.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
List<List<String>> listOfList = new ArrayList<>();
String line = reader.readLine();
String[] column = line.split(";");
//initial
for(int i = 0; i<column.length;i++){
listOfList.add(new ArrayList<String>());
}
while(line != null){
column = line.split(";");
for(int i = 0; i<column.length;i++){
istOfList.get(i).add(column[i]);
}
line = reader.readLine();
}
System.out.println(listOfList);