2017-07-14 7 views
0

コードスニペットは、CSVファイルを複数のCSVファイルに分割し、最初の列の内容を子CSVファイルに書き込みます。私がこのコードで見たのは、列ヘッダ "UNIQUE ID"がFIRST CSVファイルにのみ表示されていることです。次のCSVファイルには、ヘッダーのないデータのみが含まれています。私はArrayListの最初のインデックスとその後の残りのデータにヘッダーを置くことができるように、私はArrayListを使用すると思ったすべてのファイルにヘッダーを取得するために。しかし、私は悲惨に失敗しました。charArray()を使用してBufferedWriterにArrayListを書き込む

すべての子ファイルに列データの最初の行として追加の一意のIDENTIFIER行があるように、コードを変更する方法の提案またはヘルプが必要です。私が試したコードは貼り付けてあり、動作しませんでした。 Child csv should look like thisThis is what I am getting

public static void myFunction(int lines, int files) throws FileNotFoundException, IOException { 


    String inputfile = "C:/Users/Downloads/CONSOLIDATED.csv"; 
    BufferedReader br = new BufferedReader(new FileReader(inputfile)); 
    String strLine = null; 
    for (int i = 1; i <= files; i++) { 

     FileWriter fstream1 = new FileWriter("C:/Users/Downloads/FileNumber_" + i + ".csv"); 
     BufferedWriter out = new BufferedWriter(fstream1); 

     for (int j = 0; j < lines; j++) { 

      strLine = br.readLine(); 
      if (strLine != null) { 

       String strar[] = strLine.split(","); 
       ArrayList<String> al=new ArrayList<String>(); 
       al.add(0,"Unique Identifier"); 
       al.add(1,strar[0]); 
       char c[] = al.toString().toCharArray(); 
       out.write(c); 
       out.newLine(); 
      } 
     } 
     out.close(); 
    } 
    br.close(); 
} 
+0

オープンソースのcvsReader csvWriterの使用はいかがですか? –

+0

fileWriter =新しいFileWriter( "File" + fileName + ".csv"); \t \t csvFilePrinter =新しいCSVPrinter(fileWriter、csvFileFormat); \t \t csvFilePrinter.printRecord(FILE_HEADER); (文字列noderef:nodeReflist)用\t \t {\t \t \tリストnodeRefDetail =新しいArrayListを()。 \t \t \t String [] idArray = noderef.split( ";"); \t \t \t nodeRefDetail.add(idArray [0]); \t \t \t nodeRefDetail.add(idArray [1]); \t csvFilePrinter.printRecord(nodeRefDetail); \t \t \t} – New2Java

+0

@ ScaryWombat私はcsvReaderとcsvWriterを使って行っています。私は、coreJavaとコレクションAPIを使用して実装したいと思います。それが可能かどうかだけを見たい! – New2Java

答えて

0

あなたの問題は、ループの外にヘッダを維持していないということです。メインループの前の最初の行を読んで、リストにヘッダーを格納してみてください。新しいファイルを作成するたびに、内部ループを開始する前に、各ファイルの最初の行にヘッダーを書き込んでください。

public static void myFunction(int lines, int files) throws FileNotFoundException, IOException { 


    String inputfile = "C:/Users/Downloads/CONSOLIDATED.csv"; 
    BufferedReader br = new BufferedReader(new FileReader(inputfile)); 
    String strLine = br.readLine(); //here you have the headers 
    String[] headers=strLine.split(","); 

    for (int i = 1; i <= files; i++) { 

     FileWriter fstream1 = new FileWriter("C:/Users/Downloads/FileNumber_" + i + ".csv"); 
     BufferedWriter out = new BufferedWriter(fstream1); 

     out.write(headers[0]); 

     for (int j = 0; j < lines; j++) { 
      out.newLine(); 
      strLine = br.readLine(); 
      if (strLine != null) { 

       String strar[] = strLine.split(","); 
       out.write(strar[0]); 
      } 
     } 
     out.close(); 
    } 
    br.close(); 
} 
+0

@Pablo ...あなたの努力に感謝します。答えで示唆したように、私はこの部分について混乱しています... "そして、新しいファイルを作成するたびに、内部ループを開始する前に各ファイルの最初の行。 "これをarrayListでどのように実現するか。私はどんなアプローチも考えることができません。リストに関連するすべてのメソッドもチェックされていますが、何か助けになるものは見つかりませんでした。 – New2Java

+0

あなたの提案通りに試してみてください。それは目的を達成できませんでした@Pablo – New2Java

+0

出力ファイルの形式がわからないので、私は一般的な考えを書いただけです。メソッドを更新しました –

関連する問題