本帖最后由 曲终烟尽 于 2015-6-2 09:29 编辑
我觉的看有代码的帖子要有诚意,所以设置了隐藏。主要实现隐藏了,回复就可以看到。如果连回复都没有,说明你不想看到代码,也就说明你没兴趣,可能你已经是高手不屑回复查看,也可能你没时间。这正是我设置隐藏的主要目的。我要的是和我一样的新手,能交流的对研究代码有兴趣的朋友来看的。
写了一个删除指定目录和格式文件的程序,请大家指点指点,优化一下。
目前没学到多线程,没学到动态列表。所以没用这些功能。但觉得代码还可以进行大规模优化和扩展。
以后想做成文件管理器的核心类。必须要有删除功能,所以这是基础功能,还有其他,比如复制,剪切,查看目录,返回上级目录,文件属性修改等等。。。
目前只实现了 给点目录和 指定 格式后,进行删除。
至于网上的我没搜索,为了练习自己学到的知识。
原来用python做过类似文件夹管理器的东西。思路是相同的。用递归实现的目录扫描。不知有没有更好的方法。
代码如下:
FileCleaner.java
- package com.FileCleaner;
- /**
- * 文件清理
- * 对指定格式的文件进行清理,不删除目录
- * @author CJH
- * @version V1.0
- */
- public class FileCleaner {
- public static void main(String[] args)
- {
- String sourcePath="d:\\test";//指定待清理目录
- String[] ext=new String[]{"txt","class"};//指定待删除的文件格式后缀
- FileMan fm=FileMan.getInstance(sourcePath, ext);//获取实例引用
- fm.clean();//调用清理功能
- }
- }
复制代码 功能类:FileMan.java
package com.FileCleaner;
import java.io.File;
public class FileMan implements FileManBase
{
private static FileMan fm;
private String fPath;
private String[] delList;
private String[] extList;
//private FileMan(){}
/**
* 构造函数,构造对象并初始化内部参数
* @param fPath 目录路径
* @param extList 过滤文件格式列表
*/
private FileMan(String fPath,String[] extList)
{
if(this.extList==null)
this.extList=extList;
if(this.fPath==null)
this.fPath=fPath;
}
/**
* 该方法使用传入的参数创建一个FileMan的实例,并返回,保证只有一个实例存在
* @param fPath 要进行扫描的目录路径
* @param ext 过滤的将删除的文件类型,例如: String[] {"exe,tmp,jpg"}
* @return 返回FileMan 实例的引用
*/
public static FileMan getInstance(String fPath,String[] ext){
if(fPath==null||ext==null){
System.out.println("错误的参数:传入空值.");
System.exit(1);
}
if(fm==null)//如果实例不存在,则创建实例
fm=new FileMan(fPath,ext);
return fm;//返回实例的引用
}
@Override
/**
* 该函数对对象的源路径进行检查,如果是文件夹就调用searchDir(File)进行遍历
* 如果不是文件夹就 提示并 返回
*/
public String[] clean() {
// TODO Auto-generated method stub
File myFile;
myFile=new File(fPath);
if(myFile.isDirectory())
{
speak("*********进入源路径:"+fPath+"**********");
searchDir(myFile);
}
else
speak("**!!!!!参数错误,应该传入目录路径而不是文件路径.");
return null;
}
/**
* 目录搜索,该方法接受一个源目录,之后对这个目录进行遍历,如果是目录就调用自身进行递归
* 如果是文件就调用checkFileExt(File)进行文件检查
* @param file 接受一个目录文件
*/
private void searchDir(File file){
File[] allList=file.listFiles();
for(int i=0;i<allList.length;i++){//对文件进行遍历
if(allList.isDirectory())//如果是文件夹就进行递归扫描
{
speak("发现目录:"+allList);
searchDir(allList);//进入递归
}
else//如果不是文件夹那么就检查该文件的格式
{
checkFileExt(allList);
}
}
}
/**
* 对传入的文件的名称进行解析并分析是否符合extList内指定类型的文件
* 如果符合,就调用deleteFile(File df)进行删除操作
* @param file 接收一个File类型文件,指定要进行检测解析的文件
*/
private void checkFileExt(File file)
{
String fp=file.getPath();
String fname=file.getName();
String[] fnames=fname.split("\\.");
speak("解析文件:"+fp);
speak("文件名:"+fname);
if(fnames.length==0)
{
speak("文件无格式:"+fname);
return;
}
String fext=fnames[fnames.length-1];
speak("文件类型:"+fext);
for(int i=0;i<extList.length;i++)
{
speak("类型对比:"+fext+"=?="+extList);
if(fext.equals(extList)){
deleteFile(file);
}
}
}
/**
* 保存删除失败的文件到列表内
* @param ff 接受一个清理失败的File对象
* */
private void addFail(File ff) {
// TODO Auto-generated method stub
}
@Override
public void deleteFile(File df) {
// TODO Auto-generated method stub
speak("尝试删除:"+df.getName());
if(df.delete()){
speak("[成 功]:"+df.getPath());
}
else
{
addFail(df);
speak("*失败*:"+df.getPath());
}
}
public void speak(String str)
{
System.out.println(str);
}
}-----------------------------------------------------------------------------------------------------------
文件:FileManBase.java
package com.FileCleaner;
import java.io.File;
public interface FileManBase {
/**
* 清理指定目录内的每个目录下包括子目录内的 指定格式 文件
* @param fPath 接收一个String类型起始目录列表,
* @param ext 接受一个String[] 数组类型列表,进行文件格式筛选,例如["tmp","jpg","mp4"]
* @return 返回一个 File[] 数组,内含清除失败的File对象.
* */
public abstract String[] clean();//清理文件功能
/**
* 显示正在发生的操作的通知信息.
* @param str 接收文本通知并显示
*/
public abstract void speak(String str);//显示通知内容
/**
* 删除指定的文件
* @param df 接受一个File型对象,该File对象指定要删除的文件
*/
public abstract void deleteFile(File df);
}
|
|