бросить исключение nex возвращаясь к чтению - PullRequest
1 голос
/ 14 декабря 2011

Мне нужно прочитать текст, и я создал метод

public void load(String fname){

    try{

        BufferedReader reader = new BufferedReader(new FileReader(fname));

        String id_cliente = reader.readLine();
        while(id_cliente!=null){

            String name_surname = reader.readLine();
            int num_titoli = Integer.parseInt(reader.readLine());

            String[] sb = name_surname.split(" ");

            Cliente cl = new Cliente(id_cliente,sb[0],sb[1]);

            clientilist.put(Integer.parseInt(id_cliente.substring(1)),cl);

            for(int i = 0; i < num_titoli; i++){

                cl.addTitolo(String titolo = reader.readLine());
            }

            id_cliente = reader.readLine();
        }
    }
    catch(FileNotFoundException fnfe){

            try{


            }
            catch(FileNotFoundExeption fnfe){

                System.exit(0);
            }
    }
    catch(IOException ioe){

    }
}

, что я бы сделал, чтобы проверить, существует ли файл fname. Если это не FileNotFoundException, будет выброшено. ВнутриЯ должен попытаться открыть другой файл. Если его нет, выйдите с сообщением об ошибке. Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

В блоке catch первого оператора try catch вы можете поместить любой код, который вы хотите, и он будет выполнен, когда возникнет исключение.Вы можете прочитать другой файл, попробовать прочитать тот же файл еще раз, попросить пользователя указать правильный файл, ...

Но, как уже упоминалось, лучшее решение - проверить, существует ли файл, прежде чем создавать программу чтения.И если это не удастся, вы можете использовать другой файл (что, если этот файл тоже выйдет из строя?)

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

try{
   load(fname);
}catch(Exception e){
   try{
      load(alternativeFName);
   }catch(Exception e){
      System.out.println("None of the files are available");
      e.printStackTrace();
   }
}

И вот как будет выглядеть ваша функция загрузки:

public void load(String fname) throws Exception {
   // try opening file    
   File file = new File(fname);
   // check if valid file
   if( !file.exists() ){
      // if no valid file throw exception so we can react on that
      throw new Exception("File not available: "+fname);
   }
   //your code for reading here, at this point you know the file exists
   //...
}
0 голосов
/ 14 декабря 2011

Было бы проще сначала проверить, существует ли файл, вместо ожидания исключения:

File f = new File(fname);
if (!f.exists()) {
    // similarly, check for the existence of the other file, exit if necessary
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...