java 的正则表达式该如何实现下面的要求
目前我做了个工程,其中要求能使用java实现类似unix下的list命令,当是我不希望使用java的FileFilter接口,后来发现java有正则表达式,所以我希望借助它来实现,可是当我实现了相关的代码后,发现它不能如我所愿.测试代码如下:
package test;
import java.util.regex.*;
import java.io.*;
public class TestList {
public TestList() {
super();
}
public static void main(String[] args) {
TestList testlist = new TestList();
if(args.length>0){
for(String dir:args){
try{
testlist.list(dir);
}catch(Exception excp){
excp.printStackTrace();
}
}
}else{
try{
testlist.list(null);
}catch(Exception excp){
excp.printStackTrace();
}
}
}
public void list(String arg) throws Exception{
File dirf;
String patternStr=null;
if(arg != null){
dirf = new File(arg);
if(dirf.isDirectory()==false){
patternStr = dirf.getName();
dirf = dirf.getParentFile();
}
if(dirf.isDirectory()==false){
throw new IllegalArgumentException(dirf.getAbsolutePath()+"不是目录");
}
}else{
dirf = new File(System.getProperty("user.dir"));
}
Pattern pt=null;
if(patternStr != null){
pt = Pattern.compile(patternStr);
System.out.println("patternStr="+patternStr);
}
File listfiles[] = dirf.listFiles();
System.out.println(dirf.getAbsolutePath()+":");
for(File lstf:listfiles){
String filename = lstf.getName();
if(pt == null || pt.matcher(filename).matches()){
System.out.println(filename);
}
}
}
}
以上代码在编译后使用下列命令执行:
java -cp . test.TestList "test/*.class"
运行时报出如下错误:
java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0 *.class
^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at test.TestList.list(TestList.java:45)
at test.TestList.main(TestList.java:15)
请问该如何就真这个问题.
当然,如果我使用下列命令:
java -cp . test.TestList test/*.class
运行是对的.应为这个时候是由操作系统的shell实现正则表达式匹配的.
谢谢各位!!!