下面是大师Bruce Eckel写的一段源码,目的是搜索文件。弱弱的问一句:PPrint.pformat(dirs)是什么意思?//: net/mindview/util/Directory.java
// Produce a sequence of File objects that match a
// regular expression in either a local directory,
// or by walking a directory tree.
package net.mindview.util;
 
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern;
 
public final class Directory
{
public static File[] local(File dir, final String regex)
{
return dir.listFiles(new FilenameFilter() {
private Pattern pattern = Pattern.compile(regex);
 
public boolean accept(File dir, String name)
{
return pattern.matcher(new File(name).getName()).matches();
}
});
}
 
public static File[] local(String path, final String regex)
{ // Overloaded
return local(new File(path), regex);
}
 
// A two-tuple for returning a pair of objects:
public static class TreeInfo implements Iterable<File>
{
public List<File> files = new ArrayList<File>();
public List<File> dirs = new ArrayList<File>();
 
// The default iterable element is the file list:
public Iterator<File> iterator()
{
return files.iterator();
}
 
void addAll(TreeInfo other)
{
files.addAll(other.files);
dirs.addAll(other.dirs);
}
 
public String toString()
{
                         //这里的PPrint.pformat(dirs)是什么意思?是自定义类?高分求解!;
return "dirs: " + PPrint.pformat(dirs) + "\n\nfiles: "
+ PPrint.pformat(files);
}
}
 
public static TreeInfo walk(String start, String regex)
{ // Begin recursion
return recurseDirs(new File(start), regex);
}
 
public static TreeInfo walk(File start, String regex)
{ // Overloaded
return recurseDirs(start, regex);
}
 
public static TreeInfo walk(File start)
{ // Everything
return recurseDirs(start, ".*");
}
 
public static TreeInfo walk(String start)
{
return recurseDirs(new File(start), ".*");
}
 
static TreeInfo recurseDirs(File startDir, String regex)
{
TreeInfo result = new TreeInfo();
for (File item : startDir.listFiles()) {
if (item.isDirectory()) {
result.dirs.add(item);
result.addAll(recurseDirs(item, regex));
} else // Regular file
if (item.getName().matches(regex))
result.files.add(item);
}
return result;
}
 
// Simple validation test:
public static void main(String[] args)
{
if (args.length == 0)
System.out.println(walk("."));
else
for (String arg : args)
System.out.println(walk(arg));
}
} // /:~

解决方案 »

  1.   

    API中没有,又没有引入第三方包的话,就是自定义类了,从名字看就是将路径以某种指定的格式输出
      

  2.   

    鬼知道 Bruce Eckel 在 PPrint.pformat(dirs) 这里面写了些什么PS:Bruce Eckel 是谁?
      

  3.   

    啊,后面还有个PPrint.pformat(files),那就不仅仅是路径,就是把输入参数以某种指定的格式输出
      

  4.   

     thingking in java的author
      

  5.   

    哥,think  in Java 就是这NB写的呀
      

  6.   

    我这又有一个线程的,大家帮忙看看效率那种要高?package com.abt.operator;import java.io.*;
    import java.util.*;public class SeacherThread {
    public static void main(String args[]) {
    Find f = new Find();
    Thread thread = new Thread(f);
    thread.start();
    }
    }class Find implements Runnable {
    private void getFile(File file[]) {
    for (File f : file) {
    if (f.getName().endsWith(".html")) {
    System.out.println(f.getName());
    }
    if (f.isFile())
    continue;
    if (f.isDirectory()) {
    File[] ffile = f.listFiles(new FilenameFilter() { @Override
    public boolean accept(File dir, String name) {
    // TODO Auto-generated method stub
    return true;
    }
    });
    getFile(ffile);
    }
    }
    } @Override
    public void run() {
    // TODO Auto-generated method stub
    File f = new File("D:/");
    File[] file = f.listFiles(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
    // TODO Auto-generated method stub
    return true;
    }
    });
    getFile(file);
    }
    }
      

  7.   

    //: net/mindview/util/PPrint.java
    // Pretty-printer for collections
    package net.mindview.util;
    import java.util.*;public class PPrint {
      public static String pformat(Collection<?> c) {
        if(c.size() == 0) return "[]";
        StringBuilder result = new StringBuilder("[");
        for(Object elem : c) {
          if(c.size() != 1)
            result.append("\n  ");
          result.append(elem);
        }
        if(c.size() != 1)
          result.append("\n");
        result.append("]");
        return result.toString();
      }
      public static void pprint(Collection<?> c) {
        System.out.println(pformat(c));
      }
      public static void pprint(Object[] c) {
        System.out.println(pformat(Arrays.asList(c)));
      }
    } ///:~
      

  8.   

    作者在本书开头就说明了,他有他自己定义的包。
    比如用到的 mirrow 什么的。。作者网站上有下载
      

  9.   

    我怎么觉得你用线程实现的那个就是找以html结尾的文件呢,还没有返回,就是打印出来而已,那个accept方法什么都没有啊
      

  10.   

    结贴结贴,搞定了。这是那个自定义类源码。
    --------------------------//: net/mindview/util/PPrint.java
    // Pretty-printer for collections
    package com.abt.operator;import java.util.*;public class PPrint {
    public static String pformat(Collection<?> c) {
    if (c.size() == 0)
    return "[]";
    StringBuilder result = new StringBuilder("[");
    for (Object elem : c) {
    if (c.size() != 1)
    result.append("\n  ");
    result.append(elem);
    }
    if (c.size() != 1)
    result.append("\n");
    result.append("]");
    return result.toString();
    } public static void pprint(Collection<?> c) {
    System.out.println(pformat(c));
    } public static void pprint(Object[] c) {
    System.out.println(pformat(Arrays.asList(c)));
    }
    } // /:~
    -------------------------