68

Eclipse 是否可以从文件中读取标准输入?

4

11 回答 11

59

纯Java

您可以使用一行代码重定向 System.in:

System.setIn(new FileInputStream(filename));

请参阅System.setIn()

Eclipse 配置

在 Eclipse 4.5 或更高版本中,启动配置对话框可以将 System.in 设置为从文件中读取。请参阅此处的公告

启动配置对话框的常用选项卡

于 2008-10-09T18:49:46.767 回答
12

[更新]正如评论中指出的那样,这个答案具有误导性,因此我对其进行了更新以纠正错误。[/更新]

在 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。

于 2011-05-14T19:44:50.407 回答
12

2015 年更新

有一个新的 Eclipse 版本,Eclipse 4.5 (Mars) 已经解决了这个问题

这是该功能的公告和描述:http: //eclipse.org/mars/noteworthy/#_assigning_stdin_to_a_file

现在可以将标准输入分配给启动配置对话框 的通用选项卡中的文件。在此处输入图像描述

正如预期的那样,这是刚刚发布的 eclipse 4.5 的一项新功能,因此在旧版本中将无法使用。

于 2015-07-08T08:50:18.237 回答
8

在运行对话框的“通用”选项卡上,在“标准输入和输出”下有一个“文件”复选框。但它似乎只用于输出......

我希望在那里看到 2 个文件字段,一个用于标准输入,一个用于带有附加选项的标准输出。

于 2008-10-09T19:39:49.923 回答
6

您需要对代码进行一些调整以使其在 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);
    }

您仍然需要在 Run.. 菜单中设置程序参数,如答案中所述。

于 2012-06-08T23:26:50.343 回答
5

我的解决方案(在 Mac 上运行,对 C 应用程序使用 Eclipse CDT)是在“运行配置”对话框的“参数”选项卡中的其他参数末尾添加“< path/to/somefile”。

还要检查this other question以获取涉及在挂起状态下启动Java程序然后使用Eclipse附加调试器的答案。

于 2011-05-18T08:37:37.643 回答
4

我没有看到使用标准 Eclipse 运行对话框的好方法。但是,您可以使用外部工具启动器来执行此操作,并使用标准的“< infile”语法或调用 .bat/.sh 脚本为您执行此操作。

它不是自动化的,这正是我猜你想要的,但你可以在启动程序时将 infile 的内容复制并粘贴到 Eclipse 控制台。

于 2008-10-09T19:17:09.970 回答
4
< ${workspace_loc:/MyProject/file}

在调试配置/参数/程序参数中:

很适合我。

于 2012-06-03T17:52:24.380 回答
2

对于 linux:我认为,最简单的方法是编写一个 sh-script。

1)像这样写run.sh:

你的程序带有 params < input.txt

2) 在 Eclipse 配置文件中指定

[选项卡主] C++ 运行应用程序 = /bin/sh

[选项卡参数] 程序参数 = run.sh

而已。当您将运行您的项目时,您将在 Eclipse 控制台中看到脚本的输出。您可以在 Windows 中执行类似的操作。

于 2013-11-04T12:45:14.067 回答
1

令人惊讶的是,Eclipse 不支持它,而且目前似乎没有添加它的计划。请参阅https://bugs.eclipse.org/bugs/show_bug.cgi?id=155411关注并投票。

如果他们确实实施了,我会在这里更新。

于 2013-03-09T21:24:44.520 回答
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}

*注意:Tests 是我的 Eclipse 项目的名称

现在您可以通过单击 Run Extenal 工具栏按钮来运行您的项目,并根据需要更改输入或输出文件

于 2013-03-25T23:33:38.157 回答