一般只要代码格式、注释规范,长一点并不会影响可读性。倒是不好的业务逻辑会影响执行的性能。
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/")
}
}
/*
把代码改了下,先前的代码在行数刚好分完的情况下会多分一个空白文件,现在不存在这个问题了
*/
以下一个拆分txt的Util类
import java.io.Fileimport java.io.FileInputStream
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.IOException
import java.io.InputStream
import java.io.OutputStream
public class FileCutter {
/**
*
*sourceFile:源文件的路径
*targetDirectory:保存文件的目录(例:'C:\\')
*prefix:是分割后文件的前缀(例:'2015-09-09')
*size:是分隔后单一文件的大小单位是2kb的倍数,size传10,分割后单一文件就是20K。传100,文件就是2M一个。
*
**/
public static void cutToMoreFile(String sourceFile, String targetDirectory, String prefix, int size)
{
//加载源文件
File source = new File(sourceFile)
InputStream in = null
OutputStream out = null
int len = 0
int fileIndex = 1
//设置一次加载的大小
byte[] buffer = new byte[2048]
try
{
//把源文件读到InputStream中
in = new FileInputStream(source)
//循环
while(true)
{
//分割后的文件流
out = new FileOutputStream(targetDirectory + File.separator + prefix + fileIndex++ + ".txt")
for(int i = 0 i < size i++)
{
//如果文件读取完就退回方法。
if((len = in.read(buffer)) != -1)
{
//写入分割后的文件
out.write(buffer, 0, len)
}else
{
//执行finally内容后,退出方法
return
}
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace()
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}finally
{
try {
//关系流
in.close()
out.close()
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
}
}
}
以上,详细请看注释
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)