问题描述
- 如何将多个txt文本合并在一个文本里面并且完全打乱行序
-
我现在有几个个txt文件,每个文件里面都是一行一行的数据,单个文件差不多1G, 我现在想把他们合并在一个txt文件中,并且打乱他们的行序,我原本想各个文件先读取几行,放在一个数组里面打乱写入新的文本,接着在读取这些文件接下来的几行,还是合并打乱写入,知道全部读完,但是我不知道怎么去控制这个每次读取那些行
解决方案
文本文件是没有办法随机读写的,如果你能得知每行的最大字符数(假定用maxcharsnum表示),你可以先将这些文本文件转换成随机文件(也就是每行文字放入二进制文件n*maxcharsnum起始的位置)。
有了随机文件,你可以用如下方式打乱它们的序号:
int[] rndlines = Enumerable.Range(0, 总行数).OrderBy(x => new Guid.NewGuid()).ToArray();
然后根据这个乱序的行号去那个随机文件中快速定位每一行,输出。
解决方案二:
你的想法挺好的,读取的话用StreamReader会自动的一行一行的读取的;
解决方案三:
可以生成一个随机数作为行数,读完一行就把这行删掉
解决方案四:
String sFilePath = "";
FileReader aFileReader = new FileReader(new File(sFilePath));
BufferedReader bfRedaer = new BufferedReader(aFileReader);
String sOneLine = null;
//定义计数器
int nLineCount=0;
ArrayList tempLines = null;
while ((sOneLine = bfRedaer.readLine()) != null) {
if(tempLines==null){
tempLines = new ArrayList(10);
}
tempLines.add(sOneLine);
nLineCount ++;
//这里对10的倍数行进行处理,如果最后一行不是10的倍数,没有处理的情况
if(nLineCount%10==0){
//提交给其他方法进行打乱排序写入到另一个文件
tempLines = null;
}
}
//对最后一行不是10的倍数进行处理
if(tempLines!=null){
//进行处理
}
解决方案五:
可以生成一个随机数作为行数,读取的话用StreamReader会自动的一行一行的读取的;
不是随机的行数时,不要把内容写入的另一个记事本,直到读到指定的行时,再将此行内容写入的另一个记事本中,然后删除此行内容。
时间: 2024-05-17 18:55:06