从目录中读取文件并从Java中过滤文件
以下代码遍历所有目录和子目录,并输出.java文件;从目录中读取文件并从Java中过滤文件
import java.io.File;
public class DirectoryReader {
private static String extension = "none";
private static String fileName;
public static void main(String[] args){
String dir = "C:/tmp";
File aFile = new File(dir);
ReadDirectory(aFile);
}
private static void ReadDirectory(File aFile) {
File[] listOfFiles = aFile.listFiles();
if (aFile.isDirectory()) {
listOfFiles = aFile.listFiles();
if(listOfFiles!=null) {
for(int i=0; i < listOfFiles.length; i++ ) {
if (listOfFiles[i].isFile()) {
fileName = listOfFiles[i].toString();
int dotPos = fileName.lastIndexOf(".");
if (dotPos > 0) {
extension = fileName.substring(dotPos);
}
if (extension.equals(".java")) {
System.out.println("FILE:" + listOfFiles[i]);
}
}
if(listOfFiles[i].isDirectory()) {
ReadDirectory(listOfFiles[i]);
}
}
}
}
}
}
这是否高效?可以做些什么来提高速度?
欢迎任何想法。
我的评论:
-
可能的错误:
extension
不复位。想想,如果你ecounterfile1.java
和THESfile2
会发生什么建议(无
.
个字符数):把if (extension.equals(".java")) System.out.println("FILE:" + listOfFiles[i]);
的
if (dotPos > 0)
ReadDirectory
体内是一种方法和应accourding to convention有小首字母:readDirectory
-
你可以清理代码中的比特通过使用for-each循环:
for(File f : listOfFiles) { if (f.isFile()) { // ... } if(f.isDirectory()) { readDirectory(f); } }
谢谢,点了。 – Adnan 2010-06-10 09:27:53
使用StringBuffer代替的System.out。递归总是比较慢,尽管更简洁。
在Java 7,我会考虑这样的:
Files.walkFileTree(aFile.toPath(), new SimpleFileVisitor<Path>()
{
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
{
if(file.getFileName().endsWith(".java")
{
System.out.println("FILE:" + file);
}
return FileVisitResult.CONTINUE;
}
});
这可能不是快,但我觉得它更具可读性。
编辑:我删除了当前的Java示例。 listFiles
不是递归的,所以你可以使用它,但你将不得不使用自己的递归。您也可能需要两个listFiles
调用(用于Java文件和目录),或者您需要一个匹配两者的FileFilter
。在后一种情况下,您将不得不检查返回数组中的每个文件以查看它是哪个文件。
不错的一个,它真的更具可读性。谢谢。 – Adnan 2010-06-10 09:38:51
file.getName()应该替换为file.getFileName(),因为getName(index)期望作为参数返回元素的名称 – magiccrafter 2015-04-03 13:31:23
@magiccrafter,谢谢,完成。 – 2015-04-10 05:26:42
存在一个错误:没有扩展名的文件将被视为当程序看到最后一个扩展名时。不需要两次调用listFiles。使用.getPath()而不是.toString()来获取文件路径(结果相同,可读性更好) – unbeli 2010-06-10 09:22:45
@unbeli谢谢。 – Adnan 2010-06-10 09:24:50