通过main函数参数输入文件名(args [0])

时间:2017-09-27 06:55:32

标签: java netbeans

编辑:运行我正在使用的代码" java filename.java input1.txt"它是否正确?

我正在创建一个程序,我必须将字符串标记为单独的单词,并且该字符串位于文本文件中。我必须通过命令行参数(args [0]等)在终端中指定文本文件名。如果我通过路径指定,但是当我尝试使用args [0]进行操作时,我能够扫描并打印文本文件的内容,但它似乎无法工作。我正在使用网豆。我将附上我的代码部分:

public static void main(String[] args) {   
    try {
        File f = new File(args[0]);   
        //using this commented out section using paths works File f = new 
        //File("NetBeansProjects/SentenceUtils/src/input1.txt");
        Scanner input = new Scanner(new FileInputStream(f));

        while(input.hasNext()) {
            String s = input.next();
            System.out.println(s);
        }
    } catch(FileNotFoundException fnfe) {
        System.out.println("File not found");
    }

    SentenceUtils s = new SentenceUtils();
}

1 个答案:

答案 0 :(得分:0)

java filename.java input1.txt

对于运行java程序不正确,您需要编译*.java文件以获取*.class文件,然后您可以运行该文件:

java filename input1.txt

假设您的类在默认包中,并且您在编译命令的输出目录中运行该命令,或者使用该类的完全限定类名,即包括包名。例如,如果您的类位于包foo/bar/baz(源文件夹中的子文件夹)中并且包含声明package foo.bar.baz;,那么您需要像这样指定您的类:

java [-cp  your-classpath] foo.bar.baz.filename input1.txt

要找到input1.txt,它必须位于运行命令的同一目录中。

your-classpath是由系统相关分隔符(Windows的;,Linux的:,...)或java命令的归档分隔的目录列表用于查找要运行指定的类及其依赖项。

NetBeansProjects/SentenceUtils/src/input1.txt是相对路径。

File f = new File("NetBeansProjects/SentenceUtils/src/input1.txt");

如果这样做,则意味着当前工作目录(即计算所有相对路径的目录)是名为NetBeansProjects的教区。

您获得FileNotFoundException,因为您的文件应该在

NetBeansProjects/input1.txt

要找出正在运行的程序的当前工作目录,可以添加以下语句:

System.out.println(new File("").getAbsolutePath());

input.txt放在该目录中,然后找到它。

或者,您可以传递输入文件的绝对路径。绝对路径是一种路径,可用于从本地文件系统上运行程序的任何位置定位文件。例如:

    java -cp <your-classpath> <fully-qualified-name-of-class> /home/john/myfiles/myprogects/...../input1.txt

总而言之,您需要知道/做的事情如下:

  • 程序类及其包(文件名)的位置
  • 输入文件的位置(input.txt)
  • 相应地传递正确的参数