2016-02-28 6 views
-2

Я писал код, который принимает абсолютный путь файла от JFileChooser и использует его для чтения через BufferedReader.FileNotFoundException JFleChooser и FileReader JAVA

Это код:

package TestPackage; 

    import java.io.BufferedReader; 
    import java.io.File; 
    import java.io.FileNotFoundException; 
    import java.io.FileReader; 
    import java.io.IOException; 
    import javax.swing.JFileChooser; 
    import javax.swing.filechooser.FileNameExtensionFilter; 
    import java.text.ParseException; 
    import java.util.concurrent.ExecutionException; 
    import javax.swing.JOptionPane; 

    /** 
    * 
    * @author MRx 
    */ 
    public class MainFrame extends javax.swing.JFrame { 

    /** Creates new form MainFrame */ 
    public MainFrame() { 
     initComponents(); 
     this.setLocationRelativeTo(null); 
    } 

File f; 
String filename; 
JFileChooser chooser; 

private void openModelActionPerformed(java.awt.event.ActionEvent evt) {           
// TODO add your handling code here: 
    chooser = new JFileChooser(); 
    FileNameExtensionFilter filter = new FileNameExtensionFilter("TEXT FILES", "txt", "text"); 
    chooser.setFileFilter(filter); 
    chooser.showOpenDialog(null); 
    f = chooser.getSelectedFile(); 
    filename = f.getAbsolutePath(); 

}           

private void btnRunActionPerformed(java.awt.event.ActionEvent evt) {          
// TODO add your handling code here: 
    JOptionPane.showMessageDialog(null, filename); 
{ 

public static void main(String args[]) { 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new MainFrame().setVisible(true); 
      } 
     }); 
    } 

    public String readSpecification() { 
     String spec = ""; 

     // trying to read from file the specification... 
     try { 

      BufferedReader reader = new BufferedReader(new FileReader(filename)); 
      String line = reader.readLine(); 
      while(line!=null) { 
       spec += line + "\n"; 
       line = reader.readLine(); 
      }   
     } catch (FileNotFoundException ex) { 
      ex.printStackTrace(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
     return spec; 
    } 



    String modelSpec = readSpecification(); 

я думаю, что проблема в том, что читатель не может найти путь, потому что он должен быть записан как «C: \ Users \ MRx \ Desktop», но код filename = f.getAbsolutePath(); возвращает путь «C: \ Users \ MRX \ Desktop .. есть ли у вас какие-либо идеи спасибо за помощь

EDIT: это исключение поймано:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at java.io.FileInputStream.<init>(FileInputStream.java:116) 
at java.io.FileInputStream.<init>(FileInputStream.java:79) 
at java.io.FileReader.<init>(FileReader.java:41) 
at TestPackage.MainFrame.readSpecification(MainFrame.java:333) 
at TestPackage.MainFrame.<init>(MainFrame.java:349) 
at TestPackage.MainFrame$8.run(MainFrame.java:323) 
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:672) 
at java.awt.EventQueue.access$400(EventQueue.java:81) 
at java.awt.EventQueue$2.run(EventQueue.java:633) 
at java.awt.EventQueue$2.run(EventQueue.java:631) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:642) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 
+0

Это никогда не обобщать, пожалуйста, напишите соответствующие куски кода вы на самом деле использовать. – Joni

+0

'C: \ Users \ MRx \ Desktop' - это каталог, вы не можете его открыть, как если бы он был обычным файлом. Что ты пытаешься сделать? – Joni

+0

это соответствующие части. Я думаю, проблема здесь, в методе OpenModel и readSpecification. новый FileReader не может найти файл, который я выбрал в методе openModelActionPerformed. – Pino

ответ

1

Обновление Вы вызываете метод readSpecification, когда объект сконструирован, то есть до того, как вы выбрали файл. Переместить линию

String modelSpec = readSpecification(); 

в метод openModelActionPerformed.


Старый ответ на основе неполной информации
Послание FileNotFoundException должно содержать имя файла, который не был найден. Так как его там нет, программа должна использовать пустую строку "" в качестве имени файла, которое также является значением по умолчанию, которое вы указали для переменной filename. Это предполагает, что вы можете использовать локальную переменную для этого назначения:

filename = f.getAbsolutePath(); 

Убедитесь, что вы используете правильную переменную.

Чтобы проверить, проверить, какой файл вы пытаетесь открыть перед открытием:

System.out.println("Trying to open ["+filename+"]"); 
BufferedReader reader = new BufferedReader(new FileReader(filename)); 
+0

С JOptionPane.showMessageDialog (имя файла), я получаю путь dir как «C: \ Users \ Mrx \ Destop \ sample.txt», поэтому имя файла переменной фактически получает absolutedPath выбранного файла. но, тем не менее, если я возвращаю переменную spec, String пуст. – Pino

+0

Пожалуйста, обновите вопрос с помощью кода, который вы используете. – Joni