java - 如何从我的项目中获取文件(编写代码的地方)
问题描述
我正在尝试从我的项目文件夹中获取文件(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();
}
}
}
});
}
解决方案
这取决于文件在项目中的确切位置。一个干净的地方可能是 ${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());
推荐阅读
- powershell - 命令间歇性地作为作业的作业打印状态运行
- python - r 子集按组对数据帧进行分层;子集每组的最大观察量,只要真假布尔值是平衡的
- angular - 未能在“历史”上执行“replaceState”
- css - 在 Vuetify 框架中覆盖渲染的 CSS 类
- android - 如何获得初始视图以加载到 android 应用程序中?
- asp.net-core - 在 ConfigureServices 中按环境获取连接字符串
- python - ElementNotVisibleException:Python + Selenium,Web 上的登录凭据
- android - Android - 使用 FragmentPagerAdapter 和旋转设备时的 NPE
- python-3.x - QPushButton 聚焦行为
- c++ - 如何在 C++ 中为数组分配不同的索引值