下面是大师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));
}
} // /:~
// 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));
}
} // /:~
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);
}
}
// 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)));
}
} ///:~
比如用到的 mirrow 什么的。。作者网站上有下载
--------------------------//: 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)));
}
} // /:~
-------------------------