Intellij标准输入重定向

4

Idea如何运行批处理配置与Windows中的纯cmd.exe有何不同?

我创建了批处理配置来运行我的Java应用程序。当我运行它时,它会在Idea控制台中显示结果脚本:

cmd.exe /c java -classpath C:\app;C:\app\libs.jar App < input.txt

这个应用程序等待从标准输入中输入。该行代码应该运行并从input.txt文件中读取,但是它却在等待输入。当我在Idea控制台中按^D时,应用程序会打印“没有输入”。同时,当我直接将此启动脚本从Idea控制台复制粘贴到Windows cmd中时,一切都按预期发生,应用程序读取文件并正确完成。
我阅读了stackoverflow的答案,并找到了尝试使用外部工具Idea选项的建议。我尝试以以下方式运行它:
java -classpath C:\app;C:\app\libs.jar App < input.txt

但它仍在等待输入。如果我将文件名作为参数传递给Java应用程序运行配置,它也会等待输入:

"C:\Program Files\Java\jdk1.8.0_92\bin\java"
 -Didea.launcher.port=7533
"-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IDEA\bin"
 -Dfile.encoding=UTF-8
 -classpath "long..long..classpath"
 com.intellij.rt.execution.application.AppMain Col < input.txt

我找到了几个链接(一个两个三个),与标准输入重定向有关。看起来没有办法仅从Idea中进行此操作,需要在代码中实现。 谢谢!

1
我找到的唯一方法是将文件名作为参数传递,并在main方法开头添加以下代码:if(args.length > 1)System.setIn(new FileInputStream(args[1])); - Ivan Bryzzhin
1
@useruser272933 从来不知道 System.setIn。如果你能把它写成答案,我一定会点赞的。 - coding_idiot
已经写成了答案! - Ivan Bryzzhin
1个回答

11

我找到的唯一方法是将文件名作为参数传递给主函数,并添加如下行:

if(args.length > 1)
    System.setIn(new FileInputStream(args[1]));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接