package util;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class FileOperate {
private static FileOperate instance=new FileOperate();
public static FileOperate getInstance(){
return instance;
}
/*
* 创建新文件
*/
public boolean createNewFile(File f){
boolean flag=false;
if(f.exists()){
System.out.println("创建文件失败,文件 "+f.getName()+" 已存在");
return flag;
}
try {
flag=f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
if(flag){
System.out.println("创建文件 "+f.getName()+" 成功!");
}else{
System.out.println("创建文件"+f.getName()+"失败!");
}
return flag;
}
/*
* 创建新目录
*/
public boolean createNewDir(File f){
boolean flag=false;
if(f.exists()){
System.out.println("创建目录失败,目录 "+f.getName()+" 已存在");
return flag;
}
flag=f.mkdirs();
if(flag){
System.out.println("创建目录"+f.getName()+"成功");
}else{
System.out.println("创建目录"+f.getName()+"失败");
}
return flag;
}
/*
* 将src文件重命名为targetName文件名
*/
public boolean rename(File src,String targetName){
boolean flag=false;
if(!src.exists()){
System.out.println("文件"+src.getAbsolutePath()+"不存在");
return flag;
}
if("".equals(targetName)){
System.out.println("文件名不能为空");
}
String parent=src.getParent();
File temp=new File(parent+File.separator+targetName);
if(!(flag=src.renameTo(temp))){
System.out.println(parent+"下已经存在文件"+targetName);
return flag;
}else{
System.out.println("文件"+src.getAbsolutePath()+"重命名为:"+targetName+"成功");
return flag;
}
}
/*
* 根据文件名查找目录dir下的文件
*/
public List<File> findFile(File dir,String fileName,boolean isRecursion){
List<File> list=new ArrayList<File>();
if(!dir.exists())
System.out.println("目录"+dir.getAbsolutePath()+"不存在");
if(!dir.isDirectory())
System.out.println(dir.getAbsolutePath()+"不是目录");
if(isRecursion){
findFileAction(dir,fileName,list);
}else{
File[] files=dir.listFiles();
for(File file:files){
if(file.getName().equals(fileName)){
list.add(file);
}
}
}
return list;
}
/*
* 递归查找文件
*/
private void findFileAction(File f,String fileName,List<File> list){
if(f.isFile()){
if(f.getName().equals(fileName)){
list.add(f);
}
}else if(f.isDirectory()){
File[] files=f.listFiles();
for(File file:files){
findFileAction(file,fileName,list);
}
}
}
/*
* 查找目录dir下后缀为suffix的文件
*/
public List<File> findFileBySuffix(File dir,String suffix,boolean isRecursion){
List<File> list=new ArrayList<File>();
if(!dir.exists())
System.out.println("目录"+dir.getAbsolutePath()+"不存在");
if(!dir.isDirectory())
System.out.println(dir.getAbsolutePath()+"不是目录");
if(isRecursion){
findAssignFileAction(dir,suffix,list);
}else{
File[] files=dir.listFiles(new MyFileFilter(suffix));
for(File file:files){
if(file.getName().endsWith(suffix)){
list.add(file);
}
}
}
return list;
}
/*
* 过滤指定后缀文件
*/
class MyFileFilter implements FilenameFilter{
private String suffix;
public MyFileFilter(String suffix){
this.suffix=suffix;
}
/*
* dir 表示当前处理的这个文件是在哪个目录里面的
* name 表示当前处理的文件名或目录名
*/
public boolean accept(File dir, String name) {
File temp=new File(dir.getAbsolutePath()+File.separator+name);
if(name.endsWith(suffix)||temp.isDirectory())
return true;
else
return false;
}
}
/*
* 递归查找指定后缀文件
*/
private void findAssignFileAction(File f,String suffix,List<File> list){
if(f.isFile()){
if(f.getName().endsWith(suffix)){
list.add(f);
}
}else if(f.isDirectory()){
File[] files=f.listFiles(new MyFileFilter(suffix));
for(File file:files){
findAssignFileAction(file,suffix,list);
}
}
}
/*
* 将文件src移动到目录dir下
*/
public boolean moveFile(File src,File dir ,boolean isCover){
boolean flag=false;
if(!src.exists()){
System.out.println("文件"+src.getAbsolutePath()+"不存在");
return flag;
}
if(!dir.exists()){
System.out.println("目标目录"+dir.getAbsolutePath()+"不存在");
return flag;
}
if(!dir.isDirectory()){
System.out.println(dir.getAbsolutePath()+"不是目录");
return flag;
}
List<File> list=this.findFile(dir, src.getName(), false);
if(list.size()>0){
if(isCover){
list.get(0).delete();
File temp=new File(dir.getAbsolutePath()+File.separator+src.getName());
flag=src.renameTo(temp);
if(flag){
System.out.println(src.getAbsolutePath()+"移动到"+dir.getAbsolutePath()+"下成功");
}else{
System.out.println(src.getAbsolutePath()+"移动到"+dir.getAbsolutePath()+"下失败");
}
}else{
System.out.println("目标目录"+dir.getAbsolutePath()+"下已经存在文件"+src.getName());
}
}else{
File temp=new File(dir.getAbsolutePath()+File.separator+src.getName());
flag=src.renameTo(temp);
if(flag){
System.out.println(src.getAbsolutePath()+"移动到"+dir.getAbsolutePath()+"下成功");
}else{
System.out.println(src.getAbsolutePath()+"移动到"+dir.getAbsolutePath()+"下失败");
}
}
return flag;
}
/*
* 将目录srcDir移动到目录targetDir下
*/
public boolean moveDir(File srcDir,File targetDir,boolean isCover){
boolean flag=false;
if(!srcDir.exists()){
System.out.println("目录"+srcDir.getAbsolutePath()+"不存在");
return flag;
}
if(!srcDir.isDirectory()){
System.out.println(srcDir.getAbsolutePath()+"不是目录");
return flag;
}
if(!targetDir.exists()){
System.out.println("目标目录"+targetDir.getAbsolutePath()+"不存在");
return flag;
}
if(!targetDir.isDirectory()){
System.out.println(targetDir.getAbsolutePath()+"不是目录");
return flag;
}
List<File> list=this.findFile(targetDir, srcDir.getName(), false);
if(list.size()>0){
if(isCover){
this.deleteDir(list.get(0));
File temp=new File(targetDir.getAbsolutePath()+File.separator+srcDir.getName());
flag=srcDir.renameTo(temp);
if(flag){
System.out.println(srcDir.getAbsolutePath()+"移动到"+targetDir.getAbsolutePath()+"下成功");
}else{
System.out.println(srcDir.getAbsolutePath()+"移动到"+targetDir.getAbsolutePath()+"下失败");
}
}else{
System.out.println("目标目录"+targetDir.getAbsolutePath()+"下已经存在目录"+srcDir.getName());
}
}else{
File temp=new File(targetDir.getAbsolutePath()+File.separator+srcDir.getName());
flag=srcDir.renameTo(temp);
if(flag){
System.out.println(srcDir.getAbsolutePath()+"移动到"+targetDir.getAbsolutePath()+"下成功");
}else{
System.out.println(srcDir.getAbsolutePath()+"移动到"+targetDir.getAbsolutePath()+"下失败");
}
}
return flag;
}
/*
* 删除目录
*/
public boolean deleteDir(File dir){
boolean flag=false;
if(!dir.exists()){
System.out.println("目录"+dir.getAbsolutePath()+"不存在");
return flag;
}
if(!dir.isDirectory()){
System.out.println(dir.getName()+"不是目录");
return flag;
}
File[] files=dir.listFiles();
for(File file:files){
this.deleteFileAction(file);
}
flag=dir.delete();
if(flag){
System.out.println("删除目录"+dir.getAbsolutePath()+"成功");
return flag;
}else{
System.out.println("删除目录"+dir.getAbsolutePath()+"失败");
return flag;
}
}
/*
* 递归删除文件
*/
private void deleteFileAction(File f){
if(f.isFile()){
f.delete();
}else if(f.isDirectory()){
File[] files=f.listFiles();
for(File file:files){
deleteFileAction(file);
}
f.delete();
}
}
}
FileOperate
最新推荐文章于 2024-07-14 14:59:27 发布