【问题标题】:Local File Search with iterative algorithm使用迭代算法进行本地文件搜索
【发布时间】:2011-12-19 18:40:03
【问题描述】:

我正在使用 Java 开发 Windows 桌面应用程序。在我的应用程序中,需要搜索所有 .php。为此,

这里我使用递归方法

import java.io.File;

public class Copier {

    public static void find(String source,String rep) {
        File src = new File(rep);
        if (src!= null && src.exists() && src.isDirectory()) {
            String[] tab = src.list();
            if (tab != null) {
                for(String s : tab) {
                    File srcc = new File(rep+"\\"+s);
                    if (srcc.isFile()) {  
                        if (srcc.getName().matches(".*"+source+"$")) {
                            System.out.println(s);
                        }
                    } else {
                        find(source,srcc.getAbsolutePath());
                    }
                }
            } else {
                //System.out.println(" list is null");
            }
        }
    }

在这里我使用 迭代算法 与队列的广度优先搜索,但它不起作用

import java.io.File;
import java.util.LinkedList;


public class Copier {
public static void find(String source,String rep)
{
    File src=new File(rep);
    LinkedList<File> qu=new LinkedList();
    if(src!=null && src.exists() && src.isDirectory())
    {
        File[] tab=src.listFiles();
        if(tab!=null)
        {
        for(File s:tab)
        {
            qu.addLast(s);
        }
        while(!qu.isEmpty())
        {
            File srcc=qu.getFirst();
            qu.removeFirst();
            if(srcc.isFile())
            {
                if(srcc.getName().matches(".*"+source+"$"))
                    System.out.println(srcc.getName());
            }

            else
            {
                System.out.println(srcc.getName());
                qu.addLast(srcc);
            }
        }

        }
    }
}

public static void main(String[] args)
{
        try {
            find(".php","C:\\AppServ");
        } catch (Exception e) {
            e.printStackTrace();
        }

}
}

【问题讨论】:

  • 什么不起作用?它在输出什么?请提供更多信息。
  • 是的,我需要找到所有文件。 php 在我的本地我使用迭代

标签: java graph io iteration


【解决方案1】:

阿努尔,

尝试使用Apache Commons IO
你可以使用类

org.apache.commons.io.FileUtils
描述了here in API Javadoc

它提供了非常有用、性能优化和无错误的静态方法来搜索文件(listFiles 和 iterateFiles 方法) ,复制/移动文件和目录,在“一行代码”中将文件读取到字符串等等。

没有必要重新发明轮子;)

【讨论】:

    【解决方案2】:

    您应该尽量不要对第一个文件夹/路径和子文件夹产生影响。 Yoga 现在正在做的是从 src 文件夹中取出所有文件和文件夹并将它们添加到队列中。然后你删除第一个并检查它是否是一个文件。如果是,那么如果它与您打印的模式匹配。如果不是文件,则打印名称并再次将其添加到队列中!

    考虑一下。如果您的 src 文件夹包含一个您从队列中取出的文件夹,请将其添加回来并重复,直到队列为空(它当然永远不会是空的)。

    你需要更多这样的东西

    public static void find(String source,String rep) {
        String pattern = ".*"+source+"$";
        LinkedList<File> qu = new LinkedList<File>();
        File src = new File(rep);
        qu.add(src);
        while(!qu.isEmpty()) {
            File srcc = qu.removeFirst();
    
            if(srcc!=null && srcc.exists()) {
                if (srcc.isDirectory()) {
                    File[] tab=srcc.listFiles();
                    for(File s: srcc.listFiles()) {
                        qu.addLast(s);
                    }
                } else if (srcc.isFile()) {
                    if(srcc.getName().matches(pattern)) {
                        System.out.println(srcc.getName());
                    }
                }
            }
        }
    }
    

    如果当前文件是目录,则所有子文件都将添加到队列中,如果是文件,则检查名称是否匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多