我有一个简单的CSV文件的格式如下。
Company,Name,12,13,18
Company,Name,12,13,18
Company,Name,12,13,18
Company,Name,12,13,18
Company,Name,12,13,18
我正在尝试解析所有令牌,并尝试使用next()
和nextInt()
。下面的代码在每一行的最后一个标记上抛出一个异常(在这个示例中,值为18,最后一个nextInt调用)。例外是InputMismatchException
。
我很难理解为什么它是不匹配的-我已经检查过CSV没有任何奇怪的地方,比如空格。
代码如下。
public void readFile(String Path) {
try {
Scanner sc = new Scanner(Paths.get(Path)).useDelimiter(",");
while (sc.hasNextLine()) {
while (sc.hasNext()) {
System.out.println(sc.next());
System.out.println(sc.next());
System.out.println(sc.nextInt());
System.out.println(sc.nextInt());
System.out.println(sc.nextInt());
}
sc.close();
}
} catch(IOException e) {
System.out.println("Cannot find file: " + Path);
}
}
第一个while循环将查看每一行,第二个while循环将查看由逗号分隔的每个标记,我的理解是否正确?
3条答案
按热度按时间xoshrz7s1#
把我的评论和@deHaar说的结合起来:
5uzkadbs2#
对于Java中的CSV阅读,我直接建议使用外部库,因为这项工作在开始时相当困难。
Apache Commons CSV就是一个很好的工具。此外,我有自己的文件io的东西库。这里是Github repo。我仍然渴望改进它,所以我完全开放的任何意见。
5cg8jx4n3#
您正在使用
java.nio
(Path
),这意味着您也可以使用该包中的其他类。要读取文件中的行,可以使用File.readAllLines()
,它返回List<String>
,其中每一项代表一行。有了这个列表,你就可以开始在循环或流中分割行了。下面是一个例子:
CSV示例
Java代码
输出