2013-09-23 2 views
0

Я не смог устранить следующее исключение в приведенном ниже коде. В чем проблема с использованием метода BufferedReader? Я использую BufferedReader внутри основного методаРазрешение IOException, FileNotFoundException при использовании FileReader

ВЫВОД: -

ParseFileName.java:56: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown 

BufferedReader buffread = new BufferedReader (new FileReader("file.txt")); 

// ParseFileName is used to get the file name from a file path 
// For eg: get - crc.v from "$ROOT/rtl/..path/crc.v" 

import java.util.regex.Pattern; 
import java.io.*; 

public class ParseFileName { 

    //Split along /'s , and collect the last term. 
    public String getName (String longName) { 
     String splitAt = "/"; 
     Pattern pattern1 = Pattern.compile(splitAt); 
     String[] parts = pattern1.split(longName); 
     System.out.println("\nparts.length = " + parts.length); 

     //Return the last element in the array of strings 
     return parts[parts.length -1]; 
    } 

    public static void main(String[] args) { 
    ParseFileName superParse = new ParseFileName(); 
    BufferedReader buffread = new BufferedReader (new FileReader("file.txt")); 
    String line; 
    while ((line = buffread.readLine())!= null) { 
     String fileName = superParse.getName(line); 
     System.out.println("\n" + line + " => " + fileName); 
    } 
    buffread.close(); 

    } 

} 

UPDATE: следующие работы:

public static void main(String[] args) throws FileNotFoundException, IOException { 

Однако попробовать .. поймать все еще есть некоторые неприятные проблемы для меня:

try { 
BufferedReader buffread = new BufferedReader (new FileReader("file.txt")); 
} catch (FileNotFoundException ex) { 
    ex.printStackTrace(); 
} catch (IOException ex2) { 
    ex2.printStackTrace(); 
} 

Буферный доцент, похоже, получает имя файла. Я получаю эту ошибку:

javac ParseFileName.java ParseFileName.java:67: cannot resolve symbol 

символ: переменная buffread

location: class ParseFileName 

while ((line = buffread.readLine())!= null) { 
+0

Вы получаете ошибку компиляции или исключение? Это должно дать вам ошибку компиляции. –

+0

Это не имеет никакого отношения к 'BufferedReader' и не имеет отношения к' FileReader'. – EJP

ответ

5

Добавить throws FileNotFoundException, IOException в заголовке вашего метода. Похоже, что просто выброс IOException решит вашу проблему, но включение обоих позволит вам определить, была ли проблема с существованием файла или что-то пошло не так (см. Инструкции catch ниже).

т.е.

public static void main(String[] args) throws FileNotFoundException, IOException { 

С другой стороны, если вы хотите, чтобы поймать определенное исключение и сделать что-то с ним:

try { 
    BufferedReader buffread = new BufferedReader (new FileReader("file.txt")); 
} catch (FileNotFoundException ex) { 
    // Do something with 'ex' 
} catch (IOException ex2) { 
    // Do something with 'ex2' 
} 

Update для решения обновленный вопрос: Это просто которая может быть решена путем объявления BufferedReader вне инструкции try.

BufferedReader buffread = null; 
try { 
    buffread = new BufferedReader (new FileReader("file.txt")); 
} catch (FileNotFoundException ex) { 
     ... 
+0

По-прежнему его код не будет компилироваться, потому что 'line = buffread.readLine()' будет бросать 'IOException' –

+0

@RafiKamal Синтаксис того же, я отредактировал, чтобы включить оба. – ElliotSchmelliot

+0

Спасибо, я разрешил исключение, используя public static void main (String [] args) throws FileNotFoundException, IOException {, но вместо этого я хочу использовать синтаксис try .. catch. Я попробую это – Nik

1

Вы должны добавить throws заявление в подпись метода main или обернуть код в

try { 
    ... 
} catch (FileNotFoundException e) { 
    ... 
} 
0

BufferReader может бросить исключение, если файл не может быть найден или открыт правильно.

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

public static void main(String[] args) { 
    ParseFileName superParse = new ParseFileName(); 
    BufferedReader buffread; 
    try 
    { 
     buffread= new BufferedReader (new FileReader("file.txt")); 
    } 
    catch(FileNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 

    String line; 
    while ((line = buffread.readLine())!= null) { 
     String fileName = superParse.getName(line); 
     System.out.println("\n" + line + " => " + fileName); 
    } 
    buffread.close(); 
} 

Другой вариант - добавить «throws IOException» в заголовок вашего метода.

public static void main(String[] args) throws IOException { 
    //... 
} 

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

+0

'FileReader' выдает исключение. 'BufferedReader' даже не выполнил в этот момент. – EJP

1

Ваш код может выдавать FileNotFoundException или IOException, который является Checked Exception. Вам нужно окружить свой код в блоке try-catch или добавить объявление бросков в свою основную функцию.

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