Java NIO文件系统

时间:2014-06-30 23:09:13

标签: java eclipse swing filesystems nio

我正在尝试创建一个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

1 个答案:

答案 0 :(得分:0)

您可以将.替换为./../以切换到父目录或您想要的任何参考路径。 p保留绝对路径,您可以移除toAbsolutePath()以获取referencePath

Path p = FileSystems.getDefault().getPath(".").toAbsolutePath();
System.out.println(p);