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



编辑:为了运行我的代码,我正在使用"java文件名.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();
}
java filename.java input1.txt

对于运行 Java 程序是不正确的,您需要编译*.java文件以获得一个*.class文件,然后您可以像这样运行:

java filename input1.txt

假设您的类在默认包中,并且您在 compile 命令的输出目录中运行该命令,或者使用该类的完全限定类名,即包含包名。例如,如果您的类位于包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

综上所述,您需要了解/做的是以下内容:

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

最新更新