【问题标题】:How to check if first command line argument is a directory within your current directory in JAVA?如何检查第一个命令行参数是否是 JAVA 中当前目录中的目录?
【发布时间】:2014-10-21 16:26:48
【问题描述】:

我目前可以使用下面的代码列出我当前目录的内容。但是,我想添加一个命令行参数来列出当前目录中目录的内容。我无法检查 args[0] 是否是我当前目录中的目录。这是我当前的代码。顶部有效,直到我到达评论的 NOT WORKING 部分。如何检查 arg[0] 是否是当前目录中的目录,如果是,则像第一部分一样打印出它的内容。我担心 File f = new File(args[0]) 也会出错。感谢您的所有帮助。

public class DirSort {



// START MAIN
public static void main(String[] args) {

    // if no command line arguments, list directory
    if (args.length==0){
    File f = new File(".");
    File[] files = f.listFiles();
    DateFormat df = new SimpleDateFormat("MMM dd HH:mm:ss");

        // for each File in array, print out
        for (int i =0; i<files.length; i++){
            System.out.printf("%8d %s %s%n", files[i].length(), df.format(files[i].lastModified()), files[i].getName());
            System.exit(0);
        }

    //NOT WORKING
    if(args.length==1){
        if (!args[0].isDirectory)
        System.exit(1);

    File f = new File(args[0]);
    File[] files = f.listFiles();
    DateFormat df = new SimpleDateFormat("MMM dd HH:mm:ss");

        // for each File in array, print out
        for (int i =0; i<files.length; i++){
            System.out.printf("%8d %s %s%n", files[i].length(), df.format(files[i].lastModified()), files[i].getName());
            System.exit(0);
        }

    }

}    

【问题讨论】:

  • 您应该阅读来自编译器的错误消息。它告诉您错误是什么以及在哪里。 args[0] 是一个字符串。字符串没有名为 isDirectory 的字段。
  • 是的,这就是问题所在。如何检查 args[0] 是否为目录?如果是,创建一个新的 File 对象来列出它的内容,就像我对当前目录所做的那样。
  • File 类型的对象允许检查文件是否为目录。您可以从字符串创建文件类型的对象。除了错误消息,您还应该阅读您正在使用的类的 javadoc。

标签: java


【解决方案1】:

String 类中没有方法 isDirectory。您需要创建一个File 对象,然后检查它是否为目录:

public static void main(String[] args) {

// if no command line arguments, list directory
if (args.length==0){
File f = new File(".");
File[] files = f.listFiles();
DateFormat df = new SimpleDateFormat("MMM dd HH:mm:ss");

    // for each File in array, print out
    for (int i =0; i<files.length; i++){
        System.out.printf("%8d %s %s%n", files[i].length(), df.format(files[i].lastModified()), files[i].getName());
        System.exit(0);
    }

//NOT WORKING
if(args.length==1){


File f = new File(args[0]);
if (!f.isDirectory())
    System.exit(1);
File[] files = f.listFiles();
DateFormat df = new SimpleDateFormat("MMM dd HH:mm:ss");

    // for each File in array, print out
    for (int i =0; i<files.length; i++){
        System.out.printf("%8d %s %s%n", files[i].length(), df.format(files[i].lastModified()), files[i].getName());
        System.exit(0);
    }

}

}    

【讨论】:

  • 这不起作用...它编译但不列出命令行参数中 args[0] 中指定的目录的内容。
  • 哦,没关系,我发现了这个错误。必须从第二个 for 循环中取出 System.exit(0)。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2011-04-18
  • 2014-01-07
  • 1970-01-01
  • 2011-03-13
  • 2017-12-30
  • 1970-01-01
  • 2023-04-01
  • 2022-11-01
相关资源
最近更新 更多