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

时间:2009-06-28 17:24:56

标签: java file argument-passing

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

4 个答案:

答案 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;
    }
}

我目前正在研究类似的问题,这似乎可以解决问题。