我正在验证CSV文件中的特定列,我基本上有两种方法,即
方法1
我可以使用BufferedReader
逐行读取CSV文件,然后停止
我点了一条线,开始了我正在寻找的东西
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(item.getInputStream()));
String strLine = "";
StringTokenizer st = null;
String value = "";
while ((strLine = br.readLine()) != null) {
st = new StringTokenizer(strLine, ",");
while (st.hasMoreTokens()) {
value = st.nextToken();
if ((value != null) && (("MyString1".equals(value)
|| ("MyString2".equals(value)
|| ("MyString3".equals(value))) {
// Send error Message
}
}
}
第二种方法是使用String.split,如下所示
Scanner s = new Scanner(item.getInputStream());
while(s.hasNextLine()) {
String[] fields = s.nextLine().split("\\s*,\\s*", -1);
for(int i = 0;i < fields.length;i++) {
if(!"".equals(fields[i]) && ...
}
}
s.close();
请建议更好的方法
答案 0 :(得分:1)
不要编写自己的CSV解析器。 CSV实际上比你最初想象的要复杂得多。 (示例:多行值,封装字段,转义字符等。逗号并不总是分隔字段!)
Use opencsv,这是一个功能齐全的纯Java CSV解析器。
此解析器将轻松让您循环CSV文件,并处理各个列和行。例子在上面的链接中给出。
编辑:另外,我忘了提及,它是Apache2许可的,所以它可以安全地嵌入到商业项目中!