我一直在尝试使用列表来存储.csv文件中的数据,但由于我是新手使用列表,我似乎无法让它工作。我搜索了许多教程,但没有一个能为我工作。我肯定错过了什么。这是我到目前为止所做的:
int row = 0;
int col = 0;
String fileInput = JOptionPane.showInputDialog(null,
"Please enter the path of the CSV file to read:");
File file = new File(fileInput);
BufferedReader bufRdr;
bufRdr = new BufferedReader(new FileReader(file));
String line = null;
ArrayList<String[]> arrayOfNumbers = new ArrayList<String[]>();
//read each line of text file
while((line = bufRdr.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line,",");
col=0;
while (st.hasMoreTokens()) {
//get next token and store it in the array
// UNSURE WHAT TO PUT HERE
}
row++;
}
然后我想将该列表中的数据存储到名为String[][] numbers
的多维数组中。我应该做什么的想法?
答案 0 :(得分:1)
在初始化字符串的multidim数组之前,您需要知道它的尺寸,它与您的最大列大小相似(如果行没有相同数量的'令牌')和行数这是你得到的行数。
int row = 0;
int col = 0;
String fileInput = JOptionPane.showInputDialog(null,
"Please enter the path of the CSV file to read:");
File file = new File(fileInput);
BufferedReader bufRdr;
bufRdr = new BufferedReader(new FileReader(file));
String line = null;
ArrayList<StringTokenizer> arrayOfNumbers = new ArrayList<StringTokenizer>();
//read each line of text file
while((line = bufRdr.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line,",");
arrayOfNumbers.add(st);
int actColCount = st.countTokens();
if (col < actColCount) {
col = actColCount;
}
}
row = arrayOfNumbers.size();
现在您可以迭代存储的行并将它们放入数组中。也许会出现一些ArrayOutOfBound Exceptions,没有详细介绍过多。但那应该这样做。
String[][] numbers = new String[row][col];
for (int i=0; i<row; i++) {
StringTokenizer st = arrayOfNumbers.get(i);
int j = 0;
while(st.hasMoreElements()) {
numbers[i][j] = st.nextElement();
j++;
}
}
请注意数组中没有值的那些字段,因为该行中没有足够的元素来填充该行中的每个列/字段。这个字段返回null。