2014-01-20 208 views
0

我试图从文件夹中读取多个文本文件,但我得到一个奇怪的结果阅读从不同的目录中的多个文本文件,也许你能帮助我理解it.So使用扫描仪

File folder; 
int result; 

      JFileChooser chooser = new JFileChooser(); 
      chooser.setCurrentDirectory(new java.io.File(".")); 
      chooser.setDialogTitle("choosertitle"); 
      chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
      // 
      // disable the "All files" option. 
      // 
      chooser.setAcceptAllFileFilterUsed(false); 
      // 
      if (chooser.showOpenDialog(chooser) == JFileChooser.APPROVE_OPTION) { 
       System.out.println("getSelectedFile() : " 
         + chooser.getSelectedFile()); 
       folder = chooser.getSelectedFile(); 
       Scanner in = null; 
       for (File fileEntry : folder.listFiles()) { 
        try { 

         in = new Scanner(new File(fileEntry.getName())); 

        } catch (FileNotFoundException e1) { 

        } 
        String CompositionName = in.next(); 
        String Composer = in.next(); 
        in.next(); 
        String Duration = in.next(); 

        parent.model.addRow(new Object[] { "", Composer, 
          CompositionName, TrackNumber, Duration }); 

        in = null; 

       } 
      } 

使用此方法,我得到只读取文件夹的第一个文件。我得到一个NullPointerException String上的CompositionName = in.next();在第二个循环中,即使文件名是正确的。这种方式很有效,但我听说这不是一个好习惯。

File folder; 
int result; 

      JFileChooser chooser = new JFileChooser(); 
      chooser.setCurrentDirectory(new java.io.File(".")); 
      chooser.setDialogTitle("choosertitle"); 
      chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
      // 
      // disable the "All files" option. 
      // 
      chooser.setAcceptAllFileFilterUsed(false); 
      // 
      if (chooser.showOpenDialog(chooser) == JFileChooser.APPROVE_OPTION) { 
       System.out.println("getSelectedFile() : " 
         + chooser.getSelectedFile()); 
       folder = chooser.getSelectedFile(); 
       Scanner in = null; 
       for (File fileEntry : folder.listFiles()) { 


        try { 
         System.out.println(fileEntry.getName()); 
         in=null; 

         in = new Scanner(new File(folder.getAbsolutePath()+"\\"+fileEntry.getName())); 


        } catch (FileNotFoundException e1) { 

        } 
        String CompositionName = in.next(); 
        String Composer = in.next(); 
        in.next(); 
        String Duration = in.next(); 

        parent.model.addRow(new Object[] { "", Composer, 
          CompositionName, TrackNumber, Duration }); 

       } 
      } 

谢谢。

回答

0

你有没有尝试过这样的:

in = new Scanner(fileEntry); 
+0

Works.Thank you very much.Have a day/night。 – Konstantinos

0

你试图实例只用文件名的文件。除非您设置文件环境,否则这将失败(因为File实例需要有效的引用)。

从 - http://docs.oracle.com/javase/7/docs/api/java/io/File.html#File%28java.io.File,%20java.lang.String%29

该公司预计的父目录的孩子的名字文件(在你的情况是folder)和一个字串(fileEntry.getName()

由于对方回答说,

new Scanner(fileEntry) 

将工作,如将

new Scanner(new File(fileEntry.getAbsolutePath()) 

最后

new Scanner(new File(folder, fileEntry.getName()) 

也可以工作。

+0

你能解释为什么第一个文件被正确扫描?谢谢。 – Konstantinos

+0

老实说不确定。我在'FileNotFoundException'子句中引入一个'System.out.println(fileEntry.getName())'来查看发生了什么。 – Gorbles