【发布时间】:2017-07-08 08:22:55
【问题描述】:
使用之前在这里向我建议的内容,我正在尝试通过以下方式使用 Path 和流读取文件:
Path p= Paths.get(file);
try (Stream<String> lines = Files.lines(p, StandardCharsets.UTF_8)) { // 1
lines.map(line -> line.split(";")) // 2
.forEach(lineAsArray -> {
if (lineAsArray[0].equals("E")) {
creaEditore(lineAsArray[2], Integer.parseInt(lineAsArray[3]), lineAsArray[4]);
}
else if (lineAsArray[0].equals("L")) {
Libro tmp = null;
try {
tmp = creaLibro(lineAsArray[1], lineAsArray[2], Integer.parseInt(lineAsArray[3]), Double.parseDouble(lineAsArray[4]), lineAsArray[5]);
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (EditoreInesistente e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tmp.setQuantita(Integer.parseInt(lineAsArray[6]));
}
});
}
catch (IOException io)
{
System.out.println("Wrong reading");
}
每一行的开头包含一个字母,对应于我要创建的对象(“Editore”或“Libro”),以下字段包含其属性的值(所有字段由半-柱子)。但是,在执行时,出现以下异常和错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "cheih@gja.it"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at libreria.Libreria.lambda$4(Libreria.java:122)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
at java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
at java.util.Iterator.forEachRemaining(Unknown Source)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.ReferencePipeline.forEach(Unknown Source)
at libreria.Libreria.leggi(Libreria.java:120)
at Esempio.main(Esempio.java:20)
调试我发现在读取第一行时一切正常,但是程序无法解析它并使用 lineAsArray[] 获取每个字段。有人能帮我吗?程序的要求还要求不要考虑sintax不正确的行,我的代码会自动执行类似的操作吗?
这是我的文件的sintax:
提前感谢您的帮助, 詹卢卡。
【问题讨论】:
-
你确定索引,你不是说
creaEditore(lineAsArray[1], Integer.parseInt(lineAsArray[2]), lineAsArray[3]);吗?
标签: java file split path stream