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


Answers:


59

纯Java

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

System.setIn(new FileInputStream(filename));

请参阅System.setIn()

Eclipse配置

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

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


12

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

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

不幸的是,在Eclipse中无法获得相同的结果,因为没有选择将stdin绑定到eclipse中的文件。相反,您将不得不在代码中手动打开文件流,然后从中读取文件流。一种方法是使用程序参数启用它,另一种方法是使用file参数。有关解析程序参数数组中的-d选项所需添加的代码类型,请参见Scott的答案。

当您想指向Eclipse Project中的某个文件时,需要小心正确地定位位置并使用$ {resource_loc:}变量:

-d ${resource_loc:/MyProject/file}

当然,您也可以设置绝对路径:

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

resource_loc参数引用您的工作空间。那是所有eclipse项目的存储文件夹。从那里,您仍然必须先引用项目文件夹,然后再引用要加载的文件。

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


4
运行配置->参数中的'-d'选项似乎不起作用。至少不是在Eclipse 3.7.1中
Sagar Jauhari'4

1
您还需要在程序中添加某种逻辑来处理这些参数,否则仅此一项是行不通的。
Scott

4
这个答案与std.in无关。它教您打开文件,而不是阅读std.in。为什么错误和误导性的答案会收到这么多的赞誉?
2013年

12

2015年更新

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

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

现在可以在启动配置对话框的“常用”选项卡中将Stdin分配给文件。 在此处输入图片说明

不出所料,这是刚刚发布的eclipse 4.5的新功能,因此在较旧的版本中将无法使用。


2
这是正确的答案-只要您生活在2015年:)
astrojuanlu

截至2016年,答案也正确。Eclipse Neon 4.6使读取输入文件(.in)与从控制台读取用户输入完全相同。因此,使用Scanner sc = new Scanner(System.in);已配置的设置可以完美地工作。确切地说,您可以在“运行”>“运行配置”>“通用”选项卡中找到以上屏幕。
基思·奥伊斯

8

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

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


这仅适用于将文件名放入Standard Input and Output
Wallter 2012年

6

您将需要对代码进行一些调整,以使其在eclipse中正常工作。当我尝试时,以上其他答案无效。我见过另一句话,说要更改“运行”。.>“常用”选项卡>“标准输入和输出”>“文件”仅将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);
    }

您仍然需要按照答案中的说明在“运行..”菜单中设置程序参数。


假设您的代码在public static void main(String [] args)方法中,则无需检查是否args为空-它将最少包含一个空数组。
Rob Gilliam 2013年

5

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

还要检查另一个问题,以获得涉及在挂起状态下启动Java程序,然后使用Eclipse附加调试器的答案。


1
这也适用于带有CDT 7.0的Linux。可能也适用于旧版本。
稳定狗

这在带有Eclipse Java EE Indigo SR 1的Linux上不起作用:(
同名,2012年

4

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

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


4
< ${workspace_loc:/MyProject/file}

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

对我来说效果很好。


一种有趣的可能性。我很好奇您正在使用哪个版本的Eclipse,以及在哪个系统上使用。我已经在Mac OS X 10.8上使用Eclipse Juno进行了尝试,重定向操作符<从字面上解释为命令行参数。
内森·瑞安

适用于Java开发人员的Eclipse IDE,版本:Juno发行版,内部版本ID:20120614-1722,在此处运行于Mac OS X 10.7.5上,这对我不起作用。:(
Eddified

在Windows 7 x64中使用Juno Service Release 2对我也不起作用
D_Guidi

我使用Windows 7 x64上ADT附带的Eclipse。
弗拉德2014年

2

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

1)像这样编写run.sh:

您的程序与参数 <input.txt

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

[tab Main] C ++运行应用程序= / bin / sh

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

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


1

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

如果他们实现了,我将在这里更新。


我不知道如何为Eclipse做出贡献,但是这个错误非常令人讨厌,以至于我会研究代码以自己添加一个标准输出规范框。唯一的问题是,我需要将其用于明天到期的代码,所以我没有时间。尽管如此,这仍是我下一个严肃的编码项目的议程-除非其他人首先参与。(认为这是一个挑战,其他开发者打我一拳。)
史蒂夫

@studgeek我猜想该错误已得到验证和修复,并且计划在版本:Mars(4.5)Build ID:I20141208-2000中添加该功能。我对吗?
Sunil Kumar

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项目的名称

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.