2014-01-20 262 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