IO操作中复制文件的方法
IO操作中有一个transferTo函数,它可以完成文件的复制。但是它是jdk9以后才出现的方法,在jdk8是不能使用的。我们可以自己写一个和transferTO相同的方法来调用。
新方法
方便简单,一个函数搞定
总共列出三种写法,前两种比较相似。第三种是读写操作,读取文件fi的字节写入fo中
public class Fi3m2 {
public static void main(String[] args) {
File f = new File("b.txt");//创立一个File对象 f,括号里填要复制的文件
try(FileInputStream fi = new FileInputStream(f)){//定义输入文件流fi 把对象f放在括号里
fi.transferTo(new FileOutputStream("m2.txt"));
//transferTo 把mfi移动到项目的根目录下,命名为m2.txt
}catch (Exception e) {
}
}
}
public class Fi3m1 {
public static void main(String[] args) {
try(FileInputStream fi = new FileInputStream("a.txt");
FileOutputStream fo = new FileOutputStream("m1.txt")){
fi.transferTo(fo);
}catch (Exception e){}
}
}
public class Fi3m3 {
public static void main(String[] args) {
try(FileInputStream fi = new FileInputStream("a.txt");
FileOutputStream fo = new FileOutputStream("m3.txt")){
fo.write(fi.readAllBytes());
}catch (Exception e){}
}
}
自己编写copyFile方法
- 首先编写一个copyFile方法,形参设为 File src, File dst, int b 它们的作用我在代码中已经注释明白
public static void copyFile(File src, File dst, int b) {//要复制的文件,目的地址,单次复制字节大小
//try输入输出流
try (FileInputStream fis = new FileInputStream(src); FileOutputStream fos = new FileOutputStream(dst)) {
byte[] buf = new byte[b];
int len = 0;
while ((len = fis.read(buf)) >= 0) {
//当文件大于等于零时执行写操作
fos.write(buf, 0, len);
}
} catch (Exception e) {
}
}
-
打包
将写好的方法打包成两个方法,涉及到了方法的重载
public static void copyFile(File src, File dst) { copyFile(src,dst,8192); } public static void copyFile(String src,String dst) { copyFile(new File(src),new File(dst),8192); }
-
应用
public static void main(String[] args) { File file1 = new File("d.txt"); File file2 = new File("c.txt"); System.out.println(file1.exists()); copyFile("b.txt","c.txt");//直接输入文件名完成复制文件 copyFile(file2,file1);//输入file对象也可以完成复制文件 }