我编写了以下内容,用于扫描几行代码作为字符串并将其解析为整数。但在我的main方法中,我使用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();
}
答案 0 :(得分:2)
String[] args
方法的main()
参数是命令行参数。如果你把文件名放在命令行上,它就会在那个数组中。
答案 1 :(得分:1)
这取决于你的意思“使用命令行参数代替接收文件”
如果你的意思是从命令行中获取参数(字面意思),那么用Scanner
上迭代的东西替换Scanner.parseInt
和String[]
调用,并使用{{1}解析调用。但这会给你一个非用户友好的命令行语法,所以你可能想要添加一些“选项”或其他什么
如果您希望能够从命令行指定输入参数的来源,请尝试以下操作:
Integer.parseInt(String)
这个(或类似的东西)将允许您的应用程序从命名文件或标准输入读取输入。在后一种情况下,您可以像这样运行它(在Linux上)
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.
答案 2 :(得分:0)
您可以使用p.parser(args[0]);
,当然您需要检查args
是否包含某些字符串。即你已经通过了一个论证,只需要做if (args.length > 0)
。
答案 3 :(得分: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();
}
}
现在您可以将文件名作为命令行传递给程序,您的代码应该选择它。
请注意,java中的数组索引默认从0开始,因此,要访问数组的第一个元素(命令行参数数组),您应该使用[0]。
如需更多提示,请点击以下链接。