从src目录(Java)打开一个文件

时间:2016-09-05 11:08:45

标签: java pdf intellij-idea

我为我的Java程序编写了一个简短的文档。点击菜单帮助 - >文档操作系统的默认PDF阅读器应打开documentation.pdf

我试图在src/doc中使用Desktop.getDesktop().open(new File("doc/documentation.pdf"));打开位于Controller.java目录中的PDF。

但是,Java找不到该文件。当我使用primaryStage.getIcons().add(new Image("icon/icon_512x512.png"));打开该计划的图标时,它在Main.java中完美运行。

在这里您可以看到我的IntelliJ项目的布局。

src
├── META-INF
├── de
│   └── myapp
│       ├── model
│       │   └── *.java
│       ├── view
│       │   └── *.java
│       ├── Main.java
│       └── Controller.java
├── doc
│   └── documentation.pdf
└── icon
    └── icon_512x512.png

我的筹码

  • IntelliJ 2016.2
  • Java 1.8.0_77

3 个答案:

答案 0 :(得分:1)

如果您的应用程序在jar存档中汇编,第三方应用程序无法访问您应用程序中的src目录。您应该将文件与src分开放置。

当然,java找到图标,因为它是java API。 您可以通过以下方法访问src文件夹中的任何资源:

URL url = getClass().getResource("/path/in/src");
InputStream is = getClass().getResourceAsStream("/path/in/src");

如果你的应用程序没有在JAR中组装 - 尝试提供如下文件的完整路径:

  URL url = getClass().getResource("/path/in/src");
  File file = new File(url.toURI());

答案 1 :(得分:1)

它与new Image("icon/icon_512x512.png")一起使用,因为内部获取来自上下文ClassLoader,而不是new File("doc/documentation.pdf")的情况,如果是相对路径,则从用户工作目录获取它,所以你可以简单地应用相同的逻辑。

ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
URL resource = contextClassLoader.getResource("doc/documentation.pdf");
Desktop.getDesktop().open(new File(resource.toURI()));

答案 2 :(得分:1)

可以使用ClassLoader&n; getResourceAsStream方法加载Classpath中的文件。 因此,您可以尝试生成输入流对象

InputStream is = Controller.class.getClassLoader().getResourceAsStream("doc/documentation.pdf");

生成输入流后,您可以通过Java程序读取它。