按行拆分文本文件与合并文本文件---I/O流---java
背景
- 在进行自然语言处理的中文词性标注时 进行测试时由于测试数据文本行数较多 而且测试每次标注一行的用时稍长
- 如果一次将文件读进来测试机器运行时间要连续不能中断 而且 只能一台机器进行工作
- 于是想到分布式的方式 将大文件拆分成小文件 分别用于测试 再将得到的结果文件 合并成 一个大文件 用于评估
拆分文本文件
- 在此文件的文件夹进入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的更多相关文章
- Python文件操作---合并文本文件内容
目前一个用的比较多的功能:将多个小文件的内容合并在一个统一的文件中,对原始文件重命名标记其已被处理过.之前使用其他脚本写的,尝试用python写了一下,顺便熟悉一下python的文件处理命令. 原始文 ...
- [C/C++标准库]_[0基础]_[使用fstream合并文本文件]
场景: 1. 就是合并文本文件,而且从第2个文件起不要合并第一行. 2. 多加了一个功能,就是支持2个以上的文件合并. 3. 问题: http://ask.csdn.net/questions/192 ...
- 在论坛中出现的比较难的sql问题:27(字符串拆分、字符串合并、非连续数字的间隔范围、随机返回字符串)
原文:在论坛中出现的比较难的sql问题:27(字符串拆分.字符串合并.非连续数字的间隔范围.随机返回字符串) 在论坛中看到一个帖子,帖子中有一些sql方面的面试题,我觉得这些面试题很有代表性. 原帖的 ...
- Oracle数据行拆分多行
工作和学习中常常会遇到一行要分割成多行数据的情况,在此整理一下做下对比. 单行拆分 如果表数据只有一行,则可以直接在原表上直接使用connect by+正则的方法,比如: select regexp_ ...
- Oracle字符串行拆分成列的三种方式
Oracle字符串行拆分成列的三种方式 --muphy 开发过程中经常会遇到将前台多个值用逗号连接一同传递到后台查询,这个用逗号连接的字符串分隔的每个字符串分别对应Oracle数据库表的不同行. 如下 ...
- Linux:读取文件,每行拆分,并比较拆分数组长度
读取文件,每行拆分,并比较拆分数组长度 #!/bin/bash FILENAME=./.txt function While_read_LINE(){ cat $FILENAME | while re ...
- 文本文件的合并操作方法 - Python
我们有时候,看到几k的日志文件,一大堆,一个一个打开又很麻烦,少看几个,又担心遗漏,这个时候,如果有一个可以合并所有文本文件的工具就好了. 下面这个代码就可以实现,它不局限于.txt格式,基本上字符型 ...
- Oracle 字段拆分替换在合并成一条
看了网上很多Oracle字段拆分的实例,但是都未能完全满足要求,或许是我水平不够未能很好的理解,如果有大神懂得并且愿意告知我的,可以私信我,在这里真诚的感谢! 1. 首先建立表并插入测试数据 drop ...
- Linux查看文件总的数据行数,并按行拆分
先利用 wc -l BLM.txt 读出 BLM.txt 文件一共有多少行. 再 1. 以行数拆分 -l 参数: split –l 50 原始文件 拆分后文件名前缀 例:以50行对文件进行 ...
随机推荐
- Go 语言编程规范
1. gofmt 命令 大部分的格式问题可以通过 gofmt 来解决,gofmt 自动格式化代码,保证所有的 go 代码与官方推荐的格式保持一致,所有格式有关问题,都以gofmt的结果为准.所以,建议 ...
- Hadoop生态圈-Kafka常用命令总结
Hadoop生态圈-Kafka常用命令总结 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.管理Kafka服务的命令 1>.开启kafka服务 [yinzhengjie@s ...
- json字符串转java对象
今天遇到一个问题,前端ajax获取到一个javaBean对象,好多方法发ajax请求需要把这个对象再传到后端,后端再根据这个对象进行操作(之前计划传递id,但发现传递id的话,后端多个方法都需要根据i ...
- [应用篇]第六篇 JSTL之自定义函数标签库
在之前的JSTL的总结中已经对函数标签库进行了一些说明,在这里我再一次重新整理一下! 自带函数标签库介绍 引入该标签库的方法为: <%@ taglib prefix="fn&quo ...
- 网络编程之tcp窗口滑动以及拥塞控制
TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现.一.滑动窗口协议 关于这部分自己不晓得怎么叙述才好,因为理解的部 ...
- POJ - 3020 Antenna Placement(最小覆盖路径)
---恢复内容开始--- https://vjudge.net/problem/POJ-3020 题意 *--代表城市,o--代表空地 给城市安装无线网,一个无线网最多可以覆盖两座城市,问覆盖所有城市 ...
- CSS 编码中超级有用的工具集合
当你开发网站和 Web 应用时,使用合适的工具可以节省大量的时间.本文我将收集一些非常有用的 CSS 编码工具,希望对你有帮助. Pure CSS Pure 是来自雅虎的 CSS 框架,使用 Norm ...
- ASP.NET批量下载文件
一.实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹.然后调用 RAR程序,对临时文件夹进行压缩,然后输出到 ...
- git 入门常用命令(转)
Git工作流程:D:\projects\Setup2\Setup2\Setup2\Express\SingleImage\DiskImages\DISK1 git clone工作开始之初,可通过git ...
- 不能访问本地服务器场。没有注册带有FeatureDependencyId 的 Cmdlet
不能访问本地服务器场.没有注册带有FeatureDependencyId 的 Cmdlet. 原因: 我有两个域管理员账号,分别:sp\administrator,sp\spadmin 其中后者才 ...