JAVA怎么实现按行数分割文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA怎么实现按行数分割文件相关的知识,希望对你有一定的参考价值。

如:一个txt文件有105行,我想把这个文件分成每个文件10行的单独文件。最后不够10行的作为一个文件。这样就把这个txt文件分成11文件,前10个文件每个有10行的内容,最后一个只有5行的内容
分成多少行可以随便传参数

import java.io.*;
public class SegFile
/**
*根据需求,直接调用静态方法start来执行操作
*参数:
* rows 为多少行一个文件 int 类型
* sourceFilePath 为源文件路径 String 类型
* targetDirectoryPath 为文件分割后存放的目标目录 String 类型
* ---分割后的文件名为索引号(从0开始)加'_'加源文件名,例如源文件名为test.txt,则分割后文件名为0_test.txt,以此类推
*/
public static void start(int rows,String sourceFilePath,String targetDirectoryPath)
File sourceFile = new File(sourceFilePath);
File targetFile = new File(targetDirectoryPath);
if(!sourceFile.exists()||rows<=0||sourceFile.isDirectory())
System.out.println("源文件不存在或者输入了错误的行数");
return;

if(targetFile.exists())
if(!targetFile.isDirectory())
System.out.println("目标文件夹错误,不是一个文件夹");
return;

else
targetFile.mkdirs();

try
BufferedReader br = new BufferedReader(new FileReader(sourceFile));
BufferedWriter bw = null;
String str = "";
String tempData = br.readLine();
int i=1,s=0;
while(tempData!=null)
str += tempData+"\r\n";
if(i%rows==0)
bw = new BufferedWriter(new FileWriter(new File(targetFile.getAbsolutePath()+"/"+s+"_"+sourceFile.getName())));
bw.write(str);
bw.close();
str = "";
s += 1;

i++;
tempData = br.readLine();

if((i-1)%rows!=0)
bw = new BufferedWriter(new FileWriter(new File(targetFile.getAbsolutePath()+"/"+s+"_"+sourceFile.getName())));
bw.write(str);
bw.close();
br.close();
s += 1;

System.out.println("文件分割结束,共分割成了"+s+"个文件");
catch(Exception e)

//测试

public static void main(String args[])
SegFile.start(11,"d:/test/test.txt","d:/test/test/");



/*
把代码改了下,先前的代码在行数刚好分完的情况下会多分一个空白文件,现在不存在这个问题了
*/
参考技术A import java.io.*;

/**
*
* 文件分割
*/
public class FileSeparatorDemo1

/**
* 按字节分隔
* @param sourceFileUrl 源文件路径如:c:/a.txt
* @param targetFileUrl 目标文件路径文件夹
*/
public void separateFileByByte(String sourceFileUrl,String targetFileUrl)

File sourceFile = new File(sourceFileUrl);
//获得源文件名称
String sorceFileName= sourceFile.getName().split(".txt")[0];
try

//源文件文件流
FileInputStream fis = new FileInputStream(sourceFile);
int temp;
FileOutputStream fos = null; //目标文件文件流
int size = 0; //记录文件大小
int countFile = 1; //子文件数目
File targetFile = null;
do

if(size % 100 ==0)

//目标文件名称,以源文件名称加数据命名
String targetFileName = targetFileUrl + sorceFileName + countFile + ".txt";
targetFile = new File(targetFileName);
if(fos!=null)

fos.flush(); //刷新该流的缓冲
fos.close(); //关闭流

fos = new FileOutputStream(targetFile);
countFile++;

temp = fis.read(); //读文件
size++;
fos.write(temp); //写文件

while(fis.available()>0);//判断源文件是否还有流,即有没有读完
fis.close();
fos.flush();
fos.close();
System.out.println("文件分割完成!" );

catch (Exception e)
System.out.println(e.getMessage());
e.printStackTrace();



/**
* 按字符分隔
* @param sourceFileUrl
* @param targetFileUrl
*/
public void separateFileByChar(String sourceFileUrl, String targetFileUrl)

File sourceFile = new File(sourceFileUrl);
String sourceFileName = sourceFile.getName().split(".txt")[0]; // 获得源文件名称
try

FileReader fr = new FileReader(sourceFile); // 源文件文件流
System.out.println("encoding:" + fr.getEncoding());
int temp;
FileWriter fw = null; // 目标文件文件流
int size = 0; // 记录文件大小
int countFile = 1; // 子文件数目
File targetFile = null;
do


if (size % 100 == 0)

String targetFileName = targetFileUrl + sourceFileName
+ countFile + ".txt"; // 目标文件名称,以源文件名称加数据命名
targetFile = new File(targetFileName);
if (fw != null)

fw.flush(); // 刷新该流的缓冲
fw.close();// 关闭流

fw = new FileWriter(targetFile);
countFile++;


temp = fr.read();// 读文件
size++;
fw.write(temp);// 写文件


while (temp != -1);// 判断源文件是否还有流,即有没有读完

fr.close();
fw.flush();
fw.close();
System.out.println("文件分割完成!");

catch (Exception e)

e.printStackTrace();



public static void main(String args[])

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sourceFileUrl = null;
String targetFileUrl = null;
//输入源文件路径
System.out.println("源文件地址: \t");
try
sourceFileUrl = br.readLine();
catch (IOException e)
e.printStackTrace();

//输入目标文件路径
System.out.println("\n目标文件地址: \t");
try
targetFileUrl = br.readLine();
catch (IOException e)
e.printStackTrace();


System.out.println("源文件: " + sourceFileUrl + "\n目标文件: " + targetFileUrl);
FileSeparatorDemo1 fs = new FileSeparatorDemo1();
fs.separateFileByChar(sourceFileUrl, targetFileUrl);


参考技术B 代码都有了,关注下吧!

Linux下使用split按行数进行切割

说明:一般来说split按行数切割多数用在日志文件上。

实例:

将一个大文件分成若干个小文件方法:

例如将一个BLM.txt文件分成前缀为BLM_ 的1000个小文件,后缀为系数形式,且后缀为4位数字形式

1、先利用

wc -l BLM.txt 

读出BLM.txt文件一共有多少行

再利用split命令

split -l 2482 BLM.txt -d -a 4 BLM_

将文件BLM.txt分成若干个小文件,每个文件2482行(-l 2482),文件前缀为BLM_ ,系数不是字母而是数字(-d),后缀系数为四位数(-a 4)

不过很遗憾,文件不能的后缀不能以BLM_*.text这样去实现,出来的结果只能是BLM_0000。但是可以后续自行处理,比如批量重命名:

rename \'s/$//.txt/\' * 

使用的是rename批量重命名当前目录下的任意文件为.txt扩展名。

除了切割文件,那么同样也有合并文件,使用的是cat命令:

cat BLM_* >BLM.txt

使用的是cat命令。

 

参考:

http://blog.csdn.net/jkunzhang/article/details/7666398

https://www.cnblogs.com/AloneSword/p/5072698.html(rename用法)

http://man.linuxde.net/split(split用法)

http://man.linuxde.net/cat(cat用法)

以上是关于JAVA怎么实现按行数分割文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux 大文件的分割与合并

linux常用命令:split 命令

将txt文档按行分割

下载txt小说章节分割器后怎么使用啊

Linux命令 分割文件 split 合并文件 join

谁知道 文件分割合并工具的 C++源码啊?