2015-05-01 3 views
-2
static boolean exists(String location) { 
     File path = new File(location); 
     if (path.exists()){ 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 

static boolean checkFile(String location1) throws IOException { 
     if (exists(location1)) { 
      File file = new File(location1); 
      RandomAccessFile raf = new RandomAccessFile(file, "r"); 
      raf.seek(raf.length()-1); 
      byte lastByte = raf.readByte(); 
      raf.close(); 
      if (lastByte == 2) { 
       return true; 
      } 
      else { 
       return false; 
      } 
     } 
     else { 
      System.out.println("File does not exist, please try again: "); 
      Scanner sk = new Scanner(System.in); 
      String newLocation = sk.nextLine(); 
      checkFile(newLocation); 
      sk.close(); 
      return false; 

С учетом сказанного, я проверил с отдельного метода ли даже существует файл, однако, я хотел бы прямо сейчас сжать выше в единый метод по каким-то рекурсивно используя пытаясь угадать поймать:Обработка FileNotFoundException с примерки уловом

static boolean checkFile(String location) { 

     try { 
      File file = new File(location); 
     } 
     catch (FileNotFoundException e) { 
      System.out.println("File does not exist, please try again: "); 
      Scanner sk = new Scanner(System.in); 
      String newLocation = sk.nextLine(); 
      checkFile(newLocation); 
     } 

     //the following if-sentence checking whether some byte checks up. 
    } 

первая проблема: как я могу создать новый файл произвольного доступа, используя File file внутри попробовать? Я попытался инициализировать его перед попыткой File file = null;, но затем он выбрасывает NullPointer, потому что после того, как он поймает исключение, метод вызывается снова, и файл будет автоматически иметь значение null.

Другая идея состояла в том, чтобы try-catch внутри do-while -loop, но тогда я думал о том, что делать, а что? Я должен был проверить, существует ли файл, учитывая, что это то, что я уже делаю с try-catch, он становится излишним.

Что можно сделать с try-catch до тех пор, пока я ввожу путь, который не является файлом, а затем приступайте к предложению if всего одним способом?

+1

Вы пытаетесь использовать try-catch? Эта проблема намного проще без нее. –

+0

Да, это специально сказано, чтобы использовать try-catch для этой проблемы, хотя сам я тоже считаю это немного странным, потому что не было бы проще иметь метод, который проверяет существование файла, когда у нас есть n методов что все делают разные вещи с файлами? –

+1

ничего не говорится о «ответе», но я просто не могу его отпустить: подумайте о конденсации «if/else» в 'exists', чтобы быть' return (новый File (location)). Exists(); ' – MadConan

ответ

1

Если у вас есть, чтобы использовать try/catch, что я действительно не рекомендую, вы можете сделать это в цикле «навсегда», что-то вроде этого.

public static FileReader readerForPromptedFile() { 
    Scanner keyboard = new Scanner(System.in); 
    while (true) { 
     try { 
      System.out.println("Please enter a file name"); 
      String fileName = keyboard.nextLine(); 
      return new FileReader(fileName); 
     } catch (FileNotFoundException e) { 
      System.out.println("File not found, please try again"); 
     } 
    } 
} 
0

Что-то, как это должно работать:

static boolean checkFile(String location) { 

    while (!exists(location)){ 
     System.out.println("File does not exist, please try again: "); 
     Scanner sk = new Scanner(System.in); 
     String newLocation = sk.nextLine();   
    } 

    try { 
    //the following if-sentence checking whether some byte checks up. 
    } 
    catch (IOException e) { 
     // Handle exception 
    } 
} 

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

Смежные вопросы