2013-12-01 7 views
0

Я практиковал чтение текста из файла и не мог понять, что я делаю неправильно. Это то, что я имел в первый:Файл еще не найден

public class Main { 
public static void main(String[] args){ 
File f = new File("C:\\test\\est.txt"); 
      Scanner in = new Scanner(f); 
      while (in.hasNext()){ 
       System.out.println(in.next()); 
      } 
     } 
} 

Компилятор сказал: Необработанное исключение java.io.FileNotFoundException. Так что я попытался это:

File f = new File("C:\\test\\est.txt"); 
    Scanner in = new Scanner(f); 
    try{ 
     while (in.hasNext()){ 
      System.out.println(in.next()); 
     } 
    }catch (IOException i){ 
     System.out.println(i.getMessage()); 
    } 

Теперь компилятор сказал: Необработанное исключение java.io.FileNotFoundException. А также: java.io.fileNotFoundException никогда не бросается в соответствующий блок try.

Тогда я попытался это:

File f = new File("C:\\test\\est.txt"); 
    Scanner in = new Scanner(f); 
    try{ 
     while (in.hasNext()){ 
      System.out.println(in.next()); 
     } 
    }catch (IOException i){ 
     throw new IOException(i.getMessage()); 
    } 

Однако он по-прежнему говорит: Необработанное исключение java.io.FileNotFoundException!

Может кто-нибудь объяснить, что я делаю неправильно & Как я могу прочитать весь текст из файла в порядке, который похож на мою попытку.

** Обратите внимание, что мой файл существует.

+0

Может быть, что файл действительно является 'C: \\ тест \\ test.txt' ??? – Axel

+0

@ Аксель Нет, его нет. Хотя это выглядит так: –

ответ

4

Необработанное исключение означает, что оно может быть выброшено где-то в вашем коде, но вы не принимаете его во внимание, когда вам явно нужно. Поэтому, чтобы исправить, оберните его в try-catch:

File f = new File("C:\\test\\est.txt"); 
try 
{ 
    Scanner in = new Scanner(f); 
    while (in.hasNext()){ 
     System.out.println(in.next()); 
    } 
}catch (IOException i){ 
    e.printStackTrace(); 
} 

Обратите внимание, что сканер также находится внутри блока try. Ваша попытка была хорошей, но конструктор Scanner также может вызывать исключение FileNotFoundException. Чтобы исправить такие проблемы в будущем, компилятор сообщает вам, какую строку выдает исключение, а не обрабатывается.

+0

Хорошо, но теперь компилятор печатает 'java.io.FileNotFoundException: C: \ Users \ Cristian \ Desktop (Access is denied)'. Почему «Доступ запрещен?» –

+0

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

1

Вы должны обрабатывать FileNotFoundException либо говоря:

throws FileNotFoundException 

в заголовке вашего метода. Или добавить поймать заявление:

}catch (FileNotFoundException ex){ 
    //log it or handle it 
} 

Кроме того, избегая бросать же исключение в улове:

throw new IOException(i.getMessage()); 

Так что вы хотите что-то вроде:

try{ 
    File f = new File("C:\\test\\est.txt"); 
    Scanner in = new Scanner(f); 
    while (in.hasNext()){ 
     System.out.println(in.next()); 
    } 
}catch (FileNotFoundException ex){ 
    //log it or handle it 
}catch (IOException i){ 
    //throw new IOException(i.getMessage()); 
    //log it or handle it 
} 

Хорошо, но теперь компилятор печатает java.io.FileNotFoundException: C: \ Users \ Cristian \ Desktop (доступ запрещен). Почему «Доступ запрещен?»

Убедитесь, что у вас есть доступ для чтения к этой директории. Попробуйте запустить IDE в качестве администратора (вы можете сделать это, щелкнув правой кнопкой мыши по IDE и нажмите «Запуск от имени администратора»).

+0

Почему кто-то проголосовал за это и не объяснил почему ...? –

+0

Да, я это сделал. ОП знает, что он должен обернуть тело try catch. И он даже знает, что FileNotFoundException расширяет исключение IOException. Он только не знает, где он должен это выразить. Этот ответ не помогает ОП. –

+0

Даже после вашего редактирования код все равно не будет компилироваться ... –

1

Ну, ошибка говорит вам, в чем проблема :-) Вы уже обрабатываете IOException, но не FileNotFoundException!

Попробуйте так:

File f = new File("C:\\test\\est.txt"); 
Scanner in = null; 
try { 
    in = new Scanner(f); 
} catch (IOException i){ 
    i.printStackTrace(); 
} 

while (in != null && in.hasNext()){ 
    System.out.println(in.next()); 
} 

редактирования: Ok фактически FileNotFoundException расширяет IOException, так что вам не нужно обрабатывать его отдельно, очевидно :)