这应该非常简单,但由于某种原因,我无法让该程序从 .txt 文件获取参数并将其输出。这是我的代码:
public class Lab2 {
static Scanner input = new Scanner(System.in);
public static void main(String[] args)
{
Lab2_CLA.Lab2_CLA(args);
}
}
public class Lab2_CLA {
public static void Lab2_CLA(String[] data)
{
System.out.printf("%s, %s: %s%n", data[1], data[0], data[2]);
}
}
我编译了代码,如果我通过终端给它参数,它就可以工作。例如:
输入“java lab2/Lab2 John Doe 12345678”
打印出:“Doe, John: 12345678”
但是,如何通过在终端中输入以下内容来让它从 .txt 文件读取数据:“java lab2/Lab2 < input.txt”?每当我这样做时,我都会收到以下错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at lab2.Lab2_CLA.Lab2_CLA(Lab2_CLA.java:12)
at lab2.Lab2.main(Lab2.java:34)
最佳答案
输入重定向将文件发送到程序的 stdin(标准输入文件),而不是其命令行参数。在类 Unix 系统上,您可以使用反引号运算符获得所需的效果:
java lab2/Lab2 `cat input.txt`
简而言之,执行反引号之间的文本,并将执行结果插入到其位置。
编辑(回应OP的编辑):
您会遇到越界异常,因为通过重定向,程序不会获取任何命令行参数,但会硬寻址 args 数组的元素 0、1 和 2。
如果由于某种原因,基于反引号的解决方案对您来说不可行,唯一的选择是修改您的程序以读取其标准输入(此处显示的技术 Java file input as command line argument ),或接受文件名作为参数,然后读取该文件文件。
关于java - Java 中的 Ubuntu : Redirection from a . txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7508381/