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

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

纯Java

您可以用一行代码redirectSystem.in:

System.setIn(new FileInputStream(filename)); 

参见System.setIn() 。

Eclipseconfiguration

在Eclipse 4.5或更高版本中,启动configuration对话框可以将System.in设置为从文件读取。 看到这里的公告 。

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

[更新]正如在评论中指出的,这个答案是误导,所以我已经更新它来纠正错误。 [/更新]

在bash或命令提示符下,您可以执行: C:\myprogramm < file.txt (Windows)或./myprogramm < file.txt (Linux)

不幸的是,在Eclipse中,不可能达到相同的结果,因为没有选项将stdin绑定到eclipse中的文件。 相反,您将不得不在代码中手动打开文件stream,然后从中读取文件stream。 一种方法是使用程序参数来启用它,另一种方法是使用file参数。 请参阅Scott的回答,您需要添加哪些代码来parsing程序参数数组中的-d选项。

当你想在Eclipse Project中指向一些文件时,你需要小心地获取位置并使用$ {resource_loc:}variables:

 -d ${resource_loc:/MyProject/file} 

当然你也可以把绝对path:

 -d path/to/file or -d C:\path\to\file 

resource_loc参数引用您的工作区。 这就是你所有的eclipse项目所存储的文件夹。从那里你仍然需要引用你的项目文件夹,然后是你想要加载的文件。

您可能需要调整斜线方向,具体取决于您使用Linux还是Winodws。

2015年更新

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

这是该function的公告和说明: http : //eclipse.org/mars/noteworthy/#_assigning_stdin_to_a_file

现在可以将Stdin分配给启动configuration对话框的“ 公共”选项卡中的文件。 在这里输入图像描述

正如所料,这是刚刚发布的Eclipse 4.5的一个新function,因此不适用于旧版本。

在运行对话框的“公共”选项卡上,在“标准input和输出”下,有一个“文件”checkbox。 但它似乎只是为了输出…

我期望在那里看到两个文件字段,一个用于标准input,一个用于标准输出选项。

你需要调整一下你的代码才能在eclipse中运行。 上面的其他答案在我尝试时不起作用。 另一个我见过说改变运行..>公共选项卡>标准input和输出>文件只改变了标准输出行为的文件,而不是input。

解决办法是采取“-d”选项,以一个可行的解决scheme。 如果你在程序参数中join了任何东西,它只会被传入你的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 ..菜单中设置您的程序参数,如本答案所述。

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

还要检查这个问题的答案,包括启动一个处于挂起状态的Java程序,然后用Eclipse连接debugging器。

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

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

 < ${workspace_loc:/MyProject/file} 

在debuggingconfiguration/参数/程序参数:

对我很好。

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

1)像这样写run.sh:

你的程序使用params <input.txt

2)在Eclipseconfiguration文件configuration中指定

[主标签] C ++运行应用程序= / bin / sh

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

而已。 当你运行你的项目时,你会在eclipse控制台中看到脚本的输出。 你可以在Windows中做类似的事情。

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

我会在这里更新,如果他们执行它。

我所做的就是创build一个Ant目标,并将其从Eclipse的“Run External”启动,其步骤如下:

  • 我有一个input文件读取: res\in.txt和一个输出: res\out.txt
  • 用你需要的目标创build一个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使用以下configuration:

Section Main

Buildfile: ${workspace_loc:/Tests/build.xml}

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

*注:testing是我的Eclipse项目的名称

现在,您可以通过单击“运行Extenal”工具栏button来运行项目,并根据需要更改input或输出文件