1

次のような 3 つのコマンド ライン パラメータを使用しようとしています。

java program textfile.txt test 3

1 つ目はテキストファイルにアクセスし、2 つ目は名前を出力し、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 に答える