java io大文件_JavaIO流对大文件进行分割与合并
对于大文件传输不方便时候可以试一下分割之后再操作:
package com.lym;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 1、实现一个文件分割器,把一个大文件分割成若干个小文件(可根据情况自行设计),
* 分割后的文件扩展名为dat,文件名为:原文件名+原扩展名+编号+.dat
* 2、把分割后的文件再合并(文件还原)成完整文件,与源文件一致。
* @author lym
*
*/
public class Homework2 {
/**
* 文件分割
* @param src 源文件路径
* @param fileSize 分割后每个文件的大小,单位是MB
* @param dest 目标文件路径
*/
public static void split(String src,int fileSize,String dest){
if("".equals(src)||src==null||fileSize==0||"".equals(dest)||dest==null){
System.out.println("分割失败");
}
File srcFile = new File(src);//源文件
long srcSize = srcFile.length();//源文件的大小
long destSize = 1024*1024*fileSize;//目标文件的大小(分割后每个文件的大小)
int number = (int)(srcSize/destSize);
number = srcSize%destSize==0?number:number+1;//分割后文件的数目
String fileName = src.substring(src.lastIndexOf("\\"));//源文件名
InputStream in = null;//输入字节流
BufferedInputStream bis = null;//输入缓冲流
byte[] bytes = new byte[1024*1024];//每次读取文件的大小为1MB
int len = -1;//每次读取的长度值
try {
in = new FileInputStream(srcFile);
bis = new BufferedInputStream(in);
for(int i=0;i
String destName = dest+File.separator+fileName+"-"+i+".dat";
OutputStream out = new FileOutputStream(destName);
BufferedOutputStream bos = new BufferedOutputStream(out);
int count = 0;
while((len = bis.read(bytes))!=-1){
bos.write(bytes, 0, len);//把字节数据写入目标文件中
count+=len;
if(count>=destSize){
break;
}
}
bos.flush();//刷新
bos.close();
out.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//关闭流
try {
if(bis!=null)bis.close();
if(in!=null)in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 文件合并
* 注意:在拼接文件路劲时,一定不要忘记文件的跟路径,否则复制不成功
* @param destPath 目标目录
* @param srcPaths 源文件目录
*/
public static void merge(String destPath,String ... srcPaths){
if(destPath==null||"".equals(destPath)||srcPaths==null){
System.out.println("合并失败");
}
for (String string : srcPaths) {
if("".equals(string)||string==null)
System.out.println("合并失败");
}
//合并后的文件名
String name = srcPaths[0].substring(srcPaths[0].lastIndexOf("\\"));
String destName = name.substring(0, name.lastIndexOf("-"));
destPath = destPath+destName;//合并后的文件路径
File destFile = new File(destPath);//合并后的文件
OutputStream out = null;
BufferedOutputStream bos = null;
try {
out = new FileOutputStream(destFile);
bos = new BufferedOutputStream(out);
for (String src : srcPaths) {
File srcFile = new File(src);
InputStream in = new FileInputStream(srcFile);
BufferedInputStream bis = new BufferedInputStream(in);
byte[] bytes = new byte[1024*1024];
int len = -1;
while((len = bis.read(bytes))!=-1){
bos.write(bytes, 0, len);
}
bis.close();
in.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//关闭流
try {
if(bos!=null)bos.close();
if(out!=null)out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
/**
* 分割测试
*/
// String src = "E:\\API\\JDK_API_1_6_zh_CN.CHM";//要分割的大文件
// int fileSize = 10;
// String dest = "D:\\";//文件分割后保存的路径
// System.out.println("分割开始。。。");
// split(src, fileSize, dest);
// System.out.println("分割完成");
/**
* 合并测试
*/
//合并后文件的保存路径
String destPath = "D:\\upan";
//要合并的文件路径
String[] srcPaths = {
"D:\\JDK_API_1_6_zh_CN.CHM-0.dat",
"D:\\JDK_API_1_6_zh_CN.CHM-1.dat",
"D:\\JDK_API_1_6_zh_CN.CHM-2.dat",
"D:\\JDK_API_1_6_zh_CN.CHM-3.dat"};
System.out.println("开始合并。。。");
merge(destPath, srcPaths);
System.out.println("合并结束");
}
}
java io大文件_JavaIO流对大文件进行分割与合并相关推荐
- Java IO 字节流与字符流 (三)
概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...
- java.IO字节流和字符流详解
IO流的分类 在学习字节流和字符流之前因该先学习IO流的分类,效果会更好 有多种分类方式: 一种方式是按照流的方向进行分类: 以内存作为参照物, 往内存中去,叫做输入(Input).或者叫做读(Rea ...
- java IO(输入输出) 字节缓冲流
//文件复制 package zhi_jie_liu;import java.io.*;public class Example04 {public static void main(String[] ...
- Java IO 字节流、字符流详解
1. 字节流与字符流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接.类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流 ...
- JAVA IO - 删除特定扩展名的文件
2019独角兽企业重金招聘Python工程师标准>>> 想要删除带有特定扩展名的文件需要实现FileNameFilter接口,请看代码. import java.io.File; i ...
- Java IO类库之管道流PipeInputStream与PipeOutputStream
2019独角兽企业重金招聘Python工程师标准>>> 一.java管道流介绍 在java多线程通信中管道通信是一种重要的通信方式,在java中我们通过配套使用管道输出流PipedO ...
- JAVA常用工具类-【5】FFMPEG转换、分割、合并音频
1.JAVA操作音频 package com.day.util;import java.io.*; import java.util.*;public class AudioConvert {publ ...
- (JAVA)从零开始之--打印流PrintStream记录日志文件
这里的记录日志是利用打印流来实现的. 文本信息中的内容为String类型.而像文件中写入数据,我们经常用到的还有文件输出流对象FileOutputStream. 1 File file = new F ...
- Java - io输入输出流 --转换流
转换流 转换输出流 OutputStreamWriter: 说明: /* * OutputStreamWriter 这个类的作用 * 就是指定输出流的编码格式 * 这个类的构造方法 需要传递 一个输 ...
最新文章
- 科技股疯狂造富的背后,“泡沫”离我们到底有多远?
- css京东购物车静态页面实现
- 【计算机网络(微课版)】第1章 概述 课后习题及答案
- 浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别
- [u]intN_t - uint8_t, uint16_t, uint32_t, uint64_t
- 45.分支算法练习: 7622:求排列的逆序数
- mybatis多参数传递(其中包括数组)
- Python下安装LDA模块,学习使用
- Ubuntu18.04安装cmake(附免费下载cmake)。
- 全能模拟器retroarch+android,全能模拟器(RetroArch Android)
- nginx反向代理进行统一鉴权
- 个人做代理记账如何接活
- Hash算法进行签名验签
- 计算机网络 信道复用技术
- Python应用练习题(第一期)——基本语句练习
- 51单片机节日彩灯控制c语言,采用AT89C51单片机设计的可编程彩灯控制
- 天才小毒妃 第914章 无论如何要带她走
- 趣图:程序员的鄙视链/图
- C++ filesystem 文件系统初体验
- 《一百岁感言》 杨绛
热门文章
- 双RocketMq集群的搭建
- 用注册表禁止windows添加新用户
- SQL Server--通过存储过程生成表数据的脚本
- http://www.shengshiyouxi.com
- pidgin-qq可以使用QQ2012协议了
- 【计算机网络复习 物理层】2.1.2 数据通信基础知识
- Leetcode--448. 找到所有数组中消失的数字
- Leetcode--122. 买卖股票的最佳时机Ⅱ
- Leetcode--455. 分发饼干
- Java中bytebuffer和string的转换记录