Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用命令行参数将文件传递给程序_Java_File_Argument Passing - Fatal编程技术网

Java 使用命令行参数将文件传递给程序

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]); //

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

只要传递文件的路径,程序内部就可以使用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~]$javafoo

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

[user@desktop~]$javafoobar baz

现在,您的程序已收到两个参数:barbaz。这些参数存储在数组
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,如何解决它。如果参数为传递给程序的是一个包含空格的文件路径。但是,如果传递给程序的不仅仅是一个文件路径,那么这不是一个好方法。正确的方法是在将文件路径发送给程序之前用引号将其括起来。然后,程序应检查每个参数的类型是否正确,如果没有显示,则选择正确的用例并退出。