如何将文本文件作为参数传递?

时间:2010-07-22 14:25:14

标签: java

我试图编写一个程序来通过args读取文本文件,但是当我运行它时,它总是说文件找不到,即使我把它放在与我运行的main.java相同的文件夹中。 有谁知道我的问题的解决方案或更好的阅读文本文件的方法?

6 个答案:

答案 0 :(得分:8)

请勿在{{1​​}}中使用相对路径。

它将变为相对于当前工作目录,这取决于您运行应用程序的方式,而应用程序又无法从应用程序内部进行控制。这只会导致便携性问题。如果从Eclipse内部运行它,则路径将相对于java.io.File。如果从命令控制台内部运行它,它将相对于当前打开的文件夹(即使您按绝对路径运行代码!)。如果通过双击JAR来运行它,它将相对于JAR的根文件夹。如果您在网络服务器中运行它,它将相对于/path/to/eclipse/workspace/projectname。等等。

始终使用/path/to/webserver/binaries中的绝对路径,没有任何借口。

为了获得最佳的可移植性和减少绝对路径的麻烦,只需将文件放在运行时类路径覆盖的路径中(或将其路径添加到运行时类路径)。这样,您可以按Class#getResource()获取文件,或按Class#getResourceAsStream()获取内容。如果它与当前类位于同一文件夹(包)中,则它已经在类路径中。要访问它,只需执行:

java.io.File

public MyClass() {
    URL url = getClass().getResource("filename.txt");
    File file = new File(url.getPath());
    InputStream input = new FileInputStream(file);
    // ...
}

答案 1 :(得分:1)

尝试给出文件名的绝对路径。

另外,发布代码,以便我们可以看到您正在尝试的内容。

答案 2 :(得分:0)

如果您正在使用Eclipse(或类似的IDE),则问题产生于您的程序从实际源所在的几个目录运行。尝试在项目树中将文件向上移动一两级。

查看this question了解更多详情。

答案 3 :(得分:0)

如果您将文件和使用它的类放在同一个包中,可以使用:

Class A { 


    void readFile (String fileName)  {
    Url tmp = A.class.getResource (fileName); 
    // Or Url tmp = this.getClass().getResource (fileName);

    File tmpFile = File (tmp);

    if (tmpFile.exists()) 
        System.out.print("I found the file.")

    }

} 

如果您阅读有关类加载器的内容,将会有所帮助。

答案 4 :(得分:0)

当您使用Java(通常)打开具有相对文件名的文件时,它会相对于工作目录打开它。

您可以使用

找到流程的当前工作目录
String workindDir = new File(".").getAbsoultePath()

确保从正确的目录运行程序(或更改文件名,使其与您运行它的位置相对)。

答案 5 :(得分:0)

最简单的解决方案是创建一个新文件,然后查看输出文件的位置。这是输入文件的正确位置。