2016-12-06 5 views
-1

Я пытаюсь проверить throws FileNotFoundException. Сначала я разместил свой exec.txt в моей папке проекта, чтобы проверить мою строку "testing" &, она отлично работает, когда я запускаю свою программу.Почему мой мой блок catch не работает?

Но теперь, я удалил мой exec.txt файл из моей папки, чтобы увидеть, если catch() часть в методе main будет работать, но это не так. Часть File not found части catch() не отображается в консоли.

import java.io.*; 

public class Crashable { 

public static void openFile(String f) throws FileNotFoundException { 
    PrintWriter f1 = new PrintWriter(f); 
    f1.write("testing"); 
    f1.close(); 
} 

public static void main(String[] args) { 
    String f = "exec.txt"; 

    try { 
     openFile(f); 
    } catch(FileNotFoundException e) { 
     System.out.println("File not found"); 
    } 
    } 
} 
+2

Перечитайте документы для конструктора PrintWriter: «Если файл существует, он будет усечен до нуля, иначе будет создан новый файл». Исключение выдается только в том случае, если он не может создать файл. – yshavit

ответ

0

Как указано в документации, FileNotFoundException будет сгенерирован, когда файл не может быть доступен или создано.

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

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

0

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

String f = "zzz/exec.txt" 
0

Вы никогда не бросать исключения в методе openFile. Из Java docs,

общественного PrintWriter (файл File) бросает FileNotFoundException

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

Параметры: file - Файл для использования в качестве адресата этого автора. Если файл существует, он будет усечен до нулевого размера; в противном случае будет создан новый файл . Вывод будет записан в файл и буферизирован .

Так что если файла нет, вы создаете новый файл. По сути, все работает, потому что, хотя файла нет, когда вы создаете объект PrintWriter, он создает новый файл и не выдает ошибку.

0

Вы фактически создаете новый файл каждый раз, когда этот кусок коды:

PrintWriter f1 = new PrintWriter(f); f1.write("testing"); f1.close();

Вместо этого попробуйте:

public static void openFile(String f) throws FileNotFoundException { 
File file = new File(f); 
if(!file.exists()) 
{ 
    throw new FileNotFoundException(); 
} 
else 
{ 
    //do Something with the file 
}} 

Надеется, что это помогает ..

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