2017-08-31 46 views
-1

我必須訪問位於單個父文件夾中的多個xml文件,但是在該父文件夾中有多個子文件夾,並且在這些子文件夾內有時會有更多的子文件夾然後是xml文件。我已經編寫了一個代碼來讀取單個XML文件,並將xml數據輸出到一個csv。以下是我的代碼。 請查看代碼並提供任何相關解決方案。如何從Java中的不同文件夾讀取多個xml文件

public class XMLReader_Rar{ 

    public static void main (String[] args) throws Exception{ 

     File inputfile = new File("C:/Users/Vishvesh Savant/Desktop/Mirriad/Test/data4/subdir4/468736483.xml"); 


     File filePath = new File ("C:/Users/Vishvesh Savant/Desktop/Mirriad/Test/data4/subdir4/new.csv"); 

     DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dbuilder = dbfactory.newDocumentBuilder(); 

     Document doc = dbuilder.parse(inputfile); 
     doc.getDocumentElement().normalize(); 

     NodeList list = doc.getElementsByTagName("product"); 
     FileWriter fileWriter = null; 
     fileWriter = new FileWriter(filePath); 

     try{ 
      for(int i=0; i<list.getLength();i++){ 

       Node node = list.item(i); 

       if(node.getNodeType()==Node.ELEMENT_NODE){ 

        Element element = (Element) node; 

        fileWriter.append(element.getAttribute("uid")); 
        fileWriter.append(","); 
        fileWriter.append(element.getElementsByTagName("title").item(0).getTextContent()); 
        fileWriter.append(","); 
        fileWriter.append(element.getElementsByTagName("actor").item(0).getTextContent()); 
        fileWriter.append(","); 
        fileWriter.append(element.getElementsByTagName("director").item(0).getTextContent()); 
        fileWriter.append(","); 
        fileWriter.append(element.getElementsByTagName("country").item(0).getTextContent()); 
        fileWriter.append(","); 
        fileWriter.append(element.getElementsByTagName("format").item(0).getTextContent()); 
        fileWriter.append(","); 
        fileWriter.append(element.getElementsByTagName("bitrate").item(0).getTextContent()); 
        fileWriter.append(","); 
        fileWriter.append(element.getElementsByTagName("fps").item(0).getTextContent()); 
        fileWriter.append(","); 
        fileWriter.append(element.getElementsByTagName("aspect").item(0).getTextContent()); 
        fileWriter.append(","); 
        fileWriter.append(element.getElementsByTagName("width").item(0).getTextContent()); 

        fileWriter.flush(); 
        fileWriter.close(); 
       } 
      } 
     } 
     catch (Exception e) { 
      System.out.println("Error in CsvFileWriter !!!"); 
      e.printStackTrace(); 
     } 
    } 
} 

回答

0

使用Files.walk。它返回路徑的流(所有 - 文件夾和文件),你應該過濾(按類型,extention,名稱等)

String rootPath = "D:\\tmp"; 
Files.walk(Paths.get(rootPath)).filter(Files::isRegularFile).forEach(p -> { 
    File file = new File(p.toUri()); 
    //logic with file 
    System.out.println(file.getAbsolutePath()); 
}); 
+0

能否請您使用中,我已經提供了上面的代碼。如果可能的話 –

+0

該評論來自答案發布後9分鐘。在尋求進一步幫助之前,您需要做好9分鐘以上的準備工作,以瞭解並應用答案。這不是免費的編碼服務。 –

+0

@michal Kay在發佈我的問題之前,我嘗試過在同一個論壇上發現類似的東西,但在此之前,我嘗試了許多事情,甚至在發佈之前似乎沒有工作。只有在我的代碼中完成了足夠的研究和試驗和錯誤工作後,我纔會在此論壇上發佈問題。 –

相關問題