2013-10-06 4 views
0

Я пытаюсь открыть файл в JAVA с помощью BufferedReader, но он не может открыть файл. Вот мой кодНевозможно открыть файл в JAVA

public static void main(String[] args) { 


    try 
    { 

     BufferedReader reader = new BufferedReader(new FileReader("test.txt")); 

     String line = null; 
     while ((reader.readLine()!= null)) 
     { 
      line = reader.readLine(); 
      System.out.println(line); 
     } 
     reader.close();   
    } 
    catch(Exception ex) 
    { 
     System.out.println("Unable to open file ");    
    } 

} 

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

+5

Задумались ли вы о печати сообщения об исключении? –

+0

Не ловить 'Исключение'. Вы не будете знать, какой тип «Исключение». Вместо этого поймайте конкретное 'IOException'. –

+1

Я согласен с комментарием выше. Вместо вашего System.out.println используйте «ex.printStackTrace()». Это даст вам некоторые основные детали. Если бы я должен был догадаться, проблема в том, что вы не указали путь к файлу, это проблема. Это приведет к чему-то вроде «FileNotFoundException». – EJK

ответ

-1

Попробуйте выполнить проверку, если она существует первый:

File file = new File("test.txt"); 
if (!file.exists()) { 
    System.err.println(file.getName() + " not found. Full path: " + file.getAbsolutePath()); 
    /* Handling code, or */ 
    return; 
} 
BufferedReader reader = new BufferedReader(new FileReader(file)); 
/* other code... */ 
+0

Любое замечание на нижнем уровне? – Rogue

+0

Это бессмысленно. Сообщение об исключении может рассказать вам одно и то же, или, может быть, другое дело, например, если у вас нет доступа для чтения. Он также уязвим для проблемы с временным окном: существование файла может меняться между тестом 'exists()' и конструированием 'FileReader'. Это также избыточно. Ничего не рекомендую. – EJP

+0

Хотя время достаточно верно, я думаю, что делать проверку, если она существует, а затем обработка немного проще. Еще одна вещь, которую следует учитывать, это то, что file.exists() возвращает false и Reader (File), бросая исключение FileNotFoundException, не означает одно и то же. file.exists() вернет true для каталогов и может вернуть true для простых файлов, для которых у вас нет привилегий чтения, в то время как Reader будет бросать исключение FileNotFoundException в этих случаях. – Rogue

0

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

1

Если вы хотите быть более почти современный, попробуйте решение Java 7, взятый из Paths Javadoc:

final Path path = FileSystems.getDefault().getPath("test.txt"); // working directory 
try (final Reader r = Files.newBufferedReader(path, StandardCharsets.UTF_8)) { 
    String line = null;   
    while ((line = r.readLine()) != null) { 
     System.out.println(line); 
    } 
} // No need for catch; let IOExceptions bubble up. 
    // No need for finally; try-with-resources auto-closes. 

Вам нужно объявить main, как бросание IOException, но это нормально. В любом случае у вас нет согласованного способа обработки IOException. Просто прочитайте трассировку стека, если вызвано исключение.

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