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

问题描述 投票:0回答:11

Eclipse 可以从文件中读取 stdin 吗?

java eclipse file stdin system.in
11个回答
59
投票

纯Java

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

System.setIn(new FileInputStream(filename));

参见 System.setIn()

Eclipse 配置

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

Common tab of Launch Configuration dialog


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。


11
投票

2015年更新

有一个新的 Eclipse 版本,Eclipse 4.5 (Mars),它已经修复了问题

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

Stdin 现在可以分配给启动的 Common 选项卡中的文件 配置对话框。 enter image description here

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


8
投票

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

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


6
投票

您需要对代码进行一些调整才能使其在 Eclipse 中运行。 当我尝试时,上面的其他答案不起作用。我见过的另一个说法是更改“运行..”>“通用”选项卡>“标准输入和输出”>“文件”仅更改了文件的标准输出行为,而不是输入。

解决方案是采用“-d”选项来获得可行的解决方案。 如果您在程序参数中添加任何内容,它就会被传递到您的 main.c 文件中。 所以你在

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);
}

您仍然需要在“运行”菜单中设置程序参数,如this答案中所述。


5
投票

我的解决方案(在 Mac 上运行,对 C 应用程序使用 Eclipse CDT)是添加“< path/to/somefile" at the end of other arguments in the "Arguments" tab of the "Run Configuration" dialog.

另请检查此其他问题,以获取涉及在挂起状态下启动 Java 程序然后使用 Eclipse 附加调试器的答案。


4
投票

我没有看到使用标准 Eclipse Run 对话框的好方法。 但是,您也许可以使用外部工具启动器来完成此操作,并且可以使用标准的“< infile" syntax or call a .bat/.sh script to do it for you.

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


4
投票
< ${workspace_loc:/MyProject/file}

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

对我来说效果很好。


2
投票

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

1)像这样编写run.sh:

带有参数的程序 < input.txt

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

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

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

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


1
投票

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

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


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

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

© www.soinside.com 2019 - 2024. All rights reserved.