Eclipse能否从文件中读取stdin?
你可以通过一行代码重定向System.in:
System.setIn(new FileInputStream(filename));
在Eclipse 4.5或更高版本中,启动配置对话框可以将System.in设置为从文件读取。请参见此处的公告。
有一个新的Eclipse版本,Eclipse 4.5 (Mars),已经修复了这个问题!
以下是该功能的公告和描述:http://eclipse.org/mars/noteworthy/#_assigning_stdin_to_a_file
现在可以在启动配置对话框的公共(Common)选项卡中将标准输入(stdin)分配给文件。
正如预期的那样,这是刚发布的Eclipse 4.5的一项新功能,因此无法在旧版本上运行。
Scanner sc = new Scanner(System.in);
和配置的设置可以无缝地工作。确切地说,您可以在“运行”>“运行配置”>“常规”选项卡中找到上述屏幕。 - Keith OYS[更新] 因为评论中指出了这个答案是误导性的,所以我已经更新了它来纠正错误。[/更新]
在Bash或命令提示符中,您可以执行以下操作:
C:\myprogramm < file.txt
(Windows)或 ./myprogramm < file.txt
(Linux)
不幸的是,在Eclipse中无法实现相同的结果,因为没有选项将stdin绑定到文件。相反,您将不得不在代码中手动打开一个文件流,然后从中读取。一种方法是使用程序参数来启用它,并使用另一个参数来传递文件。请参见Scott的答案,了解您需要添加什么样的代码来解析程序参数数组中的-d选项。
当您想要指向Eclipse项目内部的某个文件时,您需要小心确保获取正确的位置并使用${resource_loc:}变量:
-d ${resource_loc:/MyProject/file}
当然,你也可以使用绝对路径:
-d path/to/file or -d C:\path\to\file
resource_loc参数是指您的工作区。也就是您存储所有eclipse项目的文件夹。从那里,您仍然需要引用您的项目文件夹,然后才能加载您想要的文件。
根据您使用的操作系统是Linux还是Windows,您可能需要调整斜线方向。
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);
}
您仍需要按照这个答案中的说明,在“运行”菜单中设置程序参数。
public static void main(String [] args)
方法中,那么你不需要检查args
是否为null - 它将至少包含一个空数组。 - Rob Gilliam< ${workspace_loc:/MyProject/file}
在调试配置 / 参数 / 程序参数中:
对我来说很有效。
令人惊讶的是,Eclipse并不支持此功能,似乎也没有当前添加它的计划。请查看https://bugs.eclipse.org/bugs/show_bug.cgi?id=155411以跟踪和投票。
如果他们实现了它,我会在这里更新。