在java中从父目录创建文件的File对象

时间:2011-03-11 10:44:09

标签: java io


   我有这个问题,访问其中一个父目录中的文件 要解释一下,请考虑以下目录结构: -

C:/Workspace/Appl/src/org/abc/bm/TestFile.xml  
C:/Workspace/Appl/src/org/abc/bm/tests/CheckTest.java

在CheckTest.java中,我想为TestFile.xml

创建一个File实例
public class Check {
    public void checkMethod() {
        File f = new File({filePath value I want to determine}, "TestFile.xml");
    }
}

我尝试了getAbsolutePath()getParent()等一些事情,但是有点复杂,坦率地说我觉得我搞砸了。
我不想在创建"C:/Workspace/Appl/src/org/abc/bm"实例时使用File的原因是因为C:/Workspace/Appl没有修复,并且在所有情况下在运行时都会有所不同,基本上我不想要硬编码。
有什么可能是最简单,更清洁的方法来实现这一目标?

谢谢。

6 个答案:

答案 0 :(得分:3)

在这种情况下,您应该从Classpath加载它。

在CheckTest.java中,尝试

FileInputStream fileIs = new FileInputStream(CheckTest.class.getClassLoader().getResourceAsStream("org/abc/bm/TestFile.xml");

答案 1 :(得分:1)

使用System.getProperty获取基础目录或在应用程序启动期间设置base.dir

java -Dbase.dir=c:\User\pkg 

System.getProperty("base.dir");

并使用

System.getProperty("file.separator");

答案 2 :(得分:1)

  

实现这一目标的最简单,最简洁的方法是什么?

要访问静态资源,请使用:

URL urlToResource = this.getClasS().getResource("path/to/the.resource");

如果预计资源会发生变化,请将其写入user.home的子目录,以便日后查找。

答案 3 :(得分:0)

首先,您无法在运行时获得对源文件路径的引用。

但是,您可以访问包含在类路径中的resrources(您编写.class文件的位置)。

通常,你的编译器会将你的srouce目录中包含的xml文件复制到build目录中,所以最后你可能会得到这样的结果:

C:/Workspace/Appl/classes/org/abc/bm/TestFile.xml  
C:/Workspace/Appl/classes/org/abc/bm/tests/CheckTest.class

然后,在您的类路径指向已编译的类根目录的情况下,您可以使用ClassLoader.getResource方法(或等效的Class.getResource()方法)从此目录中获取资源。

public class Check {
    public void checkMethod() {
        java.net.URL fileURL=this.getClass().getResource("/org/abc/bm/tests/TestFile.xml");

        File f=new File( fileURL.toURI());

    }
}

答案 4 :(得分:0)

可以这样做:

String pathOfTheCurrentClass = this.getClass().getResource(".").getPath();        
File file = new File(pathOfTheCurrentClass + "/..", "Testfile.xml");

String pathOfTheCurrentClass = this.getClass().getResource(".").getPath();
File filePath = new File(pathOfTheCurrentClass);
File file = new File(filePath.getParent(), "Testfile.xml");

但正如Tomas Naros指出的那样,这会为你提供位于构建路径中的文件。

答案 5 :(得分:-2)

你试过吗

URL some=Test.class.getClass().getClassLoader().getResource("org/abc/bm/TestFile.xml");
File file = new File(some.getFile());