2016-09-07 40 views
0

テキストファイルをカットしたい。 50行×50行のファイルをカットしたい。ファイルを複数のファイルに分割

たとえば、ファイルが1010行の場合、21個のファイルがリカバリされます。

私はファイル数、行数を計算する方法を知っていますが、書き込むとすぐには動作しません。

私はCamel Simple(Talend)を使用しますが、Javaコードです。

producerTemplate.sendBodyAndHeader (endpoint, line.toString(), "CamelFileName" Filename); 

エンドポイントは==>宛先は(それは別のコードでOKです)

ライン:キャメルを知らない人のために

private void ExtractOrderFromBAC02(ProducerTemplate producerTemplate, InputStream content, String endpoint, String fileName, HashMap<String, Object> headers){ 
     ArrayList<String> list = new ArrayList<String>(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(content)); 
     String line; 
     long numSplits = 50;     
     int sourcesize=0; 
     int nof=0; 
     int number = 800; 
     try {    
      while((line = br.readLine()) != null){ 
        sourcesize++; 
        list.add(line); 
      } 

     System.out.println("Lines in the file: " + sourcesize);  

     double numberFiles = (sourcesize/numSplits); 
     int numberFiles1=(int)numberFiles; 
       if(sourcesize<=50) { 
        nof=1; 
       } 
       else { 
        nof=numberFiles1+1; 
       } 
     System.out.println("No. of files to be generated :"+nof); 

     for (int j=1;j<=nof;j++) { 
       number++; 
       String Filename = ""+ number; 
       System.out.println(Filename); 

      StringBuilder builder = new StringBuilder(); 
      for (String value : list) { 
       builder.append("/n"+value); 
      } 

      producerTemplate.sendBodyAndHeader(endpoint, builder.toString(), "CamelFileName",Filename); 
     } 

      } 

     } catch (IOException e) { 
       e.printStackTrace(); 
     } 
      finally{ 
       try { 
        if(br != null)br.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 

は、この行は、ファイルを送信するために使用されます。 toString()==>

答えて

0

(それは別のコードでOKです)、ファイル名を

を値とあなたが数えます

while((line = br.readLine()) != null){ 
        sourcesize++; } 

行が最初にして、ファイルの末尾にしている:あなたは、あなたが再び読み込む前に、ファイルの先頭に戻って模索する必要があり、何も

for (int i=1;i<=numSplits;i++) { 
       while((line = br.readLine()) != null){ 

を読みません。

しかし、それは時間の無駄だファイルそれは、一度、すべてのファイルを読み込むList<String>(サイズ変更可能)に入れて、使用して分割を続行する方が良いです二回

を読んであげるため&パワーメモリに格納された行

EDIT:あなたは私のアドバイスに従い、次の問題を見つけたようです。多分、別の質問をしてもいいでしょう。これは、すべての行でバッファを作成します。

for (String value : list) { 
       builder.append("/n"+value); 
      } 

小さなファイルを作成するには、リストにインデックスを使用する必要があります。

for (int k=0;k<numSplits;k++) { 
     builder.append("/n"+list[current_line++]); 

current_lineは、ファイル内のグローバルラインカウンタです。そうすれば、毎回50行のファイルを作成することができます:)

+0

Merci Jean-François!私はいくつかの変更を加えました(私のコードを見てください)私は3つのファイルを作成しましたが、それらを切り詰めることはできません。各ファイルには元のファイルがすべて含まれています。 配列リストでは、キャリッジリターンは行われません。 – Valentino

+0

ありがとうJean-François! 私は愚かでなければなりません... :) 50回ループするのは奇妙に思えます:for(int k = 0; k Valentino

関連する問題