java参数和选项,如何处理它们

时间:2015-05-21 23:25:19

标签: java parameters

我正在创建一个程序,其中包括访问目录中的文件。例如,我希望用户能够传递尽可能多的参数(即目录) myFile.jar dir1/subDir dir2 file.txt

我希望能够允许用户进入子目录,但仅限于他们想要的目录。所以对于使用dir2的子目录而不是dir1 / subDir我正在考虑这样的事情: myFile.jar dir1.subDir dir2 -s file.txt

-s表示仅进入此目录的子目录。 我怎么能实现这个?开始在args数组中查找“-s”字符串并在可用的地方使用它?这是正确的做法吗?

修改/更新

我正在编辑这篇旧帖子,只是为了确保我所做的是对的。它完成了工作,我只是不确定它是否接近专业级别的编程

这是我处理传递的参数的主要方法

public static void main(String [ ] args){
    boolean subfolder=false;
    if (args.length<1){
        System.out.println("at least one file must be provided");
        System.out.println("Usage:\n [option] {folders} [option] {folders} {files}");
        System.out.println("Options\n\t -s will visit all subfolders under the folder(s) provided until a -n is found");
        System.out.println("\t -n (default)will Not visit subfolders for the folder(s) provided until a -s is found");
    }
    else
    for (int i=0;i<args.length;i++){
        if((args[i].length()==2)&&(args[i].contains("-"))){
//          this is an options args
            if(args[i].contains("s")){
                subfolder=true;
            }else 
            subfolder=false;
        }
        else{
            if(new File(args[i]).isFile()){
//              this is a file
           //do what i need to do with this file
        }
        else if(new File(args[i]).isDirectory()){
//      this is a directory get the files in that directory and if subfolders=true, then get the files inside the subfolders
            getSubDirs(new File(args[i]),subfolder);
            }
            else
            {
            System.out.println("at least one file must be provided");
            System.out.println("Usage:\n [option] {folders} [option] {folders} {files}");
            System.out.println("Options\n\t -s will visit all subfolders under the folder(s) provided until a -n is found");            System.out.println("\t -n (default)will Not visit subfolders for the folder(s) provided until a -s is found");
            }
        }//else
    }//for
}//method

在执行任何参数或错误的参数时,我得到了这个

at least one file must be provided
Usage:
 [option] {folders} [option] {folders} {files}
Options
     -s will visit all subfolders under the folder(s) provided until a -n is found
     -n (default)will Not visit subfolders for the folder(s) provided until a -s is found

并在使用此

-s /home/ilias/Programming/Tomcat /home/ilias/EclipseWorkspace/test -n /home/ilias/Programming/Eclipse/eclipse /home/ilias/EclipseWorkspace/Servers

我获取了Tomcattest下所有子文件夹中所有文件的列表 并且只有Eclipse/eclipse下{和Servers下的文件没有子文件夹。

1 个答案:

答案 0 :(得分:0)

从你的第二个例子中,通过在空格字符上分割输入来填充main中的字符串[] args。

public static void main(String[] args){
    args[0] // myFile.jar
    args[1] // dir1.subDir
    args[2] // dir2
    args[3] // -s
    args[4] // file.txt
}

您必须自己构建功能。我建议你的第一个参数是开关(前缀为 - 像-s)然后你可以接受一堆字符串。您可以将它们传递给函数以检查它们是否是文件

File f = new File(filePathString);
if(f.exists() && !f.isDirectory()) { /* do something */ }
第二段代码

Source

从这里您需要确定文件是否是目录。如果是目录上的调用list()以获取其子文件/目录并重复该过程。