如何将文件作为命令行参数接收?
答案 0 :(得分:28)
只传递文件的路径,在程序中使用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
}
}
}
答案 1 :(得分:8)
在Java中,main
方法接收一个String数组作为参数,您可能已经注意到了。您可以为参数args
指定另一个名称,但这是最常用的名称。
数组args
包含用户在启动程序后在类名后面键入的值。例如,要运行名为Foo的类,用户必须键入:
[user @ desktop~] $ java Foo
在类名称被认为是参数之后用户键入的所有内容。例如:
[user @ desktop~] $ java Foo bar baz
现在您的程序已收到两个参数: bar 和 baz 。这些参数存储在数组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
酒吧
巴兹
答案 2 :(得分:2)
在我看来,尝试检测args == 0的最佳做法是,如果没有提供参数,则返回有关如何使用程序的帮助命令列表。
答案 3 :(得分: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;
}
}
我目前正在研究类似的问题,这似乎可以解决问题。