2013-12-15 117 views
1

我写了以下内容,将几行代码作为字符串扫描并解析为整数。但在我的主要方法中,我使用p.letsReadIn来读取文件。有谁知道我可以如何将其转换为使用命令行参数来代替文件?因此,而不是让用户更改p.letsReadIn(“ReadMuah.txt”);每次只能使用命令行来读取文件。从命令行获取参数

public void letsReadIn(String filename) throws FileNotFoundException { 
     int x; 
     Scanner scan = new Scanner(new File(filename)); 

     StringTokenizer st; 
     String nextLine = scan.nextLine(); 

     st = new StringTokenizer(nextLine); 

     x = Integer.parseInt(st.nextToken()); 

     nextLine = scan.nextLine(); 

     st = new StringTokenizer(nextLine); 

     y= Integer.parseInt(st.nextToken()); 

     nextLine = scan.nextLine(); 

     st = new StringTokenizer(nextLine); 

     z= Integer.parseInt(st.nextToken()); 

     for (int i = 0; i < x; i++) { 
      nextLine = scan.nextLine(); 
      st = new StringTokenizer(nextLine); 
      listing.add(Integer.parseInt(st.nextToken())); 
     } 

     scan.close(); 
    } 
    public static void main(String[] args) throws FileNotFoundException { 

     BagItems p = new BagItems(); 
     p.letsReadIn("ReadMuah.txt"); 
     p.StartBagging(); 

    } 

回答

2

String[] args的参数为main()方法是命令行参数。如果你把文件名放在命令行上,它会在那个数组中。

0

您可以使用p.parser(args[0]);,当然您需要检查args是否包含一些字符串。即你已经通过了一个参数,只是做if (args.length > 0)

0

使用args []中的第一个元素代替代码中的硬编码文件名。

public static void main(String[] args) throws FileNotFoundException { 
    BagItems p = new BagItems(); 
    if (args.length > 0) 
    { 
     p.parser(args[0]); 
     p.StartBagging(); 
    } 
    else 
    { 
     p.parser("hard-coded-file.txt"); 
     p.StartBagging(); 
    } 
} 

现在你可以传递文件名作为命令行程序,你的代码应该选择它。

请注意,数组索引从默认情况下从0开始,所以,要访问数组的第一个元素(命令行参数数组),您应该使用[0]。

有关更多提示,请点击下面的链接。

how to accept values using command line argument in java

1

这取决于你的意思“使用命令行参数,而不是采取在文件”

如果你的意思是在命令行(直译)取参数本身然后更换ScannerScanner.parseInt调用与迭代String[]的东西,并使用Integer.parseInt(String)调用解析。但是这会给你一个非用户友好的命令行语法,所以你可能想要添加一些“选项”或其他东西

如果你的意思是你希望能够指定输入参数的来源在命令行,然后再尝试这样的事:

InputStream in; 
if (args.length > 0) { 
    in = new FileInoputStream(args[0]); 
} else { 
    in = System.in; 
} = System.in 
.... 
Scanner scan = new Scanner(input); 
// Read as before. 

本(或类似的东西)将允许你的应用程序来读取输入或者从一个指定的文件,或者从标准输入。在后一种情况下,你可以像这样运行它(在Linux上)

$ java ... my.Program << EOF 
1 
2 
... 
EOF