合并文件
public class Demo18 {
/*
* 序列流:把多个输入流的内容一次性的打印(操作)—字节流
*/
public static void main(String[] args) throws IOException {
//创建三个输入流
FileInputStream fileInputStream1 = new FileInputStream(“src\com\qf\test\Demo2.java”);
FileInputStream fileInputStream2 = new FileInputStream(“src\com\qf\test\Demo2.java”);
FileInputStream fileInputStream3 = new FileInputStream(“src\com\qf\test\Demo1.java”);
//将三个输入流放入序列流
//方式一:先放入一个Vector
// Vector vector = new Vector<>();
// vector.add(fileInputStream1);
// vector.add(fileInputStream2);
// vector.add(fileInputStream3);
//
// //得到枚举器
// Enumeration e1 = vector.elements();
//方式二:先放入一个list
ArrayList<FileInputStream> list = new ArrayList<>();
list.add(fileInputStream1);
list.add(fileInputStream2);
list.add(fileInputStream3);
//将集合转换成枚举
Enumeration<FileInputStream> e2 = Collections.enumeration(list);
//创建序列流对象并关联相关的文件--参数是一个枚举器
//SequenceInputStream sequenceInputStream = new SequenceInputStream(e1);
SequenceInputStream sequenceInputStream = new SequenceInputStream(e2);
//创建输出流
FileOutputStream fileOutputStream = new FileOutputStream("temp2.txt");
//读写
byte[] arr = new byte[1024];
int num;
while ((num = sequenceInputStream.read(arr)) != -1) {
fileOutputStream.write(arr, 0, num);
fileOutputStream.flush();
}
sequenceInputStream.close();
fileOutputStream.close();
}
}
进一步优化
切割文件 Properties
class Demo5
{
public static void main(String[] args)throws IOException
{
//切割文件
File file=new File(“e:\gp0722\day18\ok.jpg”);
qieGe(file);
}
//切割文件
public static void qieGe(File file)throws IOException
{
//判断是不是文件
if(!file.isFile())
return;
//创建一个目录,目录用来存放切割出来的文件
File dir = new File("qiege");
if(!dir.exists())
dir.mkdir();
//怎么切:每读够2M的数据写入到一个新的文件
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = null;//因为写入到不同的文件,所以不能new
byte[] arr=new byte[1024*1024*2];//读够2M就切割
int len=0;
int num=1;
while((len=fis.read(arr))!=-1){
fos=new FileOutputStream(new File(dir,(num++)+".suipian")); // File(File f,String s)
fos.write(arr,0,len);
}
//附加一些说明信息:文件的类型,文件的个数
Properties pro=new Properties();//Map
pro.setProperty("fileType",file.getName());
pro.setProperty("fileNumber",Integer.toString(--num));
//把Properties中的键值对写入到文件
fos=new FileOutputStream(new File(dir,"readme.txt"));
//store 后面的写上 会进行编码 不写 就输出一行空格
pro.store(fos,"切割文件的说明信息");
fis.close();
fos.close();
}
}