【发布时间】:2008-10-09 18:25:03
【问题描述】:
Eclipse 是否可以从文件中读取标准输入?
【问题讨论】:
-
仍然不在 3.5.2 中用于输入。这是作为日食错误提出的吗?
-
@ThorbjørnRavnAndersen bugs.eclipse.org/bugs/show_bug.cgi?id=155411
标签: java eclipse file stdin system.in
Eclipse 是否可以从文件中读取标准输入?
【问题讨论】:
标签: java eclipse file stdin system.in
您可以使用一行代码重定向 System.in:
System.setIn(new FileInputStream(filename));
在 Eclipse 4.5 或更高版本中,启动配置对话框可以将 System.in 设置为从文件中读取。见the announcement here。
【讨论】:
[更新] 正如 cmets 中所指出的,此答案具有误导性,因此我对其进行了更新以纠正错误。 [/更新]
在 bash 或命令提示符下,您可以执行以下操作:
C:\myprogramm < file.txt (Windows) 或 ./myprogramm < file.txt (Linux)
不幸的是,在 Eclipse 中无法获得相同的结果,因为在 Eclipse 中没有将标准输入绑定到文件的选项。相反,您必须在代码中手动打开文件流,然后从中读取。一种方法是使用程序参数来启用它,另一种方法是使用文件参数。请参阅 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) 已修复 the issue!
这是该功能的公告和说明:http://eclipse.org/mars/noteworthy/#_assigning_stdin_to_a_file
Stdin 现在可以在启动的 Common 选项卡中分配给文件 配置对话框。
正如预期的那样,这是刚刚发布的 eclipse 4.5 的一项新功能,因此在旧版本中将无法使用。
【讨论】:
Scanner sc = new Scanner(System.in); 和配置的设置可以完美地工作。确切地说,您可以在 Run > Run Configurations > Common 选项卡中找到上述屏幕。
在运行对话框的“通用”选项卡上,在“标准输入和输出”下有一个“文件”复选框。但它似乎只用于输出......
我希望在那里看到 2 个文件字段,一个用于标准输入,一个用于带有附加选项的标准输出。
【讨论】:
Standard Input and Output的输出
您需要对代码进行一些调整才能使其在 Eclipse 中正常工作。当我尝试时,上面的其他答案不起作用。另一个我看到说要更改 Run..>Common tab>Standard Input and Output>File 仅将 stdout 行为更改为文件,而不是输入。
解决方案是将“-d”选项作为一个可行的解决方案。如果你在程序参数中放入任何东西,它只会被传递到你的 main.js 中。所以你可以在 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 答案中所述。
【讨论】:
public static void main(String [] args) 方法中,那么您不需要检查 args 是否为空 - 它至少包含一个空数组。
我的解决方案(在 Mac 上运行,对 C 应用程序使用 Eclipse CDT)是在“运行配置”的“参数”选项卡中的其他参数末尾添加“
还可以查看此other question 以获取有关在挂起状态下启动 Java 程序然后使用 Eclipse 附加调试器的答案。
【讨论】:
我没有看到使用标准 Eclipse 运行对话框的好方法。但是,您可以使用外部工具启动器来执行此操作,并使用标准的“
这不是自动的,我猜这正是您想要的,但是您可以在启动程序时将 infile 的内容复制并粘贴到 Eclipse 控制台。
【讨论】:
< ${workspace_loc:/MyProject/file}
在调试配置/参数/程序参数中:
对我来说效果很好。
【讨论】:
对于 Linux: 我认为,最简单的方法是编写一个 sh-script。
1) 像这样编写 run.sh:
你的程序带参数 2) 在 Eclipse 配置文件中指定 [tab Main] C++ 运行应用程序 = /bin/sh [tab Arguments] 程序参数 = run.sh 就是这样。当您将运行您的项目时,您将在 Eclipse 控制台中看到脚本的输出。
您可以在 Windows 中执行类似的操作。
【讨论】:
令人惊讶的是,Eclipse 不支持它,而且目前似乎没有添加它的计划。关注https://bugs.eclipse.org/bugs/show_bug.cgi?id=155411 并投票。
如果他们实现了,我会在这里更新。
【讨论】:
我所做的是创建一个 Ant 目标并从 Eclipse 以“运行外部”的形式启动它,步骤如下:
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}
*注意:Tests 是我的 Eclipse 项目的名称
现在您可以通过单击 Run Extenal 工具栏按钮来运行您的项目,并根据需要更改输入或输出文件
【讨论】: