从文件中读取内容时异常处理的奇怪行为

时间:2014-05-18 05:33:38

标签: java file-io exception-handling

我正在尝试从文件中读取,但是我得到了一些奇怪的结果。以下是我的代码。

    class A
    {
            try{
                    B writeToFile = new B();
                                B readFromFile = new B();
                                File file = new File("C:/Users/HB/workspace/A/src/xyz.txt");
                                boolean fileExists = file.isFile();
                                if (fileExists)
                                {
                                    readFromFile.readFromFile();
                                }
                                if(...) 
                                {
                                      //my other code
                                }
                                else

                        throw new Exception (type_op); 
                }
    }
    catch(ArrayIndexOutOfBoundsException e)
    {
            System.out.println("Incorrect number of arguments supplied to command.");
            System.out.println("");

    } 
    catch (Exception e) 
    {
            System.out.printf("'%s' is not a valid command.%n",type_op);
            System.out.println();
    }

我在这里做的是A类是我执行所有操作的主要类。我正在执行某些操作,如果用户输入的操作不是上述操作,则抛出异常。在调试时,我看到找到文件xyz.txt,编译器进入readFromFile()。但是,在while循环中,它会检查文件中的数据,然后抛出异常 -

'operation_inputted_on_console' is not a valid command. 

我希望它能从文件中读取,并将其存储在我的arrayList中。

    class B
    {
    public void readFromFile() throws FileNotFoundException 
    {
            Scanner inputStream = null;
            inputStream = new Scanner(new FileInputStream("C:/Users/HB/workspace/A/src/xyz.txt"));
            while(inputStream.hasNextLine())
            {
                attribute1=inputStream.next();
                attribute2=inputStream.next();
                attribute3=inputStream.next();
                attribute4=inputStream.nextInt();
                attribute5=inputStream.nextInt();
                attribute6=inputStream.nextInt();
                attribute7=inputStream.nextInt();
                addPlayer(attribute1,attribute2,attribute3...);
            }
            inputStream.close();

    }
    public void writeToFile() throws FileNotFoundException 
    {
            PrintWriter outputStreamName = new PrintWriter(new FileOutputStream("C:/Users/HB/workspace/A/src/xyz.txt",true));
            int size = arrayList.size();
            B obj;
            //my code
            for (int i=0;i<size;i++)
            {
                //my code
            }
            outputStreamName.close();

        }
    }
    }

如果从我的类中删除readFromFile(),上面的代码工作正常。 readFromFile在这里出了点问题导致了这个问题。

xyz.txt包含以下内容 -

a,a,a,2,0,2,0
b,b,b,2,2,0,0
c,c,c,2,1,1,0
a,a,a,1,0,1,0
b,b,b,1,1,0,0

1 个答案:

答案 0 :(得分:1)

问题是你试图使用next和nextInt解析一行字符串,结果导致InputMismatchException,它们之间应该有一个没有逗号的空格。

示例:

a a a 2 0 2 0

使用上面的示例,您可以完全使用您的内部代码 while语句,但由于你有逗号,你需要使用split方法将其拆分

在txt文件中使用您的示例

while(inputStream.hasNextLine())
        {
            string[] line =inputStream.nextLine().split(",");
            string firstLetter = line[0];
            string secondLetter = line[1];
            string thriedLetter = line[2];
            int firstNumber = String.parseInt(line[3]);
            int secondNumber = String.parseInt(line[4]);
            int thriedNumber = String.parseInt(line[5]);
             int fourthNumber = String.parseInt(line[6]);
        }

使用上面的代码,您现在可以使用逗号

成功解析它