我想剪切一个文本文件。 我想将文件50行剪切50行。
例如,如果文件是1010行,我将恢复21个文件。
我知道如何计算文件数量,行数,但是一旦我写,它就不起作用。
我使用Camel Simple(Talend),但它是Java代码。
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();
}
}
}
}
对于不了解Camel的人,此行用于发送文件:
producerTemplate.sendBodyAndHeader (endpoint, line.toString (), "CamelFileName" Filename);
端点==&gt;目的地(可以使用其他代码)
line.toString()==&gt;值
然后是文件名(可以使用其他代码)
答案 0 :(得分:0)
你先计算行数
while((line = br.readLine()) != null){
sourcesize++; }
然后你就在文件的末尾:你什么都不读
for (int i=1;i<=numSplits;i++) {
while((line = br.readLine()) != null){
在重新阅读之前,你必须回到文件的开头。
但这是浪费时间和电源,因为你会读两次文件
最好一次性读取文件,将其放在List<String>
(可调整大小)中,然后使用存储在内存中的行继续进行拆分。
for (String value : list) {
builder.append("/n"+value);
}
您必须使用列表中的索引来构建小文件。
for (int k=0;k<numSplits;k++) {
builder.append("/n"+list[current_line++]);
current_line
是您文件中的全局行计数器。这样你每次都可以创建50行不同的文件:)