2013-10-24 64 views
1

我想用三個命令行參數,如:如何使用命令行參數訪問文本文件?

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) 
+0

你在一個塊中聲明它,並嘗試訪問該塊之外。 –

回答

0

您正在運行到一個範圍問題:

文本文件變量是唯一可見範圍內的for循環,是看不見的外這個循環。你確定你甚至想要一個循環?如果是的話,爲什麼?如果文本文件的字符串是第一個參數,然後擺脫循環的,並且只使用第一個參數,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 
    } 
+0

已更新。請再看一看 – user2913669

+0

@ user2913669:** again ** - 這是一個單獨的問題,應該在stackoverflow的新問題中提出。 –

+0

nvm我修好了。你的解決方案是正確的。我刪除了for循環並使用了您的解決方案。 – user2913669

0

您聲明textfile在你的循環,這意味着它僅僅限於你的循環範圍。您正試圖在循環之外訪問它。我會提供一個建議,但我不確定你想要完成什麼。

0

試試這個:

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

    textfile = parameter; 
} 


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

@ user2913669:不,它不是。爲什麼是for循環?這個不成立。 –

+0

我更新了它。你能看看我收到的新問題嗎? – user2913669

+0

@ user2913669:這是一個單獨的問題,應該在有關stackoverflow的新問題中提出。 –