2017-09-02 133 views
0

下面是我工作过的代码,它基本上遍历文件夹并从xml文件中提取数据并将数据输出到CSV文件中。所有这些工作。但我想每次运行程序时都创建新的输出csv文件。如果你们可以提供一些例子或修改我曾经工作的代码,我将不胜感激。请我现在几个小时一直试图找出解决方案。如何在每次使用Java运行程序时创建一个新文件

public class MergeCode1 { 

    public void walk(String path,Boolean is_parent) throws Exception { 
     File filePath = new File ("C:/Users/Vishvesh Savant/Desktop/Mirriad/"); 
     System.out.println(filePath); 


     File root = new File(path); //Input File Path 
     File[] list = root.listFiles(); 

     while(is_parent == false); 
     { 
      Random rand = new Random(); 
      int value; 
      value=rand.nextInt(50)+1; 
      filePath = new File (("C:/Users/Vishvesh Savant/Desktop/Mirriad/"+"new_one"+value+".csv")); 
     } 
     try{ 
      if (list == null) return; 
      System.out.println("2"); 

      for (File f : list) { 
       DocumentBuilderFactory dbfactory = null; 
       DocumentBuilder dbuilder = null; 
       Document doc = null; 

       if (f.isDirectory()) { 
        walk(f.getPath(),false); 
        System.out.println("Dir:" + f.getAbsolutePath()); 
       } 
       else { 
        System.out.println("File:" + f.getAbsolutePath()); 
        dbfactory = DocumentBuilderFactory.newInstance(); 
        dbuilder = dbfactory.newDocumentBuilder(); 
        doc = dbuilder.parse(f.getAbsolutePath()); 
        doc.getDocumentElement().normalize(); 

        NodeList list1 = doc.getElementsByTagName("product");     
        FileWriter fileWriter = new FileWriter(filePath, true); 

//     String Fileheader="uid,title"; 
//     fileWriter.append(Fileheader.toString()); 
//     fileWriter.append("\n"); 

        for(int i=0; i<list1.getLength();i++){ 
         Node node = list1.item(i); 
         if(node.getNodeType() == Node.ELEMENT_NODE){ 
          Element element = (Element) node; 
          fileWriter.append(element.getAttribute("uid")); 
          System.out.println(element.getAttribute("uid")); 
          fileWriter.append(","); 
          fileWriter.append(element.getElementsByTagName("title").item(0).getTextContent()); 
          System.out.println(element.getElementsByTagName("title").item(0).getTextContent()); 
          fileWriter.append(","); 
          fileWriter.append(element.getElementsByTagName("actor").item(0).getTextContent()); 
          System.out.println(element.getElementsByTagName("actor").item(0).getTextContent()); 
          fileWriter.append(","); 
          fileWriter.append(element.getElementsByTagName("director").item(0).getTextContent()); 
          System.out.println(element.getElementsByTagName("director").item(0).getTextContent()); 
          fileWriter.append(","); 
          fileWriter.append(element.getElementsByTagName("country").item(0).getTextContent()); 
          System.out.println(element.getElementsByTagName("country").item(0).getTextContent()); 
          fileWriter.append(","); 
          fileWriter.append(element.getElementsByTagName("format").item(0).getTextContent()); 
          System.out.println(element.getElementsByTagName("format").item(0).getTextContent()); 
          fileWriter.append(","); 
          fileWriter.append(element.getElementsByTagName("bitrate").item(0).getTextContent()); 
          System.out.println(element.getElementsByTagName("bitrate").item(0).getTextContent()); 
          fileWriter.append(","); 
          fileWriter.append(element.getElementsByTagName("fps").item(0).getTextContent()); 
          System.out.println(element.getElementsByTagName("fps").item(0).getTextContent()); 
          fileWriter.append(","); 
          fileWriter.append(element.getElementsByTagName("aspect").item(0).getTextContent()); 
          System.out.println(element.getElementsByTagName("aspect").item(0).getTextContent()); 
          fileWriter.append(","); 
          fileWriter.append(element.getElementsByTagName("width").item(0).getTextContent()); 
          System.out.println(element.getElementsByTagName("width").item(0).getTextContent()); 
          fileWriter.append(","); 
          fileWriter.append(element.getBaseURI()); 
          fileWriter.append(element.getAttribute("uid")); 
          fileWriter.append(element.getElementsByTagName("format").item(0).getTextContent()); 

          fileWriter.append("\n"); 

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

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

     MergeCode1 fw = new MergeCode1(); 
     fw.walk("C:/Users/Vishvesh Savant/Desktop/Mirriad/Test",true); 
    } 
} 
+0

什么是'is_parent'?您目前的代码不符合要求的方式?你是否意识到你的'while'循环中有错误的';'? – EJP

+0

是的,我在最近的努力中删除了while循环。 “is_parent”基本上是我的“public void walk”,而child方法是“walk(f.getPath(),false)”。我创建了一个标志来检查何时进行了父呼叫以及何时进行了子呼叫。所以当程序第一次运行时,在这种情况下将调用“父”,一个新的csv文件将被创建。 问题: 我无法在每次运行程序时创建一个新的csv,在我进行新更改后,为程序从位于不同文件夹中的xml文件中检索的每个记录创建新的csv。这是不正确的。 –

+0

如果您想为您的最新努力提供解决方案,您必须发布最新的努力。这当然很明显? – EJP

回答

0

我理解你的方式,你想把一个调用的所有记录从main移到同一个文件中;要做到这一点的方法是创建的走法外的CSV(在主你的情况下)的文件路径,改变方法签名:

public void walk(String path,Boolean is_parent, String filePath) throws Exception { 

然后,你必须对所有呼叫相同的文件名 - 也为你的子目录......假设你也将它传递给反射调用(我相信这是你的意图 - 对吧?)

+0

你的回答让我想到改变代码。做了一些改变,并添加了一些功能,现在程序手动执行程序后会创建新的csv文件。 –

0

使用System.currentTimeMillis()

long value; 
value = System.currentTimeMillis(); 
+0

这只会给我时间,我不认为会解决问题 –

+0

由于每次调用它时都会返回不同的值,因此您将拥有不同的文件名。如果您更改系统时间或运行程序的多个实例,则很少有重复的文件名。在这种情况下,您需要在创建文件之前检查文件的存在。 –

+0

如果你想100%确定文件不存在,你应该使用File类的exists方法。 –

2

而是这行:

filePath = new File (("C:/Users/Vishvesh Savant/Desktop/Mirriad/"+"new_one"+value+".csv")); 

您可以使用:

File filePath = File.createTempFile("out_", ".csv", new File("C:/Users/Vishvesh Savant/Desktop/Mirriad/")); 

这将genereate潮头文件名与前缀给出DIR “out_”和后缀名为 “.csv”。

0

使用“创建”函数来存储值,然后将该值附加到Main方法中。每次通过创建带有记录的新csv文件运行程序时,都会调用Create函数。

public void clean(FileWriter fileWriter) throws IOException{ 
     fileWriter.append("\n"); 
     fileWriter.flush(); 
     fileWriter.close(); 
    } 

public static long create(){ 
     long value; 
     value = System.currentTimeMillis(); 
     return value; 
    } 

    public static void main(String[] args) throws Exception { 
     long value = create(); 
     File filePath = new File ("G:/Mirriad/test_"+value+".csv"); 
     String Fileheader="UID,TITLE,ACTOR,DIRECTOR,COUNTRY,FORMAT,BITRATE,FRAMES_PER_SHIFT,ASPECT,WIDTH,PATH"; 
     FileWriter fileWriter = new FileWriter(filePath, true); 
     fileWriter.append(Fileheader.toString()); 

     MergeCode1 fw = new MergeCode1(); 
     String path = "G:/Mirriad/ScriptTest"; 

     fw.create(); 
     System.out.println(fw.create()); 
     fw.walk(path, filePath, fileWriter); 
     fw.clean(fileWriter); 
    } 
相关问题