本文主要写java用IO流实现文件拆分,根据拆分细度起到文件加密拆分作用
1.文件拆分,
主要实现方式:将文件根据字节拆分并依照顺序写入多个文件
public static void t1()throws Exception{
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(new File("E://要拆分的文件.mp4")));
BufferedOutputStream bos1=new BufferedOutputStream(new FileOutputStream(new File("E://1")));
BufferedOutputStream bos2=new BufferedOutputStream(new FileOutputStream(new File("E://2")));
BufferedOutputStream bos3=new BufferedOutputStream(new FileOutputStream(new File("E://3")));
byte[] b=new byte[1];
int n=0;
n=bis.read(b);
for(int i=0;n>0;i++){
switch (i%3){
case 0:bos1.write(b);break;
case 1:bos2.write(b);break;
case 2:bos3.write(b);break;
}
n=bis.read(b);
}
bos1.flush();
bos2.flush();
bos3.flush();
bos1.close();
bos2.close();
bos3.close();
bis.close();
}
2.拆分的文件合并
需要按照拆分的顺序合并文件
public static void t2()throws Exception{
BufferedInputStream bis1=new BufferedInputStream(new FileInputStream(new File("E://1")));
BufferedInputStream bis2=new BufferedInputStream(new FileInputStream(new File("E://2")));
BufferedInputStream bis3=new BufferedInputStream(new FileInputStream(new File("E://3")));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File("E://最终文件.mp4")));
byte[] b=new byte[1];
int n=0;
for(int i=0;;i++){
n=bis1.read(b);
if(n>0){
bos.write(b);
}else {
break;
}
n=bis2.read(b);
if(n>0){
bos.write(b);
}else {
break;
}
n=bis3.read(b);
if(n>0){
bos.write(b);
}else {
break;
}
}
bis1.close();
bis2.close();
bis3.close();
bos.flush();
bos.close();
}
3.动态的以传参的形式实现文件拆分和合并
(1)拆分代码
public static void tk1(String inputFileName, String[] outputFileNames)throws Exception{
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(new File(inputFileName)));
List<BufferedOutputStream> list=new ArrayList<>();
for(int i=0;i<outputFileNames.length;i++){
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File(outputFileNames[i])));
list.add(bos);
}
byte[] b=new byte[1];
int n=0;
n=bis.read(b);
for(int i=0;n>0;i++){
list.get(i%list.size()).write(b);
n=bis.read(b);
}
list.forEach(o->{
try {
o.flush();
o.close();
}catch (Exception e){
}
});
bis.close();
}
(2)合并代码
public static void tk2(String outputFileName, String[] inputFileNames)throws Exception{
List<BufferedInputStream> list=new ArrayList<>();
for(int i=0;i<inputFileNames.length;i++){
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(new File(inputFileNames[i])));
list.add(bis);
}
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File(outputFileName)));
byte[] b=new byte[1];
int n=0;
out:for(int i=0;;i++){
for(int j=0;j<list.size();j++){
n=list.get(j).read(b);
if(n>0){
bos.write(b);
}else {
break out;
}
}
}
list.forEach(o->{
try {
o.close();
}catch (Exception e){
}
});
bos.flush();
bos.close();
}
调用的代码
//拆分
String[] strs=new String[]{"E://1","E://2","E://3"};
tk1("E://要拆分的文件.mp4",strs);
//合并
String[] strs=new String[]{"E://1","E://2","E://3"};
tk2("E://最终文件.mp4",strs);
代码可以根据需要调整byte数组的大小改变拆分效率。
数组越大,运行速度就越快。
数组越小,越能起到加密作用。