0

我想制作一个简单的命令行 java 应用程序,它获取与应用程序的 jar 文件位于同一目录中的文件名作为参数,以便我可以从中读取。但是我收到了 FileNotFoundException。这是我的代码:

public static void main(String[] args) {
    if (args.length == 0) {
        System.out.println("Give the name of the input file as argument.");
    } else if (args.length > 1) {
        System.out.println("Only one input file is allowed");
    } else {
        try {
            BufferedReader in = new BufferedReader(new FileReader(args[0]));
            System.out.println("File found");
        } catch (FileNotFoundException e) {
            System.out.println("Could not find file " + args[0]);
        }
    }
}

所以假设我在同一个目录中有一个名为 a.txt 的 txt 文件和 myApp.jar 文件。我启动 cmd 和 cd 到这个特定的目录,然后输入:

java -jar myApp.jar a.txt

我得到“找不到文件a.txt”

我究竟做错了什么?

编辑:在考虑之后我猜该文件没有找到,因为它应该与类文件位于同一目录中,换句话说,在 jar 中。所以我的问题是,当它在 jar 文件之外时如何访问它?

4

2 回答 2

1

当您启动应用程序时,“当前”目录将由环境决定。要找出它的位置,请将错误输出行更改为:

System.out.println("Could not find file " + (new File(args[0])).getCanonicalPath());

(您可能必须将 throws IOException 添加到您的 main() 声明中才能编译上述内容)。

如果您想访问类路径(或 jar)内的资源,请使用ClassLoader.getResourceAsStream - 然后您将使用InputStreamReader在返回的 InputStream 周围包装一个 Reader 。

于 2013-01-05T20:53:22.757 回答
0

检查这个......(你发现了什么)

public static void main(String[] args) throws IOException {
    if (args.length == 0) {
        System.out.println("Give the name of the input file as argument.");
    } else if (args.length > 1) {
        System.out.println("Only one input file is allowed");
    } else {
        try {
            BufferedReader in = new BufferedReader(new FileReader(args[0]));
            System.out.println("File found");
        } catch (FileNotFoundException e) {
            // Finding the dir
            String current = new java.io.File( "." ).getCanonicalPath();
            System.out.println("Current dir: " + current);
            System.out.println("Current user.dir: " + System.getProperty("user.dir"));
            //
            System.out.println("Could not find file " + args[0]);
        }
    }
}
于 2013-01-05T23:46:18.023 回答