Java 使用命令行参数将文件传递给程序
如何接收作为命令行参数的文件?只要传递文件的路径,程序内部就可以使用Java file类来处理它 这将第一个参数作为文件路径:Java 使用命令行参数将文件传递给程序,java,file,argument-passing,Java,File,Argument Passing,如何接收作为命令行参数的文件?只要传递文件的路径,程序内部就可以使用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]); //
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~]$javafoo
用户在类名之后键入的所有内容都被视为参数。例如:
[user@desktop~]$javafoobar baz
现在,您的程序已收到两个参数:bar和baz。这些参数存储在数组args
中。作为常规Java数组,第一个参数可以通过访问args[0]
来检索,第二个参数可以通过访问args[1]
来检索,依此类推。如果您尝试访问无效位置(当用户未键入您期望的内容时),该语句将抛出一个ArrayIndexOutOfBoundsException
,就像对任何数组一样。您可以检查使用args.length
键入的参数数量
那么,回到你的问题上来。用户可以将文件名作为命令行参数通知,您可以通过main
方法(通常称为args
)的参数读取该值。您必须检查他是否真的键入了某个参数(检查数组长度),如果可以,您可以访问args[0]
来读取他键入的内容。然后,您可以基于该字符串创建一个文件
对象,并对其执行您想要执行的操作。始终检查用户是否键入了所需的参数数量,否则在访问数组时会出现异常
下面是如何使用命令行参数的完整示例:
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~]$javafoo没有给出任何参数。
[user@desktop~]$java Foo 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;
}
}
我目前正在处理一个类似的问题,这似乎起到了作用。你能告诉我更多关于“arg[0]”的意思吗?我找不到阅读命令行主题的有用来源。(((请阅读位于的“主方法”一节。它很好地描述了“args”的含义。)是。教程本身是一个很好的来源,可以帮助您找到许多问题的答案。@Johanna:args[0]正在访问位于位置0(数组的第一个元素)的字符串数组args。args作为参数传递给main(string[]args)方法,并且是一个字符串数组,其中包含传递给程序的命令行参数。@Johanna Kathy的建议实际上非常好,我认为您应该开始阅读Java教程以了解一些基础知识。变量“args”在主方法签名中定义,当您键入args[0]时您可以访问数组的第一个元素。由于数组由JVM使用命令行参数填充,因此args[0]将包含第一个参数欢迎使用StackOverflow!我认为海报想知道如果args>0,如何解决它。如果参数为传递给程序的是一个包含空格的文件路径。但是,如果传递给程序的不仅仅是一个文件路径,那么这不是一个好方法。正确的方法是在将文件路径发送给程序之前用引号将其括起来。然后,程序应检查每个参数的类型是否正确,如果没有显示,则选择正确的用例并退出。