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,我按这样的输入,在输入关键字,根本就没检索出来,请指教?先谢过,
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();
}
}
刚刚代码没贴全,