Eclipse是否可以从文件中读取stdin?
您可以使用一行代码重定向System.in:
System.setIn(new FileInputStream(filename));
请参见System.setIn().
在Eclipse 4.5或更高版本中,启动配置对话框可以将System.in设置为从文件中读取.请参阅此处的公告.
[更新]正如评论中指出的那样,这个答案有误导性,所以我更新了它以纠正错误.[/更新]
在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.
有一个新的Eclipse版本Eclipse 4.5(Mars)修复了这个问题!
这是该功能的公告和说明:http://eclipse.org/mars/noteworthy/#_assigning_stdin_to_a_file
现在可以将Stdin分配给启动配置对话框的" 公用"选项卡中的文件.
正如所料,这是刚刚发布的eclipse 4.5的一个新功能,因此不适用于旧版本.
在运行对话框的"公共"选项卡上,在"标准输入和输出"下面有一个"文件"复选框.但它似乎只是为了输出......
我希望在那里看到2个文件字段,一个用于标准输入,一个用于标准输出和附加选项.
您将需要调整一些代码以使其在eclipse中工作.当我尝试时,上面的其他答案不起作用.另一个我见过要更改Run ..> Common选项卡> Standard Input and Output> 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); }
您仍然需要在Run ..菜单中设置程序参数,如本答案中所述.
对我来说(在Mac上运行,使用Eclipse CDT作为C应用程序)的解决方案是在"运行配置"对话框的"参数"选项卡中的其他参数的末尾添加" 另请查看另一个问题,以获得有关在挂起状态下启动Java程序然后使用Eclipse附加调试器的答案.