Java基础----文件的切割合并

package day22;
/*
字节流


输入字节流:
-----------| InputStream  所有输入字节流的基类  抽象类
-----------------| FileInputStream 读取文件数据的输入字节流
-----------------| BufferedInputStream  缓冲输入字符流       该类出现的目的是为了提高读取文件 数据的效率。 这个类其实只不过是在内部维护了一个8kb的字节数组而已。




输出字节流:
-----------| OutputStream 所有输出字节流的基类。  抽象类。
----------------| FileOutputStream 向文件输出数据的输出字节流  
----------------| BufferedOutputStream 缓冲输出字节流   该类出现的目的也是为了提高向文件写数据的效率。 这个类的也只不过是在内部维护了一个8kb的字节数组而已。


字符流 :  字符流 = 字节流  + 编码(解码)


输入字符流:
---------| Reader   所有输入字符流的基类。  抽象类。
----------------| FileReader 读取文件数据的输入字符流。 
----------------| BufferedReader 缓冲输入字符流           该类出现的目的是为了提高读取文件数据的效率与拓展FileReader的(readLine)功能。  这个类的也只不过是在内部维护了一个8kb的字符数组而已。




输出字符流:
---------| Writer 所有输出字符流的基类。  抽象类
----------------| FileWriter 向文件输出数据的输出字符流  
----------------| BufferedWriter 缓冲输出字符流        该类出现的目的是为了提高写文件数据的效率与拓展FileWriter的(newLine)功能.








 */
public class Demo1 {


public static void main(String[] args) {
// TODO Auto-generated method stub


}


}




package cn.itcast.other;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Vector;


/*
 需求:把a.txt与b.txt文件的内容合并。
 
 */
public class Demo1 {


public static void main(String[] args) throws IOException {
//merge1();
//merge2();
merge3();


}

//把三个文件合并成一个文件
public static void merge3() throws IOException{
//找到目标文件
File file1 = new File("F:\\a.txt");
File file2 = new File("F:\\b.txt");
File file3 = new File("F:\\c.txt");
File file4 = new File("F:\\d.txt");


//建立对应 的输入输出流对象
FileOutputStream fileOutputStream = new FileOutputStream(file4);
FileInputStream fileInputStream1 = new FileInputStream(file1);
FileInputStream fileInputStream2 = new FileInputStream(file2);
FileInputStream fileInputStream3 = new FileInputStream(file3);


//创建序列流对象
Vector<FileInputStream> vector = new Vector<FileInputStream>();
vector.add(fileInputStream1);
vector.add(fileInputStream2);
vector.add(fileInputStream3);
Enumeration<FileInputStream> e = vector.elements();


SequenceInputStream sequenceInputStream = new SequenceInputStream(e);

//读取文件数据
byte[] buf = new byte[1024];
int length = 0; 

while((length = sequenceInputStream.read(buf))!=-1){
fileOutputStream.write(buf,0,length);
}

//关闭资源
sequenceInputStream.close();
fileOutputStream.close();

}
// 使用SequenceInputStream合并文件。
public static void merge2() throws IOException{
//找到目标文件
File inFile1 = new File("F:\\a.txt");
File inFile2 = new File("F:\\b.txt");
File outFile = new File("F:\\c.txt");
//建立数据的输入输出通道
FileOutputStream fileOutputStream = new FileOutputStream(outFile);

FileInputStream fileInputStream1 = new FileInputStream(inFile1);
FileInputStream fileInputStream2 = new FileInputStream(inFile2);
//建立序列流对象
SequenceInputStream inputStream = new SequenceInputStream(fileInputStream1,fileInputStream2);
byte[] buf = new byte[1024];
int length = 0 ; 

while((length = inputStream.read(buf))!=-1){
fileOutputStream.write(buf,0,length);
}
//关闭资源
inputStream.close();
fileOutputStream.close();


}
//需求:把a.txt与b.txt文件的内容合并。

public static void merge1() throws IOException{
//找到目标文件
File inFile1 = new File("F:\\a.txt");
File inFile2 = new File("F:\\b.txt");

File outFile = new File("F:\\c.txt");
//建立数据的输入输出通道
FileInputStream fileInputStream1 = new FileInputStream(inFile1);
FileInputStream fileInputStream2 = new FileInputStream(inFile2);

FileOutputStream fileOutputStream = new FileOutputStream(outFile);

//把输入流存储到集合中,然后再从集合中读取
ArrayList<FileInputStream> list = new ArrayList<FileInputStream>();
list.add(fileInputStream1);
list.add(fileInputStream2);

//准备一个缓冲数组
byte[] buf = new byte[1024];
int length = 0;

for(int i =0;i<list.size();i++){
FileInputStream fileInputStream  = list.get(i);

while((length = fileInputStream.read(buf))!=-1){
fileOutputStream.write(buf, 0, length);
}

//关闭资源
fileInputStream.close();
}
fileOutputStream.close();

}


}




package cn.itcast.other;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;


/*
 
 需求: 把一首mp3先切割成n份,然后再把这些文件合并起来。
 
 */




public class Demo2 {


public static void main(String[] args) throws IOException {
// cutFile();
mergeFlile();
}

//合并
public static void mergeFlile() throws IOException{
//找到目标文件
File dir = new File("F:\\music");
//通过目标文件夹找到所有的MP3文件,然后把所有的MP3文件添加到vector中。
Vector<FileInputStream> vector = new Vector<FileInputStream>();
File[] files = dir.listFiles();
for(File file : files){
if(file.getName().endsWith(".mp3")){
vector.add(new FileInputStream(file));
}
}
//通过Vector获取迭代器
Enumeration<FileInputStream> e = vector.elements();
//创建序列流
SequenceInputStream inputStream = new SequenceInputStream(e);
//建立文件的输出通道
FileOutputStream fileOutputStream = new FileOutputStream("F:\\合并.mp3");
//建立缓冲数组读取文件
byte[] buf = new byte[1024];
int length = 0 ; 
while((length =  inputStream.read(buf))!=-1){
fileOutputStream.write(buf,0,length);
}
//关闭资源
fileOutputStream.close();
inputStream.close();

}



//切割MP3
public static void cutFile() throws IOException{
File file = new File("F:\\美女\\1.mp3");
//目标文件夹
File dir = new File("F:\\music");
//建立数据的输入通道
FileInputStream fileInputStream = new FileInputStream(file);
//建立缓冲数组读取
byte[] buf = new byte[1024*1024];
int length = 0;
for(int i = 0 ;  (length = fileInputStream.read(buf))!=-1 ; i++){
FileOutputStream fileOutputStream = new FileOutputStream(new File(dir,"part"+i+".mp3"));
fileOutputStream.write(buf,0,length);
fileOutputStream.close();
}
//关闭资源
fileInputStream.close();
}


}






猜你喜欢

转载自blog.csdn.net/sophiaviayang/article/details/77285062
今日推荐