文件的分割

赵Andy 2011-02-11 08:41:22
假如有一个101MB的文件把它按照10MB一个文件分成11个文件,怎么分?
...全文
62 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵Andy 2011-02-19
  • 打赏
  • 举报
回复
对不起没能上网这些天
想喝咖啡的貓 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wode_dream 的回复:]

logger这个在哪里定义的?不明白
[/Quote]
Log4Jxxx.jar 要不你删了换成System.out.println也行。
赵Andy 2011-02-11
  • 打赏
  • 举报
回复
logger这个在哪里定义的?不明白
pengranxiang 2011-02-11
  • 打赏
  • 举报
回复

/**
* 文件分割,将大文件分割为多个小文件
* @file 要分割的文件
* @partSize 分割的尺寸,分割后每个小文件的大小,单位:字节
* @return void 分割后的文件存放在和原文件同一个文件夹中,文件名:原文件名.part + 数字
* @throws IOException
*/
public static void split(File file, int partSize) {
FileInputStream fis;
try {
fis = new FileInputStream(file);
byte[] buff = new byte[1024*20];
int buffCount = partSize / (1024*20);
int count = 0;
int i = 1;
File newfile = null;
logger.info("开始分割文件:" + file.getName());
logger.info("分割后的单个文件大小为:" + partSize/1024.0 + "KB");
while(fis.read(buff, 0, buff.length) != -1) {
if(count == 0) {
newfile = new File(file.getParent() + "/" + file.getName() + ".part" + i);
}
if(count < buffCount) {
writeToFileTail(buff, newfile);
count++;
} else {
logger.info("生成文件:" + newfile.getName());
i++;
count = 0;
}
}
fis.close();
logger.info("分割完成,生成分割文件数:" + (i-1));
} catch (FileNotFoundException e) {
logger.error(file.getAbsolutePath() + "文件不存在");
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}

}

/**
* 合并文件,将多个小文合并为一个大文件
* @param files 要合并的文件,合并顺序为数组的下标顺序,注意要合并的文件的顺序
* @param outFileName 合并后的文件,需要给文件全路径
*/
public static void union(File[] files, String outFileName) {
File outFile = new File(outFileName);
for(int i=0; i<files.length; i++) {
logger.info("合并文件:" + files[i].getAbsolutePath());
appendFile(files[i], outFile);
}
logger.info("合并完成");
}

/**
* 将byte[]数组内容追加到文件的末尾
* @param content
* @param file
* @return
*/
public static boolean writeToFileTail(byte[] content, File file) {
boolean result = true;
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile(file, "rw");
raf.seek(raf.length()); //指向文件末尾
logger.debug("当前文件指针:" + raf.getFilePointer());
raf.write(content, 0, content.length);
} catch(FileNotFoundException e) {
logger.error(file.getParentFile().getAbsoluteFile() + "目录不存在 ");
return false;
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
close(raf);
}
return result;
}

/**
* 将fromFile文件中的内容追加到toFile文件的末尾
* @param fromFile
* @param toFile
* @return
*/
public static boolean appendFile(File fromFile, File toFile) {
try {
InputStream in = new FileInputStream(fromFile);
return writeToFileTail(in, toFile);
} catch (FileNotFoundException e) {
logger.error(fromFile.getAbsoluteFile() + "文件不存在");
return false;
}
}
前导课程:      《Java工程师系列课程》前4部 课程内容:           本课程是《Java工程师系列课程》的第8部分,深入讲解Java文件和IO流的相关知识。以下是本课程的内容展示:课程共69个小节,分为三个大部分:分别是文件部分、流部分和实战项目部分。文件部分,就是左上角用红框框起来的这一部分,主要讲解对文件以及文件夹的操作,第二部分就是课程最重要的部分,也是占课程比例最大的流部分,所谓流就是用来读写数据的类。本课程用45小节的时间为学员详细讲解各种流的使用方法以及注意事项。第三部分是实战项目部分,就是右下角用蓝色方框框起来的部分,在这一部分中,将为大家讲解如何用swing技术配合课程中学习的IO流去完成一个记事本项目。实际上,除了课程最后的这记事本项目,课程中还穿插了一些规模比较小的实战项目,比如分割文件、合并文件、给文件加密这样的小项目,以及压缩和解压文件项目。课程特点:1、讲解详细:不仅仅详细讲解了文件和流的各种用法,还讲解了很多使用过程中需要注意的细节。2、干货足量:每一个小节的时长基本都超过了20分钟,能让学员学到很多知识。3、深入解决实际问题:视频课程不仅讲解理论知识,还深入解决了很多实际问题,例如:讲解如何通过程序判断一个文件的编码格式、如何设置文件读写权限等4、讲解经典算法:例如讲解缓冲区的管理机制,能让学员学到前辈们的精华思想5、理论结合实践:课程在文件压缩和解压、文件分割以及合并、文件加密,这些小节都配有对应的实战项目,最后还有一个规模比较大的记事本项目6、手写代码:全程手写代码完成项目预期效果:      认真学习完本课程,学员可以深入掌握Java语言操作和管理磁盘文件的技术以及通过流读写数据的技术,实实在在提高实战水平,完成从菜鸟到高手的华丽转变。

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧