我正在尝试创建一个Java Swing应用程序,在其中我将一些图像文件和CSV文件存储在子目录中
com/p/d/resources/project/MyProject
在上面的项目中,将有其他子目录,我将在其中存储图像和CSV文件。如何以无缝方式访问上面的目录。即使我将这个项目作为JAR(我最终会这样做)运行,或者在Eclipse上,它应该允许我以java.nio.file.Path或java.io.File的形式访问上面的目录。
我知道我可以创建一个filsystem来迭代JAR,但是当我在Eclipse中运行它时,相同的代码不起作用。以下是我用于JAR文件场景的代码:
String projectLocationPath = ApplicationProperties
.get(PhaserDesktopConstants.PROJECT_LOCATION_PATH);
CodeSource src = MainController.class.getProtectionDomain()
.getCodeSource();
if (src != null) {
URL jar = src.getLocation();
FileSystem fs = FileSystems.newFileSystem(jar.toURI().normalize(), null);
Path projectDirectory = fs.getPath(projectLocationPath);
if (!Files.isDirectory(projectDirectory)) {
return null;
}
}
PhaserDesktopConstants.PROJECT_LOCATION_PATH表示我在上面给出的路径。我希望在JAR和没有JAR的情况下运行上述代码。 我得到了以下路径
file:/D:/shailesh/technical/work/eclipse_ws/Phaser%20Desktop/bin/
当我在Eclipse中运行它并调用
时 FileSystems.newFileSystem(..)
用这个给我异常
java.lang.IllegalArgumentException: Path component should be '/'
关于SO上的一些帖子我尝试了硬编码并改变了
的路径 file:/D:/shailesh/technical/work/eclipse_ws/Phaser%20Desktop/bin/
到
file:///D:/shailesh/technical/work/eclipse_ws/Phaser%20Desktop/bin/
file://D:/shailesh/technical/work/eclipse_ws/Phaser%20Desktop/bin/
file:///shailesh/technical/work/eclipse_ws/Phaser%20Desktop/bin/
file://shailesh/technical/work/eclipse_ws/Phaser%20Desktop/bin/
但没有效果。
只是更新: 当我在eclipse中调试我的JAR时,它给了我跟随路径作为CodeSource的位置:
file:/D:/shailesh/technical/PhaserD.jar
然而错误是无法创建文件系统的。我的操作系统是Windows 7. JDK 7
答案 0 :(得分:0)
您可以将.
替换为./../
以切换到父目录或您想要的任何参考路径。 p
保留绝对路径,您可以移除toAbsolutePath()
以获取referencePath
。
Path p = FileSystems.getDefault().getPath(".").toAbsolutePath();
System.out.println(p);