更改拆分

时间:2016-09-09 12:21:01

标签: java

今天,我的代码可以运行,但它将2行分为2行,但这不是目标。 我想改变分割,我想将50行除以50行而不是2乘2。 如果我这样离开,我有三行2行 如果我有135行,我想:

  • 拳击文件:50行(我文件的第1-50行),文件名为801。
  • 第二个文件:50行(我的文件的第51-100行),文件名是802。
  • 第三个文件:35行(我文件的第101-135行),文件名是803。

这是我的代码:

private void MyCode(ProducerTemplate producerTemplate, InputStream content, String endpoint, String fileName, HashMap<String, Object> headers){
    ArrayList<String> list = new ArrayList<String>();
    String line;
    long numSplits = 50; //Number of lines per split              
    int sourcesize=0; //Number of lines
    int number = 800; //my filename 
    BufferedReader br = new BufferedReader(new InputStreamReader(content));

    try{

        while((line = br.readLine()) != null){
            sourcesize++;
            list.add(line); //add the lines in the arraylist
        }

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

        for( int i = 0 ; i <= list.size() ; i+=numSplits) {
            String  Filename = ""+ number;
            System.out.println(Filename);
            StringBuilder builder = new StringBuilder();
            builder.append(list.get(i)).append(System.lineSeparator()).append(list.get(i+1));
            producerTemplate.sendBodyAndHeader(endpoint, builder.toString(), "CamelFileName",Filename); //Used to forward lines and the file name
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}

我想:

for (int k=0;k<numSplits;k++) {  
      builder.append(list.get(i));
      builder.append(System.lineSeparator());
}

如何更改拆分? 如何切断arraylist所有50次出现?

1 个答案:

答案 0 :(得分:0)

private void MyCode(ProducerTemplate producerTemplate, InputStream content, String endpoint, String fileName, HashMap<String, Object> headers){
    BufferedReader br = new BufferedReader(new InputStreamReader(content));

    ArrayList<String> list = new ArrayList<String>();
    String line;
    int numSplits = 50; 
    int number = 800;          
    int sourcesize=0; 
    try{
        while((line = br.readLine()) != null){
            sourcesize++;
            list.add(line); 
        }
    }
    catch (IOException e){
        e.printStackTrace();
    }
    System.out.println("Lines in the file: " + sourcesize);
    ArrayList<ArrayList<String>> parts = cutListInChunksOfSameSize(list, numSplits);

    for (ArrayList<String> part : parts){
         String  Filename = ""+ (number++);
         System.out.println(Filename);
         StringBuilder builder = new StringBuilder();

         for( int i = 0 ; i <part.size() ;i++){   
             builder.append(part.get(i)).append(System.lineSeparator());                
        }
        producerTemplate.sendBodyAndHeader(endpoint, builder.toString(), "CamelFileName",Filename); 
    }
}

public <T> ArrayList<ArrayList<T>> cutListInChunksOfSameSize(ArrayList<T> list, final int L) {
    ArrayList<ArrayList<T>> parts = new ArrayList<ArrayList<T>>();
    final int N = list.size();
    for (int i = 0; i < N; i += L) {
      parts.add(new ArrayList<T>(list.subList(i, Math.min(N, i + L))));
    }
    return parts;
}