如何从我的项目(编写代码的地方)获取文件



我正在尝试从我的项目文件夹中获取文件(自述文件.txt(。不知道如何获取项目的位置。当我说项目时,我的意思是编写应用程序代码的位置,而不是运行时应用程序。我试过获取绝对路径,相对路径...它总是给我运行时应用程序的文件夹。还尝试了类似这样的东西.getClass((并尝试提取路径或System.getProperty("user.dir"(。这两个也给了食的路径.../.../...运行时应用。我正在制作 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());

我找到了答案,这对我有用:

/**
* 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 file = null;
Bundle bundle = Platform.getBundle("TestProject");
IPath path = new Path("resources/readme.txt");
URL url = FileLocator.find(bundle, path, null);
/*
* After FileLocator, I get also this, like I commented before:
* D:\eclipse-rcp-oxygen\eclipse\..\..\..\eclipse_oxygen_workspace\
* TestProject\resources\readme.txt and before it didn't work but if 
* you add these lines:
* url = FileLocator.toFileURL(url);
* file = URIUtil.toFile(URIUtil.toURI(url));
* Like in my try bracket, it works. I guess it needs to be 
* converted using URIUtil.
* Now it finds file, and it can be opened, also works for .html files.
*/
Desktop desktop = Desktop.getDesktop();
try {
url = FileLocator.toFileURL(url);
file = URIUtil.toFile(URIUtil.toURI(url));
// file.setReadOnly();
desktop.open(file);
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
});
}

相关内容

  • 没有找到相关文章

最新更新