关键字InputStream、OutputStream、ByteArrayOutputStream。(还未学习BufferedReader类)
目的:实现两个文件内容的合并(按传入先后顺序),并生成一个新的文件保存。
合并限制:txt类型的文字文件。
实现如下:
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
public class TestDemo {
public static void main(String[] args) throws Exception{
//File[0]和File[1]为源文件必须是已存在的,File[2]是合并后产生的新文件,系统会自动生成,不用手动创建。
File[] file = new File[]{
new File("d:"+File.separator+"data-1.txt"),
new File("d:"+File.separator+"data-2.txt"),
new File("d:"+File.separator+"data-3.txt"),
};
combineTwo(file[0],file[1],file[2]);
}
public static byte[] readFile(File file) throws IOException {
if(!file.exists()) {
return null;
}
byte[] arr = new byte[1024];
//使用内存流,以便将数据全部读取保存在内存中,然后一次性取出。可一定程度避免中文乱码(?)
//使用的是ByteArrayOutputStream类的实例化对象,因为要用此类的toByteArray方法,返回一个byte[]
ByteArrayOutputStream arrOut = new ByteArrayOutputStream();
//从文件中读取数据
InputStream in = new FileInputStream(file);
int temp = 0;
while ((temp = in.read(arr)) != -1) {
arrOut.write(arr,0,temp);
}
byte[] result = arrOut.toByteArray();
in.close();
arrOut.close();
//arrOut.toByteArray()将内存中的完整数据变为Byte[]
return result;
}
public static void combineTwo(File srcA,File srcB,File des) {
byte[] A = null;
byte[] B = null;
try {
A = readFile(srcA);
B = readFile(srcB);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
byte[] newArr = Arrays.copyOf(A, A.length+B.length);
System.arraycopy(B, 0, newArr, A.length, B.length);
OutputStream output = null;
try {
output = new FileOutputStream(des);
output.write(newArr);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}