java

位置:IT落伍者 >> java >> 浏览文章

说说Java的args 大家可能没有注意到的现象


发布日期:2020年07月24日
 
说说Java的args 大家可能没有注意到的现象

【问题起源】

我最近要做一个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]);

}

结果一样让你吃惊

【结论】

实事求是和试验是检验真理的办法 不要想当然               

上一篇:谈谈各种JAVA中的调用程序方式

下一篇:java api混排算法