我将目录路径作为Java程序中的参数传递,并且该目录具有各种类型的文件。我想检索文本文件的路径,然后进一步检索每个文本文件。 我是Java新手,有什么建议如何去做?
答案 0 :(得分:2)
即使这不是最佳解决方案,您也可以将此作为起点。
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DirectoryWalker {
/**
* @param args
*/
private String extPtr = "^.+\\.txt$";
private Pattern ptr;
public DirectoryWalker(){
ptr = Pattern.compile(extPtr);
}
public static void main(String[] args) {
String entryPoint = "c:\\temp";
DirectoryWalker dw = new DirectoryWalker();
List<String> textFiles = dw.extractFiles(entryPoint);
for(String txtFile : textFiles){
System.out.println("File: "+txtFile);
}
}
public List<String> extractFiles(String startDir) {
List<String> textFiles = new ArrayList<String>();
if (startDir == null || startDir.length() == 0) {
throw new RuntimeException("Directory entry can't be null or empty");
}
File f = new File(startDir);
if (!f.isDirectory()) {
throw new RuntimeException("Path " + startDir + " is invalid");
}
File[] files = f.listFiles();
for (File tmpFile : files) {
if (tmpFile.isDirectory()) {
textFiles.addAll(extractFiles(tmpFile.getAbsolutePath()));
} else {
String path = tmpFile.getAbsolutePath();
Matcher matcher = ptr.matcher(path);
if(matcher.find()){
textFiles.add(path);
}
}
}
return textFiles;
}
}
答案 1 :(得分:1)
创建表示目录的File对象,然后使用list()或listFiles()方法之一来获取子项。您可以将过滤器传递给这些过滤器以控制返回的内容。
例如,listFiles() method below将返回过滤器接受的目录中的文件数组。
public File[] listFiles(FileFilter filter)
答案 2 :(得分:0)
首先阅读File API。您可以从字符串创建文件,甚至可以确定它是exists()
还是isDirectory()
。以及列出该目录中的孩子。