最近两周在家,学习效率大打折扣,所以这两周的学习总结不是那么丰富,有点简单,希望各位小伙伴儿多多包涵啊
对文件的复制操作主要分四步进行:
1、与源文件进行关联
2、选择读取和写出字节流
3、选择相应的读取字节长度,并且将读取出来的字节数组写出到指定的目标文件中
4、依次关闭写出资源,以及读取资源
对文件进行复制拷贝,下面是相应的源码:
public static void fileCopy(String srcPath,String destPath) {
//1、与源文件和目标文件建立联系(确保源文件存在)目标文件可以不存在
fileCopy(new File(srcPath),new File(destPath));
}
public static void fileCopy(File src,File dest) {
//2、选择相应的流
InputStream is = null;//创建输入流,提升作用域
OutputStream os = null;//创建输出流,提升作用域
try {
is = new FileInputStream(src);
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("源文件不存在");
}
try {
os = new FileOutputStream(dest,true);//以追加的方式写出
}catch (FileNotFoundException e ) {
e.printStackTrace();
System.out.println("目标文件关联失败");
}
//3、操作
byte[] flush = new byte[1024];//定义每次读取和写入的大小
int len = 0 ;//定义每次读取的实际大小
try {
while(-1!=(len=is.read(flush))) {
os.write(flush, 0, len);
}
os.flush();
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件读取失败");
}finally {
//4、关闭资源:先关闭最后打开的资源
try {
os.flush();
} catch (IOException e) {
e.printStackTrace();
System.out.println("关闭目标文件资源失败");
}
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("关闭源文件资源失败");
}
}
}
在对文件的复制操作中,与上一周的内容(单独进行写出操作)相比,由于在读取的时候已经是使用了字节数组进行读取,所以在写出的时候不需要对字节流进行强制转化,可以直接将字节数组写出到目标文件中。
对文件夹进行拷贝的基本步骤:
1、在拷贝文件夹的时候,首先需要对源文件夹进行类型判断,是文件还是文件夹
2、在源文件目录是文件的时候,可以直接调用上述封装的fileCopy方法进行文件的复制。
3、若源文件是文件夹的时候,应该利用递归的方式,检查子孙级文件,然后将文件夹中的子孙级文件写出到目标文件夹中。
文件夹拷贝的源码:
public static void copyDir(String srcPath,String destPath) {
File srcDir = new File(srcPath);
File destDir = new File(destPath,srcDir.getName());
copyDirDetails(srcDir,destDir);
}
public static void copyDirDetails(File srcDir,File destDir) {
if (srcDir.isFile()) {//src是文件
FileUtil.fileCopy(srcDir, destDir);
}else if (srcDir.isDirectory()) {//src是文件夹
//确保目标文件夹的路径存在
destDir.mkdirs();
//获取下一级文件
for (File sub:srcDir.listFiles()) {
copyDirDetails(sub,new File(destDir,sub.getName()));
}
}
}
在进行文件夹拷贝时,如果判断出源文件为文件夹类型,那么首先应该确保目标文件夹存在,所以我们需要先建立目标文件夹的路径,此处调用的是mkdirs方法,此方法可以直接建立文件的路径,而不需要逐级建立相关的文件夹,比mkdir方法更加方便快捷。所以此处选择mkdirs方法进行建立相应的文件夹路径。