一、操作io的工具类
commons-io是apache下的一个操作文件和目录的工具类,非常方便,而Commons-io可以直接操作文件和目录
Files是java自带的,在操作文件夹方面还需要自己写逻辑创建文件夹,操作文件时,copy/move(source,dest),dest需要写明操作的文件名,也就是不能直接写目录,而是还需要写目录下制定的文件名(也就相当于是可以重命名的)
二、commons-io
1、复制
FileUtils.copyFile(File,File);//拷贝文件到指定文件中
FileUtils.copyFileToDirectory(File,File);//拷贝文件到指定目录中
FileUtils.copyDirectory(File,File);//拷贝文件夹中得内容到指定目录中
FileUtils.copyDirectoryToDirectory(File,File);//拷贝文件夹到指定目录中
2、移动
FileUtils.moveFile(File,File);//移动文件到指定文件中
FileUtils.moveFileToDirectory(File,File);//移动文件到指定目录中
FileUtils.moveDirectory(File,File);//移动文件夹中得内容到指定目录中
FileUtils.moveDirectoryToDirectory(File,File);//移动文件夹到指定目录中
3、删除
FileUtils.deleteDirectory(File);//删除指定目录
FileUtils.deleteQuietly(File);//删除指定文件
三、Files,File
File存储的路径分隔符是\而不是/,注意在截断时的区别;
重命名:File.renameTo(File) —>boolean;,当前的file并不会变成修改后的路径
存在:File.exists()—>boolean
四、常用功能
1、解决文件复制和移动重名问题(参考windows文件,在重复的后面添加版本,版本叠加)
public class FileManageSameName{
public static final int INIT_VERSION = 1;//初始版本号
public boolean copyOrMove(File resource, File target,String method) {
try {
File newFile = new File(target+"/"+resource.getName());//判断target目标目录中是否存在同名的临时file
if (newFile.exists()) {//处理已存在文件
resolveExist(newFile,FileManageSameName.INIT_VERSION);//newFile是经过版本处理的全新file
//修改resource源文件的文件名
resource.renameTo(new File(resource.getPath().substring(0,resource.getPath().lastIndexOf("\\")+1)+newFile.getName()));
}
//移动或复制
if(method.equals("copy")) {
if(resource.isFile()) FileUtils.copyFileToDirectory(resource,target);
else FileUtils.copyDirectoryToDirectory(resource,target);
}
if(method.equals("move")) {
if(resource.isFile()) FileUtils.moveFileToDirectory(resource,target,false);
else FileUtils.moveDirectoryToDirectory(resource,target,false);
}
} catch (IOException e) {
e.printStackTrace();return false;
}
return true;
}
//解决重名,添加默认版本
public void resolveExist(File file,int ver) {
String name = file.getName();
String oldPath = file.getPath();
String version = "("+ver+")";
String verFilePath = "";
File verFile = file;
if(file.isFile()) version = getFileName(name)+version+getSuffix(name);
if(file.isDirectory()) version = name+version;
verFilePath = oldPath.substring(0, oldPath.lastIndexOf("\\") + 1) + version;
verFile = new File(verFilePath);
if(!verFile.exists()) file.renameTo(verFile);//重命名
else resolveExist(file,++ver); //版本更新
}
public String getSuffix(String name){ return name.substring(name.lastIndexOf("."));}
public String getFileName(String name){return name.substring(0,name.lastIndexOf("."));}
}