8

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

4

4 回答 4

33

只需传递文件的路径,在您的程序内部使用 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
        }
    }
}
于 2009-06-28T17:27:35.127 回答
8

正如您可能已经注意到的,在 Java 中,该main方法接收一个字符串数组作为参数。您可以为参数指定另一个名称args,但这是最常用的名称。

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

[user@desktop ~]$ java Foo

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

[user@desktop ~]$ java Foo bar baz

现在你的程序收到了两个参数:barbaz。这些参数存储在数组中args。作为一个普通的Java数组,第一个参数可以通过access来获取args[0],第二个参数可以通过access来获取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
bar
baz

于 2009-06-28T18:00:05.053 回答
2

在我看来,尝试检测 args == 0 并返回有关如何使用程序的帮助命令列表(如果没有提供参数)的最佳实践。

于 2011-10-27T12:26:24.293 回答
0

我看到了其他几个解决方案,但我认为如果你这样做,它们将不起作用。例如,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;
    }
}

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

于 2014-12-15T19:55:44.167 回答