思路分析
上一篇文章已经介绍了java实现文件夹的复制,这篇文章为上一篇文章的补充,补充了文件夹的剪切,大家可以点击这里来了解上一篇文章(Java实现文件夹的复制)
代码展示
package com.java.study;
import java.util.*;
import java.io.*;
public class Test implements Serializable{
private String src;
private String target;
public Test(String src, String target) {
this.src = src;
this.target = target;
}
public String getSrc() {
return src;
}
public void setSrc(String src) {
this.src = src;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
//复制文件,后续大家可以考虑缓冲问题,减少io次数,从而提高效率
static void copyfile(String oldfile,String newfile) throws IOException {
File oldf=new File(oldfile);
FileOutputStream fop=new FileOutputStream(new File(newfile));
FileInputStream fip=new FileInputStream(oldf);
int count=fip.available();
byte[] bytes=new byte[count];
int input=-1;
while((input=fip.read(bytes))!=-1){
fop.write(bytes);
}
fop.flush();
fop.close();
fip.close();
}
//复制文件夹
static void copydir(String oldpath,String newpath) throws IOException {
File f1=new File(oldpath);
File[] files=f1.listFiles();
for(File ff:files){
if(!ff.isDirectory()){ //如果是文件,直接调用上面文件复制方法进行复制
String newtarget=newpath+File.separator+ff.getName();
copyfile(ff.getAbsolutePath(),newtarget);
}else{ //如果是文件夹,运用递归进行文件夹的复制
String newtarget=newpath+File.separator+ff.getName();
File newdir=new File(newtarget);
newdir.mkdir();
copydir(oldpath+File.separator+ff.getName(),newpath+File.separator+ff.getName());
}
}
}
//文件夹的剪切,先进行判断,如果时文件,直接删除,如果时文件夹,递归向下调用
//因为File中的delete方法只能删除一个普通文件或者一个空的文件夹,所以需要先进行判断
static void deletedir(String src){
File srcfile=new File(src);
File[] srcfiles=srcfile.listFiles();
for(File f:srcfiles){
if(f.isFile()){ //判断为文件,直接调用delete方法删除
f.delete();
}else{ //判断为文件夹,继续递归对该文件夹内的文件进行判断删除
deletedir(f.getAbsolutePath());
}
}
srcfile.delete();
}
public static void main(String[] args) throws IOException {
copydir("f:\\java1","f:\\target");
deletedir("f:\\java1");
}
}