IO拷贝文件
1、高效缓冲区拷贝文件:
(下面高效缓冲字符流拷贝文件有点问题,拷贝文件数据多,字符流没问题)
缓冲流(包装流):是一个包装流,目的起缓存作用。
BufferedInputStream :A BufferedInputStream为另一个输入流添加了功能,即缓冲输入和支持 mark和 reset方法的功能。
BufferedOutputStream:该类实现缓冲输出流。
BufferedReader :从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。
BufferedWriter :将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高
建议拷贝文件使用字节流,拷贝纯文本文件使用字符流
字节流可以操作一切文件(纯文本/二进制文件)
字符流是用来操作中文纯文本使用的,本身是对字节流得增强。
import java.io.*; /** * 拷贝文件 */ public class FileDemo05 { public static void main(String[] args) { //创建源 File srcFile=new File("D:"+File.separator+"360Download"+File.separator+"Navicat+Premium+12.zip"); //创建目标对象目录 File dir=new File("D:"+File.separator+"FilesTest"+File.separator); // test1(srcFile,dir); test2(srcFile,dir); } /* 字节缓冲流拷贝文件 */ public static void test1(File srcFile, File dir) { try{ //输入流工具 InputStream inputStream=new BufferedInputStream(new FileInputStream(srcFile)); //输出流工具 OutputStream outputStream=new BufferedOutputStream(new FileOutputStream(new File(dir,srcFile.getName()))); //缓冲区 byte[] bytes=new byte[1024]; int len=-1; while ((len=inputStream.read(bytes)) != -1){ outputStream.write(bytes); } outputStream.flush(); inputStream.close(); outputStream.close(); }catch(IOException e){ e.printStackTrace(); } } /* 字符缓冲流拷贝文件 */ public static void test2(File srcFile,File dir){ try{ Reader reader=new BufferedReader(new FileReader(srcFile)); Writer writer=new BufferedWriter(new FileWriter(new File(dir,srcFile.getName()))); char[] chars=new char[1024]; int len=-1; while ((len=reader.read(chars)) != -1){ writer.write(chars,0,len); } writer.flush(); reader.close(); writer.close(); }catch(IOException o){ o.printStackTrace(); } } }
2、字节流文件:
下面是拷贝压缩包。
import java.io.*; /** * 文件的拷贝操作 */ public class FileDome02 { public static void main(String[] args) { //创建拷贝对象 File file=new File("D:"+File.separator+"360Download"+File.separator+"Navicat+Premium+12.zip"); //创建目标对象目录 File dir=new File("D:"+File.separator+"FilesTest"+File.separator); //创建输入流对象(管道) InputStream inputStream=null; //创建输出流对象(管道) OutputStream outputStream=null; try{ inputStream=new FileInputStream(file); outputStream=new FileOutputStream(new File(dir,file.getName())); //创建一个字节数组用于缓存 read(byte[] b) 从该输入流读取最多 b.length个字节的数据为字节数组。 byte[] bytes=new byte[1024]; int len=-1; //管道操作 while ((len=inputStream.read(bytes)) !=-1){ // 从该输入流读取最多 b.length个字节的数据为字节数组。 outputStream.write(bytes,0,len); } outputStream.flush(); System.out.println("拷贝完成!!"); }catch(IOException e){ e.printStackTrace(); }finally{ try{ //关闭资源(管道) inputStream.close(); outputStream.close(); }catch (IOException e){ e.printStackTrace(); } } } }
3、字符流拷贝文件与字节很相似
import java.io.*; /* 字符流文件拷贝 */ public class FileDemo04 { public static void main(String[] args) { //创建源 File srcFile=new File("D:"+File.separator+"360Download"+File.separator+"Navicat+Premium+12.zip"); //创建目标对象目录 File dir=new File("D:"+File.separator+"FilesTest"+File.separator); //读 管道 Reader reader=null; //写 管道 Writer writer=null; try{ reader=new FileReader(srcFile); writer=new FileWriter(new File(dir,srcFile.getName()));//从父抽象路径名和子路径名字符串创建新的 File实例。 //创建缓冲char[]数组 char[] chars=new char[1024]; int len=-1; while ((len=reader.read(chars))!= -1){ writer.write(chars,0,len); } //刷新 writer.flush(); System.out.println("拷贝完成!"); }catch (IOException o){ o.printStackTrace(); }finally{ //关闭资源 try{ reader.close(); writer.close(); }catch (IOException e){ e.printStackTrace(); } } } }
import java.io.*;
/**
* 拷贝文件
*/
public class FileDemo05 {
public static void main(String[] args) {
//创建源
File srcFile=new File("D:"+File.separator+"360Download"+File.separator+"Navicat+Premium+12.zip");
//创建目标对象目录
File dir=new File("D:"+File.separator+"FilesTest"+File.separator);
// test1(srcFile,dir);
test2(srcFile,dir);
}
/*
字节缓冲流拷贝文件
*/
public static void test1(File srcFile, File dir) {
try{
//输入流工具
InputStream inputStream=new BufferedInputStream(new FileInputStream(srcFile));
//输出流工具
OutputStream outputStream=new BufferedOutputStream(new FileOutputStream(new File(dir,srcFile.getName())));
//缓冲区
byte[] bytes=new byte[1024];
int len=-1;
while ((len=inputStream.read(bytes)) != -1){
outputStream.write(bytes);
}
outputStream.flush();
inputStream.close();
outputStream.close();
}catch(IOException e){
e.printStackTrace();
}
}
/*
字符缓冲流拷贝文件
*/
public static void test2(File srcFile,File dir){
try{
Reader reader=new BufferedReader(new FileReader(srcFile));
Writer writer=new BufferedWriter(new FileWriter(new File(dir,srcFile.getName())));
char[] chars=new char[1024];
int len=-1;
while ((len=reader.read(chars)) != -1){
writer.write(chars,0,len);
}
writer.flush();
reader.close();
writer.close();
}catch(IOException o){
o.printStackTrace();
}
}
}