切割文件:论坛等可以上传附件文件,但是对文件的大小有限制,这时可以将整个文件切割成多个子文件(碎片文件)。别人可以下载这些子文件,然后将其合并在一起,就可以正常查阅。
切割文件的方式:
1、 不管文件大小,固定子(碎片)文件的个数。比如:总文件11M,只能切割3份。
2、 不管文件大小,固定每份碎片文件的大小。比如:总文件11M,每个碎片文件2M。
/*
* 切割和合并文件
*/
public class CutFileTest {
public static void main(String[] args) throws IOException {
//cutFile();
megerFile();
}
//合并文件
public static void megerFile() throws IOException {
//创建输出流对象
FileOutputStreamfos = new FileOutputStream("./files/2.jpg");
//使用循环提供碎片文件的名称
for( int i = 1 ; i <=9 ; i++ ){
//定义输入流,和每个碎片文件关联,读取碎片文件中的数据
FileInputStreamfis = new FileInputStream("./parts/"+i+".jpg");
//读写数据
byte[] buf = new byte[1024];
int len = 0;
while( ( len = fis.read(buf) ) != -1 ){
fos.write(buf , 0 , len);
}
//关闭输入流
fis.close();
}
//关闭输出流
fos.close();
}
//演示切割文件
public static void cutFile() throws IOException {
//定义输入流读取文件中的数据
FileInputStreamfis = new FileInputStream("./files/1.jpg");
//定义变量充当碎片文件的名称
int count = 1;
//定义数组,固定数组的大小为100kb
byte[] buf = new byte[102400/2];
int len = 0;
while( ( len = fis.read(buf) ) != -1 ){
//定义输出流,将读取到的100kb数据写到文件中
FileOutputStreamfos = new FileOutputStream("./parts/"+count+".jpg");
//写数据
fos.write(buf, 0, len);
//关流
fos.close();
//充当碎片文件的名称变量变化
count++;
}
//关闭输入流
fis.close();
}
}