【问题标题】:Using command-line argument for passing files to a program使用命令行参数将文件传递给程序
【发布时间】:2010-11-06 12:28:50
【问题描述】:

如何接收文件作为命令行参数?

【问题讨论】:

    标签: java file argument-passing


    【解决方案1】:

    我看到了其他几个解决方案,但我认为如果你这样做,它们将无法正常工作。例如,提供C:\Program Files\file.dat 作为命令行参数。那就不行了,因为你在新建文件的时候只取args[0]

    因此,您实际上应该执行以下操作,将给定参数的所有部分连接起来,然后从中创建一个文件:

    import java.io.File;
    
    public class SomeProgram {
        public static void main(String[] args) {
            String current = "";
            File lastFile = null;
            for(String str : args){
                File newFile = new File((current + " " + str).trim());
                if(newFile.exists()){
                    lastFile = newFile;
                }
            current += " " + str;
            }
            File yourFile = lastFile;
        }
    }
    

    我目前正在解决类似的问题,这似乎可以解决问题。

    【讨论】:

    • 如果传递给程序的参数是包含空格的文件路径,这是一个很好的解决方案。但是,如果向程序传递的不仅仅是文件路径,这不是一个好方法。正确的方法是在将文件路径发送到程序之前用引号将其括起来。然后程序应该检查每个参数的类型是否正确,如果不显示正确的用例并退出。
    【解决方案2】:

    在我看来,最好的做法是尝试检测 args == 0 并在未提供参数的情况下返回有关如何使用程序的帮助命令列表。

    【讨论】:

    • 欢迎来到 StackOverflow!我认为张贴者想知道如果 args > 0 实际上如何解决它。
    【解决方案3】:

    只是传递文件的路径,在你的程序内部使用Java File类来处理它

    这将第一个参数作为文件路径:

    import java.io.File;
    
    public class SomeProgram {
        public static void main(String[] args) {
            if(args.length > 0) {
                File file = new File(args[0]);
    
                // Work with your 'file' object here
            }
        }
    }
    

    【讨论】:

    • 你能告诉我更多关于“arg[0]”的意思吗?我找不到阅读命令行主题的有用资源。:((((
    • 阅读java.sun.com/docs/books/tutorial/getStarted/application/…的“主要方法”部分。它很好地描述了“args”是什么。本教程本身是一个很好的资源,可以帮助您找到许多问题的答案。
    • @Johanna:args[0] 正在访问位置 0(数组的第一个元素)的字符串数组 args。 args 作为参数传递给 main(String[] args) 方法,是一个字符串数组,其中包含传递给程序的命令行参数。
    • @Johanna Kathy 的建议其实非常好,我认为你应该开始阅读 Java 教程来了解一些基础知识。变量 'args' 在主方法签名中定义,当您键入 args[0] 时,您将访问数组的第一个元素。由于该数组由 JVM 使用命令行参数填充,因此 args[0] 将包含第一个
    【解决方案4】:

    在 Java 中,main 方法接收一个字符串数组作为参数,您可能已经注意到了。你可以给参数args取另一个名字,但这是最常用的一个。

    数组args 包含用户在启动程序时键入的值,位于类名之后。例如,要运行名为 Foo 的类,用户必须键入:

    [user@desktop ~]$ java Foo

    用户在类名之后键入的所有内容都被视为参数。例如:

    [user@desktop ~]$ java Foo bar baz

    现在您的程序已收到两个参数:barbaz。这些参数存储在数组args 中。作为一个普通的Java数组,第一个参数可以通过args[0]获取,第二个参数可以通过args[1]获取,以此类推。如果你试图访问一个无效的位置(当用户没有输入你所期望的),该语句将抛出一个ArrayIndexOutOfBoundsException,就像它对任何数组一样。您可以使用args.length 查看输入了多少参数。

    所以,回到你的问题。用户可以将文件名作为命令行参数通知,您可以通过main 方法的参数读取该值,通常称为args。你必须检查他是否真的输入了一些东西作为参数(检查数组长度),如果没问题,你访问args[0] 来阅读他输入的内容。然后,您可以基于该字符串创建一个File 对象,然后用它做您想做的事情。始终检查用户是否输入了您期望的参数数量,否则访问数组时会出现异常。

    这是一个如何使用命令行参数的完整示例:

    public class Foo {
        public static void main(String[] args) {
            if (args.length == 0) {
                System.out.println("no arguments were given.");
            }
            else {
                for (String a : args) {
                    System.out.println(a);
                }
            }
        }
    }
    

    该类将解析用户通知的参数。如果他没有输入任何内容,该类将打印消息“没有给出任何参数”。如果他通知任意数量的参数,这些参数将显示在屏幕上。因此,使用我在此答案中给出的两个示例运行此类,输出将是:

    [user@desktop ~]$ java Foo
    没有给出任何参数。
    [user@desktop ~]$ java Foo bar baz
    酒吧
    巴兹

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 2020-01-01
      • 2010-10-04
      • 2017-11-19
      • 1970-01-01
      • 2018-06-22
      相关资源
      最近更新 更多