1.实现输出读取文件内容的示列(不推荐使用低效):
@Test
public void testStream(){
InputStream fis=null; //声明输入流对象
OutputStream fos=null; //声明输出流对象
try {
fis=new FileInputStream("d:\\ff_copy.txt");
fos=new FileOutputStream("d:\\ff_copy1.txt");
long num=0; //读取字节计数
int bt=0; //每次读入字节内容
//当读入文件末尾时,读入数据的值为-1,每次读入一个字节,存放变量bt中,直到读完整个文件
while((bt=fis.read())!=-1){
//以字母的形式逐个输出文件的每个字节
System.out.println((char) bt);
fos.write(bt); //将字节写入输出流中,实现copy功能
num++;
}
System.out.println("读取的字节数为"+num+"\n 文件复制成功");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
fis.close();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.使用缓冲流来实现(一般):
/*
* 字节流测试:copy文件
*/
@Test
public void tsetBufferStream() {
InputStream fis=null;
OutputStream fos=null;
try {
fis=new BufferedInputStream(new FileInputStream("d:\\ff_copy.txt"));
fos=new BufferedOutputStream(new FileOutputStream("d:\\ff_copy2.txt"));
byte[] bur=new byte[2048];
int i;
while((i=fis.read())!=-1){
fos.write(bur,0,i);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
fis.close();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3.使用同道的方式:高效(推荐使用这种方式)
@Test
public void testFileChanne(){
FileInputStream fi = null;
FileOutputStream fo = null;
FileChannel in = null;
FileChannel out = null;
try {
fi = new FileInputStream("d:\\ff_copy.txt");
fo = new FileOutputStream("d:\\ff_copy3.txt");
in = fi.getChannel();//得到对应的文件通道
out = fo.getChannel();//得到对应的文件通道
in.transferTo(0, in.size(), out);//连接两个通道,并且从in通道读取,然后写入out通道
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fi.close();
in.close();
fo.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
本文详细介绍了三种高效文件复制方法,包括基本流、缓冲流和文件通道,旨在优化文件复制过程,提升数据传输效率。
262

被折叠的 条评论
为什么被折叠?



