2017-09-02 10 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"で、子メソッドは "walk(f.getPath()、false)"です。私は、親の呼び出しが行われたときと、子の呼び出しが行われたときをチェックするフラグを作成しました。したがって、プログラムが最初に実行されるときに、この場合は "親"が呼び出され、新しいcsvファイルが作成されます。 問題: 私はプログラムを実行するたびに新しいcsvを作成することができません。新しい変更の後に、プログラムが異なるフォルダにあるxmlファイルからプログラムを取得するすべてのレコードに対して新しいcsvが作成されます。どちらが間違っていますか? –

+0

あなたの最新の努力のための解決策が必要な場合は、最新の努力を投稿する必要があります。確かにこれは明らかですか? – EJP

答えて

0

あなたが理解している方法では、1つの呼び出しのすべてのレコードをメインから同じファイルに移動する必要があります。以下のためにも - そして、あなたはすべてのコールのために同じファイル名を持つ

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

:これを行う方法は、(メインで、あなたのケースで)歩行法の外にCSVのファイルパスを指定して作成してにメソッドのシグネチャを変更することです

+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/")); 

これは接頭辞で指定したディレクトリにuniqeファイル名をgenereateます"out_"と接尾辞".csv"

0

"保存"機能を使用して値を保存し、その値をメインメソッドに追加しました。これは、あなたのサブディレクトリにも反映されます。 Createは、プログラムがそこで実行されるたびに呼び出され、レコードとともに新しいcsvファイルを作成します。

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); 
    } 
関連する問題