Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:使用流读取文件时出现问题_Java_File_Split_Path_Stream - Fatal编程技术网

Java:使用流读取文件时出现问题

Java:使用流读取文件时出现问题,java,file,split,path,stream,Java,File,Split,Path,Stream,使用之前在这里向我建议的方法,我尝试以下列方式使用路径和流读取文件: Path p= Paths.get(file); try (Stream<String> lines = Files.lines(p, StandardCharsets.UTF_8)) { // 1 lines.map(line -> line.split(";")) // 2 .for

使用之前在这里向我建议的方法,我尝试以下列方式使用路径和流读取文件:

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");
        }
调试时,我发现在读取第一行时,一切都正常工作,但随后程序无法解析它并使用lineAsArray[]获取每个字段。有人能帮我吗?程序的要求还要求不考虑sintax不正确的行,我的代码会自动执行类似操作吗

这里是我的文件的sintax:

提前感谢您的帮助,
Gianluca.

当您的案例是E时,您的代码如下

if (lineAsArray[0].equals("E")) {
   creaEditore(lineAsArray[2], Integer.parseInt(lineAsArray[3]), lineAsArray[4]);
   }
您正在尝试将linearray[3]的值转换为Int
在这种情况下,索引3处的值为“cheih@gja.it“无法转换为int。这就是为什么会出现此异常的原因。

我认为您在第一部分中犯了一个小错误。例如

if (lineAsArray[0].equals("E")) {
creaEditore(lineAsArray[2], Integer.parseInt(lineAsArray[3]), lineAsArray[4]);
}

注意您是如何从索引“0”(在if语句中)跳到索引“2”(在“creaeditor”的第一个参数中)的。如果它不会抱怨“parseInt”方法中的错误参数,这将引发IndexOutOfBoundException,因为数组索引从0开始,而不是从1开始。

你救了我一天,谢谢。有没有办法避免考虑sintax不正确的行?有很多方法可以存储和检索数据,就像要将数据保存在文件中一样,应该使用JSON。它易于读取和存储JSON格式的数据。或者,对于大型数据库,您可以使用基于文件的数据库,例如H2或MySqlprojcet@Gianluca没有涉及错误的语法,请仔细检查您的代码!好的,但我仍然不明白我如何可以忽略sintax不正确的行,例如使用这种读取方式以“X”开头的行。我认为它会自动丢弃它们,因为这个案例不是“if-else-if”语句之一,但我得到了错误…@Gianluca你得到了哪些错误?由于您的语句是正确的(忽略前缀不正确的行),这意味着其他地方一定有问题。但是如果没有错误/stacktrace,就不可能指向正确的方向。您确定索引是不是
creaeditor(lineAsArray[1],Integer.parseInt(lineAsArray[2]),lineAsArray[3])
if (lineAsArray[0].equals("E")) {
creaEditore(lineAsArray[2], Integer.parseInt(lineAsArray[3]), lineAsArray[4]);
}