【问题起源】
我最近要做一个Class加密程序 用自己的classload来装载encryptclass 好 我必须提供一个工具来给程序员
用于加密class作为一个好的Exe程序 我希望可以通过命令行加密class
譬如Encryption encryptclassclass classclass
问题来了 我是否应该做成文件通配符的方式?
譬如 Encryption encryptc?*k?class
【解决办法】
好在有google 我搜索FilenameFilter wildcard character 发现有一个appach组织在做一个oro的项目 里面有
我要的东西
orgappacheoroioGlobFilenameFilter这个可以用 然而在测试的时候发现java的读取arg的方式很让我吃惊
import javaioFile;
import orgapacheoroioGlobFilenameFilter;
public class Test {
public static void main( String[] args ) {
// Create a filter
GlobFilenameFilter filter = new GlobFilenameFilter( args[]);
// Find all the files in the folder matching that filter
File cwd = new File( );
String[] filesFound = cwdlist( filter );
// And print them out
Systemoutprintln( Found + filesFoundlength + files);
for( int i = ; i < filesFoundlength; i ++ ) {
Systemoutprintln( Found file + filesFound[i] );
}
}
}
大家可以将这个文件放在自己的IDE里面运行 并在工作目录里面建个txt文件txt txt txt
运行java Test *txt(jdk )
结果如何?
这个程序打印结果是
found file
found file txt
【为什么】
为了了解原因 我在main函数加入一句
Systemoutprintln(arg[]=+arg[]);
结果是
arg[]=txt
这就说明了 java在调用参数的时候已经进行通配符的处理在这个例子中
java Test *txt
和
java Test txt txt txt是等同的
不信 你可以让他做循环打印
for(int j=; j
Systemoutprintln(arg[+j+]=+arg[j]);
}
结果一样让你吃惊
【结论】
实事求是和试验是检验真理的办法 不要想当然