背景


  • 在进行自然语言处理的中文词性标注时   进行测试时由于测试数据文本行数较多  而且测试每次标注一行的用时稍长
  • 如果一次将文件读进来测试机器运行时间要连续不能中断  而且 只能一台机器进行工作
  • 于是想到分布式的方式  将大文件拆分成小文件  分别用于测试  再将得到的结果文件 合并成 一个大文件 用于评估

拆分文本文件


  • 在此文件的文件夹进入powershell   使用如下命令进行拆分
//             源文件  目标文件  拆分的个数
java splitfile fromfile tofiles subfilenumber
  • 详细代码
public class splitfile {

    public static void main(String[] args) throws Exception{
DoFile dofile = new DoFile();
// 源文件 目标文件 拆分的个数
//dofile.splitfile("test.dat", "subtest/test", 10);
dofile.splitfile(args[0], args[1], Integer.parseInt(args[2])); } }
public class DoFile {

    public int getrows(File file) throws IOException{
int rows = 0;
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream(file)));
for (rows = 0; br.readLine() != null; rows++);
br.close();
return rows;
} public void splitfile(String from, String to, int subfilenum) throws IOException{
File fromfile = new File(from); if (!fromfile.exists()) {
throw new IOException(fromfile + "不存在!!!");
}
if (!fromfile.isFile()) {
throw new IOException(fromfile + "不是文件!!");
}
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream(fromfile))); String str = null;
int filerows = getrows(fromfile);
int subrows = (int) Math.ceil(1.0 * filerows / subfilenum); for (int i = 0; i < subfilenum; i++) { PrintWriter pw = new PrintWriter(to + "-" + i + ".dat");
int row = 0;
System.out.println("生成第:" + (i+1) + "个文件");
while(row < subrows) { if ((str = br.readLine()) != null) {
pw.println(str);
row++;
}else {
pw.flush();
pw.close();
break;
} }
pw.flush();
pw.close();
} br.close();
System.out.println("文件拆分完成!");
}
}

  • 测试结果


合并文本文件


  • 在此文件的文件夹进入powershell   使用命令
//装待合并的文件的文件夹  生成的新的文件
java mergefile dir newfile
  • 详细代码
public class mergefile {

    public static void main(String[] args) throws Exception{
DoFile dofile = new DoFile(); //合并文件 装小文件的文件夹 大文件
dofile.mergefile(args[0], args[1]);
} }
public class DoFile {

    //按行   合并文件    给定已知文件夹
public void mergefile(String dirname, String finalfile) throws IOException{
File dir = new File(dirname);
if (!dir.exists()) {
throw new IOException(dir + "不存在!!");
}
if (!dir.isDirectory()) {
throw new IOException(dir + "不是文件夹");
}
FileOutputStream out = new FileOutputStream(finalfile, true);
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(out));
int i = 1;
String[] files = dir.list(); for(String string: files) {
System.out.println("合并到第:" + i++ + "个文件");
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream(dir + "/"+ string)));
String str = null;
while((str = br.readLine()) != null) {
bw.write(str);
bw.newLine();
}
br.close();
}
bw.flush();
bw.close();
System.out.println("文件合并完成!"); } }

  • 测试结果

按行拆分文本文件与合并文本文件---I/O流---java的更多相关文章

  1. Python文件操作---合并文本文件内容

    目前一个用的比较多的功能:将多个小文件的内容合并在一个统一的文件中,对原始文件重命名标记其已被处理过.之前使用其他脚本写的,尝试用python写了一下,顺便熟悉一下python的文件处理命令. 原始文 ...

  2. [C/C++标准库]_[0基础]_[使用fstream合并文本文件]

    场景: 1. 就是合并文本文件,而且从第2个文件起不要合并第一行. 2. 多加了一个功能,就是支持2个以上的文件合并. 3. 问题: http://ask.csdn.net/questions/192 ...

  3. 在论坛中出现的比较难的sql问题:27(字符串拆分、字符串合并、非连续数字的间隔范围、随机返回字符串)

    原文:在论坛中出现的比较难的sql问题:27(字符串拆分.字符串合并.非连续数字的间隔范围.随机返回字符串) 在论坛中看到一个帖子,帖子中有一些sql方面的面试题,我觉得这些面试题很有代表性. 原帖的 ...

  4. Oracle数据行拆分多行

    工作和学习中常常会遇到一行要分割成多行数据的情况,在此整理一下做下对比. 单行拆分 如果表数据只有一行,则可以直接在原表上直接使用connect by+正则的方法,比如: select regexp_ ...

  5. Oracle字符串行拆分成列的三种方式

    Oracle字符串行拆分成列的三种方式 --muphy 开发过程中经常会遇到将前台多个值用逗号连接一同传递到后台查询,这个用逗号连接的字符串分隔的每个字符串分别对应Oracle数据库表的不同行. 如下 ...

  6. Linux:读取文件,每行拆分,并比较拆分数组长度

    读取文件,每行拆分,并比较拆分数组长度 #!/bin/bash FILENAME=./.txt function While_read_LINE(){ cat $FILENAME | while re ...

  7. 文本文件的合并操作方法 - Python

    我们有时候,看到几k的日志文件,一大堆,一个一个打开又很麻烦,少看几个,又担心遗漏,这个时候,如果有一个可以合并所有文本文件的工具就好了. 下面这个代码就可以实现,它不局限于.txt格式,基本上字符型 ...

  8. Oracle 字段拆分替换在合并成一条

    看了网上很多Oracle字段拆分的实例,但是都未能完全满足要求,或许是我水平不够未能很好的理解,如果有大神懂得并且愿意告知我的,可以私信我,在这里真诚的感谢! 1. 首先建立表并插入测试数据 drop ...

  9. Linux查看文件总的数据行数,并按行拆分

    先利用 wc -l BLM.txt       读出 BLM.txt 文件一共有多少行. 再 1. 以行数拆分 -l 参数: split –l 50 原始文件 拆分后文件名前缀 例:以50行对文件进行 ...

随机推荐

  1. c++并发编程之原子操作的实现原理

    原子(atomic)本意是”不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作”. 处理器如何实现原子操作 (1) 使用总线锁保证原子性 如 ...

  2. UDP ------ UDP Broadcast Address

    Related information link : 百度百科---->广播地址 Use restrictions: 1. You can only broadcast on the same ...

  3. 在kubernetes集群中创建redis主从多实例

    分类 > 正文 在kubernetes集群中创建redis主从多实例 redis-slave镜像制作 redis-master镜像制作 创建kube的配置文件yaml 继续使用上次实验环境 ht ...

  4. sssss

    关于征集参加第五届世界互联网大会“世界互联网领先科技成果发布活动”相关成果的通知 2018年07月24日 08:55:00来源: 中国网信网     [打印] [纠错]     各有关单位/个人: 第 ...

  5. bzoj千题计划229:bzoj4424: Cf19E Fairy

    http://www.lydsy.com/JudgeOnline/problem.php?id=4424 图是二分图的条件:没有奇环 所以,如果图不存在奇环,删除任意一条边都可以 如果存在奇环, 对于 ...

  6. CF #442 div2

    A 判断下5个名字出现了几次.pre数据巨弱,就这么一水题在std测刷掉了非常多的人.. /** @Date : 2017-10-24 16:04:41 * @FileName: A.cpp * @P ...

  7. scala 资料集结

    Scala入门到精通 http://lib.csdn.net/base/scala/structure http://hongjiang.info/scala/ http://blog.csdn.ne ...

  8. BZOJ1009 GT考试

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MB Description 阿申准备报名参加GT考试,准考证号为N位数X1X2.. ...

  9. Anaconda+django写出第一个web app(九)

    今天来学习外键的使用,用外键来连接数据库中的两个表. 当我们的tutorials非常多的时候,目前的显示方式就会使得页面非常凌乱.我们可以考虑把这些教程分为不同的系列,页面只显示标题以及概要等信息,进 ...

  10. 对package.json的理解和学习

    一.初步理解 1. npm安装package.json时  直接转到当前项目目录下用命令npm install 或npm install --save-dev安装即可,自动将package.json中 ...