大家在Java开发中都会遇到文件复制的文件,众所周知,需要通过文件输入输出流实现。
那究竟该怎么做那,话不多说,直接上代码:
一,使用字节流复制文件
public class FileByteCopy {
public static void main(String[] args) {
FileByteCopy f= new FileByteCopy();
try {
f.copy("d:/File/1.txt","d:/CopyFile/1.txt");
} catch (Exception e) {
e.printStackTrace();
}
}
public void copy(String f1,String f2) throws Exception{
FileInputStream fis = new FileInputStream(f1); //首先构建输入流的对象,指定需要读取的文件路径
FileOutputStream fos = new FileOutputStream(f2,false); //构建文件输出流的对象,即将文件复制在哪里去,后面的true代表每次写入时不清空当前文件内容
//方法一,单字节复制
// int value = fis.read(); / //一个字节一个字节的读取文件的内容
// while(value!=-1){
// fos.write(value);
// fos.flush();
// value = fis.read();
// }
//方法二 以字节数组为单位传递 (一次传递一个大小自定义的数组)
byte [] bytes = new byte[1024];
int len=fis.read(bytes); //把读取的字节存入到字节数组中 此时的len为文件中的大小,注意不一定是1024。下图中的95字节即为对应的源文件的len值
while(len!=-1){
// fos.write(bytes); //使用这种方法,如果源文件大小不是1024,,复制后的文件也会是1024。因为一次读取的最小的都是1024,详细见下图。
复制前
复制后
fos.write(bytes, 0, len); //从偏移量0开始到len(95)写入字符,可以保证源文件和复制后的文件大小一致。
fos.flush();
len=fis.read(bytes);
}
//读取完毕后关闭流
fis.close();
fos.close();
}
}
二,使用字符流复制文件(与字节流同理)
public class FileCharCopy {
public static void main(String[] args) {
FileCharCopy f = new FileCharCopy();
try {
f.copy("d:/File/1.txt","d:/CopyFile/1.txt");
} catch (Exception e) {
e.printStackTrace();
}
}
public void copy(String f1,String f2) throws Exception{
FileReader fr = new FileReader(f1);
FileWriter fw =new FileWriter(f2,false);
//int value=fr.read();
//while(value!=-1){
//fw.write(value);
//fw.flush();
//value=fr.read();
//}
char [] chars = new char[1024];
int len =fr.read(chars);
while(len!=-1){
fw.write(chars, 0, len);
fw.flush();
len =fr.read(chars);
}
fr.close();
fw.close();
}