首页 > main中参数是什么?

main中参数是什么?

package bjsxt.IO;

import java.util.Arrays;
import java.util.regex.*;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;

public class DirList {

    public static void main(String[] args) {
        File path=new File(".");
        String[] list;
        if(args.length==0){
            list=path.list();
        }else{
            list=path.list(new DirFilter(args[0]));
        }
        
        Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
        for(String dirItem:list){
            System.out.println(dirItem);
        }
    }

}
class DirFilter implements FilenameFilter{
    private Pattern pattern;
    public DirFilter(String regex){
        pattern=Pattern.compile(regex);
    }
    @Override
    public boolean accept(File dir, String name) {
        // TODO Auto-generated method stub
        return pattern.matcher(name).matches();
    }     
}

谢谢大家,实验了一下,我没传参数,那个args.length就等于0,代码后面的过滤实际上没执行。
有一个新问题:
File path=new File(".")
这个的绝对路径是C:\Users\yyd\workspace\imooc.IO\.
list=path.list();
打印list却打印出了C:\Users\yyd\workspace\imooc.IO下的所有文件名,所以这个"."相当于是个通配符吗?


仔细看下代码,如果有传入参数,就为通过path创建的list添加一个由传入参数为规则的过滤器(正则表达式),如果没有传入参数则直接创建list。
自己动手实践下便可以知道其效用
对于传入参数
**入口方法的签名就是public static void main(String[] sdss)

必须是public的
必须是static的
必须是void的
方法名必须是main
方法参数必须是String数组

jvm启动就按照这个标准去找这个方法,找到就执行,找不到就报错。**
手机排版渣,见谅


那么假定你定义了一个函数,并且传了一个字符串作为参数。在函数体里面,这个参数你可以使用,也可以不使用,但是你调用这个函数的时候,必须传递一个参数过去。但是通过命令行运行的时候,是可以不传递参数过去的,这个机制和别的函数不同。
我就是瞎说。。


你从CLI启动你的程序是这样的:

java bjsxt.IO.DirList

如果你希望传递一些额外的参数作为,例如

java bjsxt.IO.DirList hello world

这时候args的长度就为2,args[0]是hello,args[1]是world

回到你代码中,实际上是期望从args[0]获得一个目录的参数作为接下去的代码的输出目录,否则就是使用当前目录来输出


回答你第二个问题

. 指代当前目录
.. 指代上一级目录

举个例子

/a/b/c/./
和/a/b/c是同一个目录

/a/b/c/../
和/a/b是同一个目录

【热门文章】
【热门文章】