【发布时间】:2010-11-06 12:28:50
【问题描述】:
如何接收文件作为命令行参数?
【问题讨论】:
标签: java file argument-passing
如何接收文件作为命令行参数?
【问题讨论】:
标签: java file argument-passing
我看到了其他几个解决方案,但我认为如果你这样做,它们将无法正常工作。例如,提供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;
}
}
我目前正在解决类似的问题,这似乎可以解决问题。
【讨论】:
在我看来,最好的做法是尝试检测 args == 0 并在未提供参数的情况下返回有关如何使用程序的帮助命令列表。
【讨论】:
只是传递文件的路径,在你的程序内部使用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数组,第一个参数可以通过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
酒吧
巴兹
【讨论】: