我想把所有文件放在一个目录中,我得到的是一个以.java结尾的参数,并且在其中有一定的文字,当我想为所有的ssubfolders做这个时,我有问题。
在文件夹上使用filenamefilter只会返回不在其子文件夹中的文件夹中的文件。
任何想法我如何才能使它在子文件夹上工作?
答案 0 :(得分:0)
我解决了这个问题,我正在附加我的解决方案jsut以防其他人碰到这个。另外,我使用了Threads,因为我发现使用Threads更容易。
我的解决方案背后的理念是
制片人:
public class ThreadProducator extends Thread {
public Bufferino buffer ;
File directory ;
static ArrayList<File>files = new ArrayList<File>();
public ThreadProducator(Bufferino a){
this.buffer = a;
directory = new File("src");
}
public static ArrayList<File> getFiles(File f){
ArrayList<File> files1= new ArrayList<File>();
for ( File fis : f.listFiles()){
if ( fis.isDirectory()){
getFiles(fis);
}
else{
if(fis.getName().endsWith(".java")){
files.add(fis);
//System.out.println(files.toString());
}
}
}
return files;
}
public void run() {
// TODO Auto-generated method stub
if(directory.isDirectory()){
ArrayList<File>files =new ThreadProducator(buffer).getFiles(directory);
// System.out.println(files.toString());
buffer.put(files);
try {
sleep((int)Math.random()*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
消费者:
public class ThreadConsumator implements Runnable {
private Bufferino buf;
String lookedFor = "asdas";
public ThreadConsumator(Bufferino bufi){
this.buf = bufi;
}
@Override
public void run() {
// TODO Auto-generated method stub
ArrayList<File> res = new ArrayList<File>();
String content="";
System.out.println("Files containing the word "+lookedFor+" are:");
for ( int i = 0 ; i <25;i++){
res = buf.get();
for (File f : res)
try {
content = new Scanner(f).useDelimiter("\\Z").next();
if(content.contains(lookedFor)){
System.out.println(f.getName());
}
/*System.out.println("-----------------------");
System.out.println(content);
System.out.println("-----------------------");*/
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}