java - 使用正则表达式显示目录列表

标签 java regex java-io

以下是“Thinking in Java”中的代码片段:

import java.io.*;
import java.util.*;
import java.util.regex.*;

public class DirList {
    public static void main(String[] args){
        File path = new File(".");
        String[] list;
        if(args.length == 0){
            list = path.list();
        }
        else{
            //System.out.println(args[0]);
            list = path.list(new DirFilter(args[0]));

        }

        Arrays.sort(list, new AlphabeticComparator());
        System.out.println(list.length);
        for(int i = 0; i < list.length; i++){
            System.out.println(list[i]);
        }
    }
}

class DirFilter implements FilenameFilter {
    private Pattern pattern;
    public DirFilter(String regex){
        pattern = Pattern.compile(regex);
        //System.out.println(pattern);

    }
    public boolean accept(File dir, String name) {
     // Strip path information, search for regex:
        return pattern.matcher(new File(name).getName()).matches();

    }
} ///:~

理想情况下,它应该列出当前目录中的所有 .java 文件,但事实并非如此。据我观察,如果我将 C.*.java 作为命令行参数传递,则数组“list”根本不包含任何元素。 我在这里没有包含 AlphabeticComaparator 类;它所做的只是按字母顺序对文件进行排序。

我对文件 I/O 和正则表达式都是新手;非常感谢我能得到的任何帮助。

最佳答案

从命令行,其中任何一个都可以用于列出所有 .java 文件:

java DirList .*\\.java
java DirList '.*\.java'

如果您没有任何以 C 开头的 java 文件名,则 C.*.java 将为空。

关于java - 使用正则表达式显示目录列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29877584/

相关文章:

java - 在同一个应用程序中使用 TCP 和 UDP 有什么问题吗?

javascript - 如何删除括号中除完全数字内容之外的所有内容?

regex - 一个 Vim 命令,用于插入一段文本以匹配行,除非它已经存在

java - 搜索任何 .XML 文件的目录

java - 如何使用 Java 按图 block 读取 TIFF 文件?

Java IO——关闭输入流

java - 使用mockito更改 Final 字段

java - 使用 log4j2 和 JMS Appender 进行审计

java - 使用 for-each 循环和 Map.Entry() 删除 LinkedHashMap 实例中等于字符串 "world"的任何键值,但总是出错

javascript - 正则表达式查找不在两个其他字符之间出现的所有字符