读取文本文件时扫描仪不匹配异常

卢克

我的扫描仪正在使用分隔符读取文本文件。但是,当我运行程序时,唯一打印出来的行是第一行数据,然后我会抛出一个输入不匹配异常。我相信错误在于它没有移动到下一行。我了解不匹配是如何工作的,我只是不确定如何解决它。我试过把scanner.nextLine(); 正如您在下面的代码中看到的那样。

这是我的扫描仪代码:

 /**
 * Method for reading the data from the electricToolData.txt file.
 */
public void readElectricToolData()
{
  Frame myFrame = null; // initialises frame to null
  FileDialog fileBox = new FileDialog(myFrame,
                 "Open", FileDialog.LOAD);
  fileBox.setVisible(true);

  String directoryPath = fileBox.getDirectory();
  String filename = fileBox.getFile();

  System.out.println(filename + "   " + directoryPath); // prints out name of file and directory path


  try {
   File dataFile = new File(filename);
   Scanner scanner = new Scanner(dataFile);

   while(scanner.hasNext())
   {
       String lineOfText = scanner.nextLine(); // reads the next line of the file and stores as String

       //if statement checks if line starts with either "//" or space.
        if (lineOfText.startsWith("//") || lineOfText.isEmpty())
        { 

                      }
       else // now got real data
       {

        Scanner scanner2 = new Scanner(lineOfText);
        scanner2.useDelimiter(",");
        lineOfText.trim();
        System.out.println(lineOfText);


           while(scanner2.hasNext()) 
           {
          //lineOfText.trim();
          boolean mRechargeable = scanner.nextBoolean();
          String mPower = scanner.next();
          String mToolName = scanner.next();
          String mItemCode = scanner.next();
          int mTimesBorrowed = scanner.nextInt();
          boolean mOnLoan = scanner.nextBoolean();
          int mCost = scanner.nextInt();
          int mWeight = scanner.nextInt();
          scanner.nextLine();



          ElectricTool electricTool = new ElectricTool(mToolName, mItemCode, mTimesBorrowed, mCost, mWeight, mPower);
          toolsList.add(electricTool);

        }

       }





       //System.out.println(lineOfText); // prints out string
   }
   scanner.close();
   scanner.close(); // closes scanner


   }
       catch(FileNotFoundException e) 
  {
      System.err.println("Caught IOException: " + e.getMessage());
    }

  }   

该错误显示在布尔值mRechargeable = Scanner.nextBoolean();处。

这是数据文件:

// this is a comment, any lines that start with //
// (and blank lines) should be ignored

// data is rechargeable, power, toolName, itemCode, timesBorrowed, onLoan, cost, weight
true,18V,Makita BHP452RFWX,RD2001,12,false,14995,1800
true,10.8V,Flex Impact Screwdriver FIS439,RD2834,14,true,13499,1200     
false,1350W,DeWalt D23650-GB Circular Saw, RD6582,54,true,14997,5400
false,1500W,Milwaukee DD2-160XE Diamond Core Drill,RD4734,50,false,38894,9000
true,10.8V,Bosch GSR10.8-Li Drill Driver,RD3021,25,true,9995,820
 false,900W,Bosch GSB19-2REA Percussion Drill,RD8654,85,false,19999,4567
true,10.8V,Flex Impact Screwdriver FIS439, RD2835,14,false,13499,1200 
true,18V,DeWalt DW936 Circular Saw,RD4352,18,false,19999,3300 
false,2100W,Sparky FK652 Wall Chaser,RD7625,15,false,29994,8400
詹姆斯·弗莱

问题在于 String.trim() 不像您认为的那样工作:它不会改变调用它的 String,而是返回一个有效地删除了空格的新 String。这会导致该行没有被修剪,并且上面有很多空格字符的“空白行”无法通过您的第一个扫描仪.nextBoolean() 调用进行解析。

所以,更新:

String lineOfText = scanner.nextLine(); // reads the next line of the file and stores as String

成为:

// read the next line of the file, removing enclosing whitespace
String lineOfText = scanner.nextLine().trim();

理想情况下,注释应该在行之前,因为它更易于阅读和格式化,并且更明显的是它是注释。同时删除多余的 lineofText.trim(); 稍后在代码中。

此外,请记住在完成后关闭所有 Scanner 实例(所以这里每行一个,文件一个)。

下一个问题是,在内部循环中,您构建 ElectricTool 实例,您调用的是扫描仪上的方法,而不是扫描仪 2(将其重命名为更具语义的内容,例如 itemScanner):

Scanner itemScanner = new Scanner(lineOfText);
itemScanner.useDelimiter(",");

boolean mRechargeable = itemScanner.nextBoolean();
String mPower = itemScanner.next();
String mToolName = itemScanner.next();
String mItemCode = itemScanner.next();
int mTimesBorrowed = itemScanner.nextInt();
boolean mOnLoan = itemScanner.nextBoolean();
int mCost = itemScanner.nextInt();
int mWeight = itemScanner.nextInt();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使扫描仪读取文本文件

来自分类Dev

使用扫描仪读取文本文件

来自分类Dev

扫描仪-从文本文件读取字符串,整数,双精度

来自分类Dev

使用扫描仪从不同目录读取多个文本文件

来自分类Dev

实施扫描仪以将文本文件读取到数组

来自分类Dev

使用扫描仪读取Java中的文本文件

来自分类Dev

Java 扫描仪从我的文本文件中读取 null?

来自分类Dev

使用扫描仪从文本文件中读取字符串,然后打印出

来自分类Dev

Java-使用扫描仪在Delimeter上拆分大型SQL文本文件(OutOfMemoryError)

来自分类Dev

如何使用扫描仪将文本文件解析为两部分

来自分类Dev

使用扫描仪从文本文件中挑选出特定信息

来自分类Dev

使用扫描仪读取文件时,为什么扫描仪必须在方法中?

来自分类Dev

使用扫描仪读取文件时出现InputMismatchException

来自分类Dev

使用扫描仪读取文件时出现问题

来自分类Dev

使用扫描仪读取文件时出现问题

来自分类Dev

扫描仪输入匹配异常

来自分类Dev

读取文本文件时出现空指针异常

来自分类Dev

读取文本文件时出现Clojure异常

来自分类Dev

扫描仪输入不匹配

来自分类Dev

使用扫描仪从文件读取

来自分类Dev

扫描仪读取大文件

来自分类Dev

捕获/尝试在扫描仪的输入不匹配异常中不起作用?

来自分类Dev

扫描仪next()输入不匹配异常..在nextInt()之后使用nextLine()

来自分类Dev

扫描仪不扫描

来自分类Dev

扫描仪不扫描

来自分类Dev

线程“主”中的Java异常java.util.NoSuchElementException-使用扫描仪读取文件

来自分类Dev

线程“主”中的Java异常java.util.NoSuchElementException-使用扫描仪读取文件

来自分类Dev

Java-扫描程序类-读取文本文件时跳过第一行

来自分类Dev

使用扫描仪读取以前创建的文件时找不到文件

Related 相关文章

  1. 1

    使扫描仪读取文本文件

  2. 2

    使用扫描仪读取文本文件

  3. 3

    扫描仪-从文本文件读取字符串,整数,双精度

  4. 4

    使用扫描仪从不同目录读取多个文本文件

  5. 5

    实施扫描仪以将文本文件读取到数组

  6. 6

    使用扫描仪读取Java中的文本文件

  7. 7

    Java 扫描仪从我的文本文件中读取 null?

  8. 8

    使用扫描仪从文本文件中读取字符串,然后打印出

  9. 9

    Java-使用扫描仪在Delimeter上拆分大型SQL文本文件(OutOfMemoryError)

  10. 10

    如何使用扫描仪将文本文件解析为两部分

  11. 11

    使用扫描仪从文本文件中挑选出特定信息

  12. 12

    使用扫描仪读取文件时,为什么扫描仪必须在方法中?

  13. 13

    使用扫描仪读取文件时出现InputMismatchException

  14. 14

    使用扫描仪读取文件时出现问题

  15. 15

    使用扫描仪读取文件时出现问题

  16. 16

    扫描仪输入匹配异常

  17. 17

    读取文本文件时出现空指针异常

  18. 18

    读取文本文件时出现Clojure异常

  19. 19

    扫描仪输入不匹配

  20. 20

    使用扫描仪从文件读取

  21. 21

    扫描仪读取大文件

  22. 22

    捕获/尝试在扫描仪的输入不匹配异常中不起作用?

  23. 23

    扫描仪next()输入不匹配异常..在nextInt()之后使用nextLine()

  24. 24

    扫描仪不扫描

  25. 25

    扫描仪不扫描

  26. 26

    线程“主”中的Java异常java.util.NoSuchElementException-使用扫描仪读取文件

  27. 27

    线程“主”中的Java异常java.util.NoSuchElementException-使用扫描仪读取文件

  28. 28

    Java-扫描程序类-读取文本文件时跳过第一行

  29. 29

    使用扫描仪读取以前创建的文件时找不到文件

热门标签

归档