Eclipse是否可以从文件中读取stdin?
答案 0 :(得分:58)
您可以使用一行代码重定向System.in:
System.setIn(new FileInputStream(filename));
请参阅System.setIn()。
在Eclipse 4.5或更高版本中,启动配置对话框可以将System.in设置为从文件中读取。请参阅the announcement here。
答案 1 :(得分:12)
[更新] 正如评论中指出的那样,这个答案有误导性,所以我更新了它以纠正错误。的 [/更新] 强>
在bash或命令提示符下,您可以执行以下操作:
C:\myprogramm < file.txt
(Windows)或./myprogramm < file.txt
(Linux)
不幸的是,在Eclipse中无法实现相同的结果,因为没有选项将stdin绑定到eclipse中的文件。相反,您必须在代码中手动打开文件流,然后从中读取。一种方法是使用程序参数启用它,另一个使用file参数。请参阅Scott的答案,了解需要添加哪种代码来解析程序参数数组中的-d选项。
当您想要指向Eclipse项目中的某个文件时,需要注意使位置正确并使用$ {resource_loc:}变量:
-d ${resource_loc:/MyProject/file}
当然你也可以提出绝对路径:
-d path/to/file or -d C:\path\to\file
resource_loc参数指的是您的工作区。这是存储所有eclipse项目的文件夹。从那里你仍然需要引用你的项目文件夹,然后是你想要加载的文件。
您可能需要调整斜杠方向,具体取决于您使用Linux还是Winodws。
答案 2 :(得分:10)
有一个新的Eclipse版本,Eclipse 4.5(Mars)已修复the issue!
这是该功能的公告和说明:http://eclipse.org/mars/noteworthy/#_assigning_stdin_to_a_file
现在可以将Stdin分配到启动的 Common 标签中的文件 配置对话框。
正如预期的那样,这是刚刚发布的eclipse 4.5的一个新功能,因此不适用于旧版本。
答案 3 :(得分:8)
在运行对话框的“常用”选项卡上,在“标准输入和输出”下面有一个“文件”复选框。但它似乎只是为了输出...
我希望在那里看到2个文件字段,一个用于标准输入,一个用于带有附加选项的标准输出。
答案 4 :(得分:6)
您需要调整一些代码才能在eclipse中使用它。当我尝试时,上面的其他答案不起作用。另一个我见过要改变Run ..&gt; Common tab&gt; Standard Input and Output&gt; File只将stdout行为更改为文件,而不是输入。
解决方案是将“-d”选项转换为可行的解决方案。如果你在程序参数中放入任何东西,它就会被传递到你的main中。所以你在main开头可以做的就是这样:
Scanner in;
if (args!=null && args.length>0 && args[0].equals("-d")){
in = new Scanner(new File(args[1]));
} else {
in = new Scanner(System.in);
}
您仍然需要按照this answer中的说明在Run ..菜单中设置您的程序参数。
答案 5 :(得分:5)
我的解决方案(在Mac上运行,使用Eclipse CDT作为C应用程序)是在“运行配置”的“参数”选项卡中的其他参数的末尾添加“&lt; path / to / somefile” “对话。
同时检查此other question以获取有关在挂起状态下启动Java程序然后使用Eclipse附加调试器的答案。
答案 6 :(得分:4)
我没有看到使用标准Eclipse Run对话框执行此操作的好方法。但是,您可以使用外部工具启动程序执行此操作,并使用标准的“&lt; infile”语法或调用.bat / .sh脚本为您执行此操作。
它不是自动化的,这是我猜你想要的,但你可以复制&amp;启动程序时,将infile的内容粘贴到Eclipse控制台。
答案 7 :(得分:3)
< ${workspace_loc:/MyProject/file}
在调试配置/参数/程序参数中:
适合我。
答案 8 :(得分:2)
对于linux: 我认为,最简单的方法是编写一个sh脚本。
1)像这样编写run.sh:
你的程序使用params &lt; input.txt中
2)在Eclipse配置文件配置中指定
[tab Main] C ++ Run Application = / bin / sh
[tab Arguments] Program Arguments = run.sh
就是这样。当您运行项目时,您将在eclipse控制台中看到脚本的输出。 你可以在Windows中做类似的事情。
答案 9 :(得分:1)
令人惊讶的是Eclipse中不支持这一点,似乎目前没有计划添加它。请参阅https://bugs.eclipse.org/bugs/show_bug.cgi?id=155411进行投票。
我会在这里更新,如果他们确实实现了它。
答案 10 :(得分:0)
我所做的是创建一个Ant目标并从Eclipse中将其作为“Run External”启动,以下是步骤:
res\in.txt
和一个输出:res\out.txt
使用您需要的目标创建build.xml
(这只是一个示例):
<project basedir="." default="run" name="Tests">
<target name="clean">
<delete dir="bin"/>
</target>
<target name="compile">
<mkdir dir="bin"/>
<javac srcdir="src" destdir="bin" includeantruntime="false"/>
</target>
<target name="build" depends="clean,compile"/>
<target name="run" depends="build">
<java classname="Main" input="res\in.txt" output="res\out.txt" classpath="bin" />
</target>
</project>
在Eclipse中转到:Run->External Tools->External Tools Configurations->Ant Build-> New Launch Configuration
使用以下配置:
Section Main
构建文件:${workspace_loc:/Tests/build.xml}
基本目录:${workspace_loc:/Tests}
*注意:测试是我的Eclipse项目的名称
现在,您可以通过单击Run Extenal工具栏按钮来运行项目,并根据需要更改输入或输出文件