2013-09-07 3 views
0

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

error: unreported exception FileNotFoundException; must be caught or declared to be thrown 

BufferedReader br = new BufferedReader(new FileReader(file)); 

Вот фрагмент кода:

class LoadFile implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      JFileChooser chooser = new JFileChooser(); 
      File f = new File("/home/ralf/Documents"); 
      String line = null; 

      chooser.setCurrentDirectory(f); 

      int returnVal = chooser.showOpenDialog(null); 

      if(returnVal == JFileChooser.APPROVE_OPTION) { 
       File file = chooser.getSelectedFile();    
       BufferedReader br = new BufferedReader(new FileReader(file)); 

       try { 
       while((line = br.readLine()) != null) { 
         System.out.println(line); 
        } 
       } catch (FileNotFoundException fnfe) { 
        JOptionPane.showMessageDialog(null, fnfe.getMessage()); 
        return; 
       } catch (IOException ex) { 
        ex.printStackTrace(); 
       }    
      } else { 

      } 
     } 
    } 

Примечание: Класс LoadFile является найденный в классе Animation (не показан), который расширяет JFrame. Я разместил кнопки в классе Animation consructor и оттуда вызвал действие LoadFilePerformed.

+0

Я думаю, что сам JFileChooser находит путь к файлу ... или вы выбираете или просматриваете файл. вам не нужно явно указывать параметр File в его currentDirectory !!! – agpt

ответ

1

В принципе, вы пытались создать BufferedReader вне try-catch блока и потому actionPerformed не может бросить любой тип исключения, компилятор жалуется

BufferedReader br = null; 
try {   
    br = new BufferedReader(new FileReader(file)); 

    while((line = br.readLine()) != null) { 
     System.out.println(line); 
    } 
} catch (FileNotFoundException fnfe) { 
    JOptionPane.showMessageDialog(null, fnfe.getMessage()); 
    return; 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} finally { 
    try { 
     // Best effort to close the reader... 
     br.close(); 
    } catch (Exception exp) {} 
} 

Вы также не закрывая читатель, когда вы закончите с ним. Золотое правило, если вы его открываете, вы должны закрыть его;)

+0

получил, спасибо :) –

0

Ваш BufferedWriter инструкция инициализации должна быть в блоке try и catch. Это связано с тем, что при создании нового объекта FileWriter он выдает IOException, который должен обрабатываться под блоками try и catch. This - это документация.

0

Попробуйте использовать:

class LoadFile implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     JFileChooser chooser = new JFileChooser(); 
     File f = new File("/home/ralf/Documents"); 
     String line = null; 

     chooser.setCurrentDirectory(f); 

     int returnVal = chooser.showOpenDialog(null); 

     if(returnVal == JFileChooser.APPROVE_OPTION) { 
      File file = chooser.getSelectedFile();  
      try {   
      BufferedReader br = new BufferedReader(new FileReader(file)); 

      while((line = br.readLine()) != null) { 
        System.out.println(line); 
       } 
      } catch (FileNotFoundException fnfe) { 
       JOptionPane.showMessageDialog(null, fnfe.getMessage()); 
       return; 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      }    
     } else { 

     } 
    } 
} 

Ваше BufferedReader br = new BufferedReader(new FileReader(file)); заявление было вне блока примерки поймать, что побудило его рассказать вам либо поймать или бросить его

0

Переместите BufferedReader линию в примерки уловом блок.

try { 
    BufferedReader br = new BufferedReader(new FileReader(file)); 
    while((line = br.readLine()) != null) { 
     System.out.println(line); 
    } 
    } catch (FileNotFoundException fnfe) { 
     JOptionPane.showMessageDialog(null, fnfe.getMessage()); 
     return; 
    } 
Смежные вопросы