实例讲述Java IO文件复制
前言:IO流主要分为两大类,分别是字节流与字符流
注意:
1、音频文件、图片、视频(范围广),就用字节流
2、只涉及到文本的,就用字符流
使用字节流复制文本内容(其他文件也可以)
代码如下:
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
publicclassCopyFile{
publicstaticvoidmain(String[]args){
try{
FileinFile=newFile("src.txt");//源文件
InputStreamin=newFileInputStream(inFile);//文件输入流
FileoutFile=newFile("tar.txt");//目标文件
OutputStreamout=newFileOutputStream(outFile);//文件输出流
byte[]buff=newbyte[1024];//创建缓冲区,分配1024个字节大小的内存给buff
intnum=0;
while((num=in.read(buff))!=-1){//判断每次读取的最大字节数是否为1024
out.write(buff,0,num);
//out.write(buff);//这样也可以,不过容易造成文件内容不正确
out.flush();//刷新缓冲区
Strings=newString(buff);
System.out.println("文件内容复制成功");
System.out.println("文件复制内容为\n"+s);
}
in.close();//关闭输入流
out.close();//关闭输出流
//inFile.delete();//删除源文件
//outFile.renameTo(newFile("reName.txt"));//输出文件重命名
}
catch(FileNotFoundExceptione){
e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因
}
catch(IOExceptione){
e.printStackTrace();
}
}
}
使用字符流复制文本内容(仅限文本文件)
代码如下:
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
publicclassCopyFile{
publicstaticvoidmain(String[]args){
try{
FileinFile=newFile("D:/src.txt");//源文件
FileReaderfileReader=newFileReader(inFile);//读取文件字符流
BufferedReaderbufferedReader=newBufferedReader(fileReader);//把读取到的字符流放入缓存
FileoutFile=newFile("D:/tar.txt");//目标文件
FileWriterfileWrite=newFileWriter(outFile);//写入字符流
BufferedWriterbufferedWriter=newBufferedWriter(fileWrite);//把要输入的字符流放入缓存
Strings="";
Stringstr="";
while((s=bufferedReader.readLine())!=null){//判断文件字符流是否读取完毕
bufferedWriter.write(s);//字符流缓存写入文件
bufferedWriter.newLine();//按行读取,遇到换行符则换行
bufferedWriter.flush();//刷新缓存
str+=s;
}
System.out.println("文件复制内容为\n"+str);
//关闭输入输出流
fileReader.close();bufferedReader.close();
fileWrite.close();bufferedWriter.close();
//inFile.delete();//删除源文件
//outFile.renameTo(newFile("reName.txt"));//输出文件重命名
}
catch(FileNotFoundExceptione){
e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因
}
catch(IOExceptione){
e.printStackTrace();
}
}
}
说明:
如果想以追加文件内容,而不是覆盖的方式来复制文本内容,则修改如下
OutputStreamout=newFileOutputStream(outFile,true);//字节流
FileWriterfileWrite=newFileWriter(outFile,true);//字符流
如果要在字符流指定缓存区大小,则修改如下
BufferedWriterbufferedWriter=newBufferedWriter(fileWrite,1024);