首页 > 解决方案 > 如何从我的项目中获取文件(编写代码的地方)

问题描述

我正在尝试从我的项目文件夹中获取文件(readme.txt)。不知道如何获得项目的位置。当我说项目时,我的意思是我的应用程序代码编写的位置,而不是运行时应用程序。我试过获取绝对路径,相对路径......它总是给我运行时应用程序的文件夹。还尝试了类似 this.getClass() 并尝试提取路径或 System.getProperty("user.dir")。这两个也为我提供了 eclipse.../.../...runtime 应用程序的路径。我正在制作 eclipse 插件,这个文件应该是我插件的一部分,所以当用户点击按钮时,这个文件会打开(它是一些帮助 txt 文件)。这是我打开文件的代码,问题是路径。

/**
 * Help button listener. If button is pressed, help file is opened.
 */
private void listenButtonHelp() {
    buttonHelp.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            if (Desktop.isDesktopSupported()) {
                File helpFile = new File("\\readme.txt");
                helpFile.setReadOnly();
                Desktop desktop = Desktop.getDesktop();
                try {
                    desktop.open(helpFile);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    });
}

标签: javafilepatheclipse-pluginproject

解决方案


这取决于文件在项目中的确切位置。一个干净的地方可能是 ${project.root}/resources,所以创建一个文件夹并将文件放在那里。在 Eclipse 中将其标记为“源文件夹”(项目属性 -> 构建路径 -> 源文件夹)。您当前的设置不是一个好主意,因为 Eclipse 的编译不会将该文件包含在您的发行版中。

现在,当您编译代码时,它会被复制到目标导向器中(bin默认情况下);您可以通过在文件浏览器中打开它来检查。

所以要检查文件是否存在,你可以做

Path filePath = Paths.get("resources", "readme.txt");
System.out.println(Files.exists(filePath));

如果你需要它作为一个File,你可以做

File readmeFile = filePath.toFile();

这将从源项目文件夹中读取文件,因此在您在其他地方运行程序后它不会有太大用处。

为此,您可以使用ClassLoader

URL readmeUrl = ClassLoader.getSystemClassLoader().getResource("resources/readme.txt"));
File readmeFile = new File(readmeUrl.getFile());

推荐阅读