我正在尝试使用CSV
将Arraylist
文件导入StringTokenizer
:
public class Test
{
public static void main(String [] args)
{
List<ImportedXls> datalist = new ArrayList<ImportedXls>();
try
{
FileReader fr = new FileReader("c:\\temp.csv");
BufferedReader br = new BufferedReader(fr);
String stringRead = br.readLine();
while( stringRead != null )
{
StringTokenizer st = new StringTokenizer(stringRead, ",");
String docNumber = st.nextToken( );
String note = st.nextToken( ); /** PROBLEM */
String index = st.nextToken( ); /** PROBLEM */
ImportedXls temp = new ImportedXls(docNumber, note, index);
datalist.add(temp);
// read the next line
stringRead = br.readLine();
}
br.close( );
}
catch(IOException ioe){...}
for (ImportedXls item : datalist) {
System.out.println(item.getDocNumber());
}
}
}
我不了解
nextToken
的工作原理,因为如果我将初始化的三个变量(docNumber
,note
和index
)保留为nextToken()
,它将失败:Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(Unknown Source)
at _test.Test.main(Test.java:32)
如果我仅保留docNumber,则它可以工作。你可以帮帮我吗?
最佳答案
输入文件的某些行似乎包含少于3个逗号分隔的字段。您应始终检查 token 生成器是否具有更多 token (StringTokenizer.hasMoreTokens),除非您百分百确定输入正确。
正确解析CSV文件并不是一件容易的事。为什么不使用可以很好地完成工作的库http://opencsv.sourceforge.net/?