Eclipse:使用参数运行而不是查找文本文件

时间:2013-12-26 23:52:56

标签: java eclipse

我正在尝试在Algorithms (4th ed.)

中运行程序
package binarysearch;
import edu.princeton.cs.introcs.*;
import java.util.Arrays;

public class BinarySearch {
    public static int rank(int key, int[] a) 
    {
    int lo = 0;
    int hi = a.length - 1;
    while (lo <= hi)
    {
        int mid = lo + (hi - lo) / 2;
        if (key < a[mid]) hi = mid - 1;
        else if (key > a[mid]) lo = mid + 1;
        else return mid;
    }
    return -1;
    }

    public static void main(String[] args) 
    {
    int[] whitelist = In.readInts(args[0]);

    Arrays.sort(whitelist);

    while(!StdIn.isEmpty())
    {
        int key = StdIn.readInt();
        if (rank(key, whitelist) == -1)
        StdOut.println(key);
    }
    }
}

运行程序的命令是

% java BinarySearch tinyW.txt < tinyT.txt

我将文本文件添加到我想要运行的包中。

enter image description here

我还添加了运行配置中所需的参数。

enter image description here

但是Eclipse告诉我这个错误信息。

enter image description here

我不确定为什么Eclipse无法打开文件。我手动将文件权限设置为777。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我想你正试图重定向你的输入。看到这个。

所以tinyW.txt是你的程序参数,没关系 但是tinyT.txt不是,你只是想尝试 将tinyT.txt重定向到标准输出。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=155411

似乎Eclipse不支持此功能。

我只是尝试从Eclipse外部运行它。

另见。 Eclipse reading stdin (System.in) from a file

答案 1 :(得分:2)

查看In class的源代码,您似乎默默地吞下了IOException

Could not open tinyW.txt

这导致NullPointerException向下,因为Scanner内部使用的In未初始化。

如果我不得不猜测,此异常的根本原因是FileNotFoundException

不要将文件放在类的包中,而是将其放在项目目录的根目录下。 Eclipse通常从该目录运行您的应用程序,因此所有相对路径(如tinyW.txt)都与该目录相关。

一旦你解决了这个问题,就知道使用shell重定向运算符作为java参数将不会产生预期的效果。 Eclipse正在运行你的应用程序,就像这样

java binarysearch.BinarySearch "tinyW.txt < tinyT.txt"

您可以在其中明显看到<在引号内,因此不会被shell解析器处理。


考虑使用您提供的In课程以外的任何课程。这是一个可怕的混乱,吞噬异常等等。