如何接收文件作为命令行参数?
4 回答
只需传递文件的路径,在您的程序内部使用 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
}
}
}
正如您可能已经注意到的,在 Java 中,该main
方法接收一个字符串数组作为参数。您可以为参数指定另一个名称args
,但这是最常用的名称。
该数组args
包含用户在启动程序时键入的值,位于类名之后。例如,要运行名为 Foo 的类,用户必须键入:
[user@desktop ~]$ java Foo
用户在类名之后键入的所有内容都被视为参数。例如:
[user@desktop ~]$ java Foo bar baz
现在你的程序收到了两个参数:bar和baz。这些参数存储在数组中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
在我看来,尝试检测 args == 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;
}
}
我目前正在解决类似的问题,这似乎可以解决问题。