各位问个问题啊,关于文件夹操作的,某个文件夹下面还有许多文件夹,而这些文件夹下面有许多个文件,如何找到不包含某个指定文件的文件夹(比如找到不包含doc文件的文件夹)并且把此文件夹删除?这个文件看一下,这个是文件夹下面找到doc格式的文件就把整个文件夹删除掉的程序,怎么才能改成没有找到doc格式的文件就把整个文件夹删掉呢?
import java.io.File;
import java.io.IOException;public class DeleteAll
{

public static void main(String args[])
{
// DeleteAll t = new DeleteAll();
FindFiles(new String[]
{ "F:\\test\\2222" });
}


public static void FindFiles(String[] str)
{
if (str.length == 0)
str = new String[]{ ".." };
File pathName = new File(str[0]);
if (pathName.exists())
{
String[] fileNames = pathName.list();
for (int i = 0; i < fileNames.length; i++)
{
File f = new File(pathName.getPath(), fileNames[i]);
try
{
if (f.isDirectory())
{
FindFiles(new String[]{f.getCanonicalPath()});
}
else
{
if (f.getCanonicalPath().endsWith(".doc"))
{
String path=f.getCanonicalPath();
System.out.println(path);
delFolder(path);
System.out.println("deleted"+path);
}
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

// 删除文件夹
// param folderPath 文件夹完整绝对路径

public static void delFolder(String folderPath)
{
try
{
delAllFile(folderPath); // 删除完里面所有内容
String filePath = folderPath;
filePath = filePath.toString();
java.io.File myFilePath = new java.io.File(filePath);
myFilePath.delete(); // 删除空文件夹
}
catch (Exception e)
{
e.printStackTrace();
}
}

// 删除指定文件夹下所有文件
// param path 文件夹完整绝对路径
public static boolean delAllFile(String path)
{
boolean flag = false;
File file = new File(path);
if (!file.exists())
{
return flag;
}
if (!file.isDirectory())
{
return flag;
}
String[] tempList = file.list();
File temp = null;
for (int i = 0; i < tempList.length; i++)
{
if (path.endsWith(File.separator))
{
temp = new File(path + tempList[i]);
}
else
{
temp = new File(path + File.separator + tempList[i]);
}
if (temp.isFile())
{
temp.delete();
}
if (temp.isDirectory())
{
delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件
delFolder(path + "/" + tempList[i]);// 再删除空文件夹
flag = true;
}
}
return flag;
}
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【zhuyedeqingqing】截止到2008-06-27 20:20:12的历史汇总数据(不包括此帖):
    发帖数:3                  发帖分:220                
    结贴数:3                  结贴分:220                
    未结数:0                  未结分:0                  
    结贴率:100.00%            结分率:100.00%            
    敬礼!
      

  2.   

    File类中有个方法  public String[] list(FilenameFilter filter){} 可以设置个boolean开关,如果返回数组为空那么开关设为true,然后下面根据这个boolean开关来决定是否删除。具体的细节就不罗嗦了~
      

  3.   

    if (f.getCanonicalPath().endsWith(".doc")) 
    改成
    if(!f.getCanonicalPath().endsWith(".doc"))
      

  4.   

    我发个我刚写好的,不过有个小漏洞,就是按一次删除,不能删除本文件夹,只能删除里面的所有~呵呵,其他功能都有了
    包括删除路径等!
    import java.io.*;
    import java.util.*;
    public class qdb
    {
    private  boolean control=true;
    private String s;
    public qdb(File f,String s)
    {
    this.s=s;
    method(f);
    }
    private class Q implements FilenameFilter
    {
    boolean b=false;
    public boolean accept(File f,String FileName)
    {
    int i=FileName.indexOf(".");
    if(i!=-1)
    {
    FileName=FileName.substring(i+1);
    if(FileName.equals(s))
    {
    b=true;
    }
    }
    return b;
    }
    }
    public  boolean method(File f)
    {
    String[] s=f.list(new Q());
    if(s.length!=0)
    {
    System.out.println(Arrays.toString(s));
    control=false;
    }
    return control;
    }
    public void delete(File f)
    {
    if(control)
    {
    if(f.isDirectory())
    {
    File[] fs=f.listFiles();
    if(fs.length==0)
    {
    f.delete();
    System.out.println(f.toString()+"文件夹被删除");
    }
    else
    {
    for(int i=0;i<fs.length;i++)
    {
    delete(fs[i]);
    }
    }
    }
    else
    {
    f.delete();
    System.out.println(f.toString()+" 文件被删除");
    }
    }
    else
    {
    System.out.println("所以此文件夹无须删除");
    }
    }
    public static void main(String[] args)throws Exception
    {
    File f=new File("f:/qdb");
    qdb q=new qdb(f,"txt");
    q.delete(f);
    }
    }
      

  5.   

    找到doc的的文件夹被删了.....那剩下的不就是没含doc的吗....?
      

  6.   

    4楼的肯定不行,因为文件夹下面还有别不是doc的文件,它只要判断有一个不是doc文件就会把文件夹删掉,不符合我的意思
    5楼的正在研究中
    6楼,我的意思是留下包含doc文件的文件夹,删除掉缺少doc文件的文件夹
      

  7.   

    用这个方法吧,package com.dtb.test;
    import java.io.*;
    public class Test_File {
    public static void do1(String dir){
    File f=new File(dir);
    String[] flist=f.list();
    boolean isf=true;
    for(int i=0;i<flist.length;i++){
    File tf=new File(dir+"/"+flist[i]);
    if(tf.isDirectory()){
    do1(dir+"/"+flist[i]);
    }
    else{
    if(tf.getName().indexOf(".doc")!=-1){
    //f.delete();
    System.out.println("get it and delete it! --"+f.getPath());
    }
    }
    }
    }
    public static void main(String[] args){
    do1("e:/temp");
    }
    }
      

  8.   

    楼主说的不太明白,
    e:/t1/下有t2,t3两个文件夹
    t2无doc文件,t3中有,那t1要不要删掉???
      

  9.   

    搞定,呵呵,package com.dtb.test;
    import java.io.*;
    public class Test_File {
    public static void do1(String dir){
    System.out.println("dir="+dir);
    File f=new File(dir);
    String[] flist=f.list();
    boolean isf=false;
    boolean hf=true;
    if(flist.length==0)
    hf=false;
    for(int i=0;i<flist.length;i++){
    File tf=new File(dir+"/"+flist[i]);
    if(tf.isDirectory()){
    do1(dir+"/"+flist[i]);
    }
    else{
    if(tf.getName().indexOf(".doc")!=-1){
    isf=true;
    }
    }
    }
    if(!isf && !hf){
    System.out.println(f.getPath()+" no");
    }
    }
    public static void main(String[] args){
    do1("e:/temp");
    }
    }
      

  10.   

    import java.io.*;
    import java.util.*;
    public class qdb
    {
    private String ss;
    public qdb(String s)
    {
    this.ss=s;
    }
    public void delete(File f) 
    {
    File[] fs=f.listFiles();
    if(fs.length==0&&fs!=null)
    {
    f.delete();
    }
    else
    {
    for(int i=0;i<fs.length;i++)
    {
    if(fs[i].isDirectory())
    {
    delete(fs[i]);
    }
    else
    {
    String s=fs[i].getName();
    if((s.indexOf(ss))==-1)
    {
    fs[i].delete();
    }
    }
    }
    }
    }
    public static void main(String[] args)throws Exception
    {
    File f=new File("f:/qdb");
    qdb q=new qdb("txt");
    q.delete(f);
    }
    }
    这个~LZ也不说说明白点
      

  11.   

      if(!isf && !hf){
                System.out.println(f.getPath()+" no");
            }
    这里的f就是你要删掉的文件夹
      

  12.   

    哎呀,还是我没说明白啊,是这样的,假如E:\1\2文件夹下有3和4两个文件夹,3文件夹下有doc文件,4文件夹下面没有doc文件,那么删除4这个完整的文件夹,当然3和4文件夹除了doc文件还有别的若干文件
      

  13.   

    明白楼主的意思了,程序我是写不出来了,
    我的思想是反复的读这个文件目录,当读到文件夹时,判断里面有没有子文件夹,如果有,再接着读,
    只有当读到一个文件夹,它的内部都是文件时,再进行是否含有.doc文件的判断,如果没有的话,就删掉这个文件夹,如果有,接着判断下面的,
      

  14.   


    1这个目录下面只有3和4两个文夹, 没有doc文件, 那就直接删掉了, 不会判断3,4目录了吧???
      

  15.   


    if (f.getCanonicalPath().endsWith(".doc"))
    {
      break;

    else
    {String path=f.getCanonicalPath();
    System.out.println(path);
    delFolder(path);
    System.out.println("deleted"+path);}