1

我正在尝试使用 3 个命令行参数,例如:

java program textfile.txt test 3

第一个应该访问一个文本文件,第二个应该打印名称,第三个应该是一个被解析为整数的数字键。

import java.util.Scanner;
import java.io.*;

public class Program
{

    public static void main(String[] args)  throws IOException  
    {

        String textfile=null;
        String outtextfile=null;
        String enteredKey=null;
        for(String parameter: args) {
            textfile = parameter;
            outtextfile = parameter;
            enteredKey = parameter;
        }

        Scanner s = new Scanner(new File(textfile));

        //gets a string to encrypt
        String str = s.nextLine();

        //print outtextfile
        System.out.println(outtextfile);

        //gets a key 
        int key = Integer.parseInt(enteredKey);

但是,该代码会产生此错误:

-bash-4.1$ java Program sample.txt test 3
Exception in thread "main" java.io.FileNotFoundException: 3 (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:138)
        at java.util.Scanner.<init>(Scanner.java:656)
        at Program.main(Caesar.java:19)
4

3 回答 3

0

您遇到了范围界定问题:

textFile 变量仅在 for 循环内可见,在此循环外不可见。你确定你甚至想要一个循环吗?如果是这样,为什么?如果文本文件 String 是第一个参数,则摆脱循环并仅使用第一个参数 args[0]:

public static void main(String[] args) throws IOException {
  if (args.length == 0) {
     // exit program with an error message
  } else {
     String textFile = args[0];
     Scanner scanner = new Scanner(new File(textFile));
     // do work with Scanner
  }
于 2013-10-24T03:08:46.820 回答
0

textfile在循环中声明,这意味着它仅限于循环的范围。您正试图在循环之外访问它。我会提供一个建议,但我不确定你想要完成什么。

于 2013-10-24T03:08:59.997 回答
0

尝试这个 :

String textfile=null;
for(String parameter: args) {

    textfile = parameter;
}


Scanner s = new Scanner(new File(textfile));
于 2013-10-24T03:11:14.670 回答