import java.io.*;
import java.util.*;
import java.util.concurrent.*;
public class BlockingQueueTest {
public static void main(String[]args)
{
Scanner in=new Scanner(System.in);
System.out.print("Enter base directory (e.g./usr/src):");
String directory=in.nextLine();
System.out.print("Enter keyword(e.g.volatile):");
String keyword=in.nextLine();
BlockingQueue<File>queue=new ArrayBlockingQueue<File>(10);
FileEnumerationTask enumerator=new FileEnumerationTask(queue,new File(directory));
}}
class FileEnumerationTask implements Runnable
{
private BlockingQueue<File>queue;
private File startingDirectory;
public static File DUMMY=new File("");
public FileEnumerationTask(BlockingQueue<File>queuq,File startingDirectory )
{
this.queue=queue;
this.startingDirectory=startingDirectory;
}
public void run()
{
try{
enumerate(startingDirectory);
queue.put(DUMMY);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void enumerate(File directory)throws InterruptedException
{
File[]files=directory.listFiles();
for(File file:files)
{
if(file.isDirectory())
enumerate(file);
else
queue.put(file);
}
}
}
class SearchTask implements Runnable
{
private BlockingQueue<File>queue;
private String keyword;
public SearchTask(BlockingQueue<File>queue,String keyword)
{
this.queue=queue;
this.keyword=keyword;
}
public void run()
{
try{
boolean done=false;
while(!done)
{
File file=queue.take();
if(file==FileEnumerationTask.DUMMY)
{
queue.put(file);
done=true;
}
else
search(file);
}
}
catch(Exception e)
{
e.printStackTrace();
}

}
public void search(File file)throws IOException
{
Scanner in=new Scanner(System.in);
int lineNumber=0;
while(in.hasNextLine())
{
lineNumber++;
String line=in.nextLine();
if(line.contains(keyword))
System.out.printf("%s:%d:%s%n", file.getPath(),lineNumber,line);

}
in.close();
}
}上面这段程序是用来在一个目录及它的所有子目录下搜索所有文件,打印出包含指定关键字的行。
这句话:
System.out.print("Enter base directory (e.g./usr/src):");
String directory=in.nextLine();
directory:我应该输入什么样的格式呢,输入这样的格式对吗?D:\\Java\\jdk1.6.0\\com\\sun\\corba\\se,我按这样的输入,在输入关键字,根本就没检索出来,请指教?先谢过,

解决方案 »

  1.   


    import java.io.*;
    import java.util.*;
    import java.util.concurrent.*;
    public class BlockingQueueTest {
    public static void main(String[]args)
    {
    Scanner in=new Scanner(System.in);
    System.out.print("Enter base directory (e.g./usr/src):");
    String directory=in.nextLine();
    System.out.print("Enter keyword(e.g.volatile):");
    String keyword=in.nextLine();
    BlockingQueue<File>queue=new ArrayBlockingQueue<File>(10);
    FileEnumerationTask enumerator=new FileEnumerationTask(queue,new File(directory));
    new Thread(enumerator).start();
    for(int i=1;i<=100;i++)
    new Thread(new SearchTask(queue,keyword)).start();
    }}
    class FileEnumerationTask implements Runnable
    {
    private BlockingQueue<File>queue;
    private File startingDirectory;
    public static File DUMMY=new File("");
    public FileEnumerationTask(BlockingQueue<File>queuq,File startingDirectory )
    {
    this.queue=queue;
    this.startingDirectory=startingDirectory;
    }
    public void run()
    {
    try{
    enumerate(startingDirectory);
    queue.put(DUMMY);
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    public void enumerate(File directory)throws InterruptedException
    {
    File[]files=directory.listFiles();
    for(File file:files)
    {
    if(file.isDirectory())
    enumerate(file);
    else
    queue.put(file);
    }
    }
    }
    class SearchTask implements Runnable
    {
    private BlockingQueue<File>queue;
    private String keyword;
    public SearchTask(BlockingQueue<File>queue,String keyword)
    {
    this.queue=queue;
    this.keyword=keyword;
    }
    public void run()
    {
    try{
    boolean done=false;
    while(!done)
    {
    File file=queue.take();
    if(file==FileEnumerationTask.DUMMY)
    {
    queue.put(file);
    done=true;
    }
    else
    search(file);
    }
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }

    }
    public void search(File file)throws IOException
    {
    Scanner in=new Scanner(System.in);
    int lineNumber=0;
    while(in.hasNextLine())
    {
    lineNumber++;
    String line=in.nextLine();
    if(line.contains(keyword))
    System.out.printf("%s:%d:%s%n", file.getPath(),lineNumber,line);

    }
    in.close();
    }
    }
    刚刚代码没贴全,