我有这个问题,访问其中一个父目录中的文件
要解释一下,请考虑以下目录结构: -
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
没有修复,并且在所有情况下在运行时都会有所不同,基本上我不想要硬编码。
有什么可能是最简单,更清洁的方法来实现这一目标?
谢谢。
答案 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());