Ubuntu:从Java中的.txt文件重定向

Ubuntu:从Java中的.txt文件重定向,java,redirect,Java,Redirect,这应该很简单,但由于某些原因,我无法让这个程序从.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 Lab

这应该很简单,但由于某些原因,我无法让这个程序从.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文件读取数据:“JavaLab2/lab2”?无论何时执行此操作,都会出现以下错误:

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的系统上,您可以通过使用backtick操作符获得想要的效果:

java lab2/Lab2 `cat input.txt`
简而言之,将执行反勾号之间的文本,并将执行结果插入其位置

编辑(响应OP的编辑):

您会得到一个越界异常,因为通过重定向,程序不会获得任何命令行参数,但会硬寻址args数组的元素0 1和2


如果由于某种原因,基于反勾号的解决方案不适用于您,则唯一的选择是修改您的程序,以读取其stdin(此处显示技术),或接受文件名作为参数,然后读取该文件。

输入重定向将该文件发送到程序的stdin(标准输入文件),不在其命令行参数中。在类似Unix的系统上,您可以通过使用backtick操作符获得想要的效果:

java lab2/Lab2 `cat input.txt`
简而言之,将执行反勾号之间的文本,并将执行结果插入其位置

编辑(响应OP的编辑):

您会得到一个越界异常,因为通过重定向,程序不会获得任何命令行参数,但会硬寻址args数组的元素0 1和2


如果由于某种原因,基于backtick的解决方案不可能为您提供,那么唯一的选择就是修改您的程序,以读取其stdin(此处显示技术),或者接受文件名作为参数,阅读该文件。

我想你是指示例中的
cat
not
echo
我想你是指示例中的
cat
not
echo