繁体   English   中英

Eclipse从文件中读取stdin(System.in)

[英]Eclipse reading stdin (System.in) from a file

Eclipse是否可以从文件中读取stdin?

纯Java

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

System.setIn(new FileInputStream(filename));

请参见System.setIn()

Eclipse配置

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

2015年更新

有一个新的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应用程序)的解决方案是在“运行配置”对话框的“参数”选项卡中的其他参数的末尾添加“<path / to / somefile”。

另请查看另一个问题,以获得有关在挂起状态下启动Java程序然后使用Eclipse附加调试器的答案。

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

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

< ${workspace_loc:/MyProject/file}

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

适合我。

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

1)像这样写run.sh:

你的程序使用params <input.txt

2)在Eclipse配置文件配置中指定

[tab Main] C ++ Run Application = / bin / sh

[tab Arguments] Program Arguments = run.sh

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

令人惊讶的是,这在Eclipse中并不受支持,似乎目前没有计划添加它。 请参阅https://bugs.eclipse.org/bugs/show_bug.cgi?id=155411进行跟进并投票。

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

我做的是创建一个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/build.xml}

基本目录: ${workspace_loc:/Tests}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM