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或输出文件