背景


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

拆分文本文件


  • 在此文件的文件夹进入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. 【NOIP 2018】填数游戏(思考与推导)

    题目链接 这道题讲道理还是不错的,因为你需要不断挖掘其中的性质来帮助解题.可惜数据范围开在这里让考试时的我很慌,勉强也就写了$65$分就没了.回忆在考场上,思路是没有错的,就是发掘不够深入,思路还不够 ...

  2. Problem A: Dreamweaver 解题报告

    人生首道非传统题给了交互... 考试的时候花了半小时搞清楚了这东西是啥,然后打了10分的暴力...但并没有拿到分. 而且一直不会本地测试... 捣鼓捣鼓了好久,问了人才知道.. 我本地没装g++,下发 ...

  3. luogu1941 [NOIp2014]飞扬的小鸟 (dp)

    设f[i][j]为到达(i,j)这个位置的最小操作数 就有$f[i][j]=min\{f[i-1][j+Y[i-1]],f[i-1][j-X[i-1]*k]+k\}$ 然后考虑优化一下转移: 对于一系 ...

  4. PostgreSQL(一)教程 -----SQL语言

    一.概念 PostgreSQL是一种关系型数据库管理系统 (RDBMS).这意味着它是一种用于管理存储在关系中的数据的系统.关系实际上是表的数学术语. 今天,把数据存储在表里的概念已经快成了固有的常识 ...

  5. 51nod1462 树据结构(树链剖分+线段树)

    这题好久之前就被学长安利了...一直没写珍藏在收藏夹一个不为人知的角落233 这题怎么做...我们来数形结合,横坐标为$t_i$被加的次数(可看作时间$t$),纵坐标为$v_i$,那么$t_i$实际上 ...

  6. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  7. Python常用模块-时间模块(time&datetime)

    Python常用模块-时间模块(time & datetime) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.初始time模块 #!/usr/bin/env pyth ...

  8. POJ 2965 The Pilots Brothers' refrigerator (暴力枚举)

    https://vjudge.net/problem/POJ-2965 与poj-1753相似,只不过这个要记录路径.poj-1753:https://www.cnblogs.com/fht-lito ...

  9. 一个ssm综合小案例-商品订单管理-第一天

    项目需求分析: 功能需求:登录,商品列表查询,修改 项目环境及技术栈: 项目构成及环境: 本项目采用 maven 构建 环境要求: IDEA Version: 2017.2.5 Tomcat Vers ...

  10. [整理]html5 WebApp 01

    在正式进入WebApp开发之前,有几个问题要解决: 1.我是产品策划:UI风格,功能设计,产品预期效果(如访问量等各类指标) 2.我是UI设计:图片图标制作,我该按怎样的大小来设计? 3.我是前端开发 ...