Почему я получаю сообщение об ошибке «Не зарегистрированное исключение Java.io в коде Java при попытке чтения из текстового файла»? - PullRequest
0 голосов
/ 17 октября 2011

Я новичок в Java, и у меня все еще есть проблемы.

Я написал код, который читает все свои данные из текстового файла. Он хорошо компилируется, но когда я пытаюсь создать экземпляр кода из другого класса, он выдаёт мне следующую ошибку:

"незарегистрированное исключение java.io.fileNotFoundException, должно быть перехвачено или объявлено как выброшенное".

Я понимаю, что это, вероятно, проблемы с моими бросками, попробуйте поймать, что у меня есть, и я их не включил, но я действительно не знаю, как их использовать, и я был бы признателен за помощь.

Спасибо всем, кто может помочь

Это код

    import java.io.*;
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.*;
    import java.util.Scanner;

    public class readTextFile1
    {
        private static int index = 0;
        private static int numberOfDepartmentsToRead;
        private static int i;

        private static  ArrayList<Employee> allEmployees = new ArrayList<Employee>();


        public readTextFile1()
            throws FileNotFoundException
            {

                Scanner inFile = new Scanner (new File("startup.txt") );

                storageSystem theStorageSystem = new storageSystem();       

                numberOfDepartmentsToRead = inFile.nextInt();

                String depName      = inFile.nextLine();
                System.out.println("this is the first one "+depName);

                while  (index < numberOfDepartmentsToRead ) 
                {

                    String depName1    = inFile.nextLine();
                    System.out.println("this should be the department name"+depName1);
                    String location1     = inFile.nextLine();
                    System.out.println("this should be the location"+location1);
                    String numberOfEmps = inFile.nextLine();
                    int    numberOfEmps1 = Integer.parseInt(numberOfEmps);
                    System.out.println("this is the number of employees: "+numberOfEmps1);
                    Department newDepartment = new Department(depName1 , location1);
                    theStorageSystem.setDepartment(newDepartment);

                    while (i < numberOfEmps1 )
                    {
                        String fName     = inFile.nextLine();
                        System.out.println("his first name is: "+fName);
                        String lName     = inFile.nextLine();
                        System.out.println("his last name is"+ lName);
                        String gender    = inFile.nextLine();
                        System.out.println("his gender is: "+gender);
                        String address   = inFile.nextLine();
                        System.out.println("his adrs is: "+address);
                        String   payLevel  = inFile.nextLine(); 
                        System.out.println("and this is the pay level"+payLevel);
                        int dPayLevel = Integer.parseInt(payLevel);
                        Employee employeesFromList = new Employee(fName, lName, gender, dPayLevel, "1er-543");
                        theStorageSystem.setEmployee(employeesFromList);
                        i++;
                    }   
                    i = 0;
                 index++;   
                }

                        while (inFile.hasNextLine())
                        {
                            String fName     = inFile.nextLine();
                                System.out.println("his first name is: "+fName);
                                String lName     = inFile.nextLine();
                                System.out.println("his last name is"+ lName);
                                String gender    = inFile.nextLine();
                                System.out.println("his gender is: "+gender);
                                String address   = inFile.nextLine();
                                System.out.println("his adrs is: "+address);
                                String   payLevel  = inFile.nextLine(); 
                                System.out.println("and this is the pay level"+payLevel);
                                int dPayLevel = Integer.parseInt(payLevel);
                                Employee employeesFromList = new Employee(fName, lName, gender, dPayLevel, "1er-543");
                                theStorageSystem.setEmployee(employeesFromList);
                            //  allEmployees = theStorageSystem.getEmployee();  
                        }

                        }

                    public ArrayList<Employee> giveEmployeeTf()
                    {
                        return allEmployees;
                    }
        }

Ответы [ 4 ]

2 голосов
/ 17 октября 2011

Каждый метод в java должен объявлять исключения, которые он может генерировать [кроме RuntimeException s]. Поскольку ваш метод выдает FileNotFoundException, он должен выполнить одну из двух вещей:

  1. объявить его как throws FileNotFoundException

  2. используйте блок try, catch и обработайте это исключение.

(*) Вышесказанное относится к активации вашего конструктора, то есть к методу, который фактически активирует c'tor.

0 голосов
/ 17 октября 2011

Возможно, вы захотите прочитать об исключениях и обработке исключений .


        public readTextFile1()
            throws FileNotFoundException

Это объявляет, что readTextFile1 может выдать FileNotFoundException, что является так называемым проверенным исключением . Это означает, что в тот момент, когда вы вызываете этот метод, вы должны либо перехватить его, либо явно объявить, что вызывающий метод также может его выбросить.

Поймать это будет работать так:

readTextFile1 file = new readTextFile1();
try {
    readTextFile1.readTextFile1();
} catch (FileNotFoundException ex) {
    // Here, handle the case that the file is not found. For example:
    System.err.println("File not found");
}

(Кстати, имена классов в Java обычно пишутся с заглавной буквы и должны быть в форме существительного, а не глагола. Например, TextFileReader.)

0 голосов
/ 17 октября 2011

Если в вашем коде возможны исключения, у вас есть два варианта:

  • Поймай их (и опционально обращайся с ними) или
  • отбросить их.

Их перехват осуществляется блоками, начинающимися с try {} и заканчивающимися catch (Exceptiontypename) (с необязательным блоком finally {}).

Бросив их дальше, вы разрешите стеку вызовов обрабатывать исключение. Для этого вы определили свой класс с помощью фразы «throws FileNotFoundException». Это означает, что отныне использование этого метода в любом коде должно будет подтверждать это необязательное исключение, либо либо перехватывая его, либо выбрасывая его еще дальше.

Поэтому, когда вы используете вышеописанный метод, вам нужно выполнить одно из двух упомянутых действий, и я уверен, что вы пропустили оба.

0 голосов
/ 17 октября 2011

Вам, вероятно, следует окружить использование метода readTextFile1() в блоке try-catch:

readTextFile1 cls = new readTextFile1();

try
{
    cls.readTextFile1();
}
catch (FileNotFoundException e)
{
    // report error or something
}

Кроме того, ваш класс назван неправильно, поскольку он не описывает его использование; Похоже, он хранит список Employee объектов и считывает эти данные, используя этот метод. Вам лучше позвонить в класс DepartmentReader или что-то еще (обратите внимание на заглавную букву в верхнем регистре).

...