我在 netbeans 中使用了一个自定义按钮,它引用了打开项目中的一个文件。但是,我在根据打开的项目检索该文件的位置时遇到问题。因此,我需要一些可以返回我正在处理的项目的位置或我正在使用的文件的位置的东西。
本质上,我需要能够调用
String projectLocation = methodOrVarToGetOpenProjectLocation();
我不能使用当前目录,因为我使用按钮创建的插件与我正在使用的项目不在同一个地方。
有什么想法吗?
我在 netbeans 中使用了一个自定义按钮,它引用了打开项目中的一个文件。但是,我在根据打开的项目检索该文件的位置时遇到问题。因此,我需要一些可以返回我正在处理的项目的位置或我正在使用的文件的位置的东西。
本质上,我需要能够调用
String projectLocation = methodOrVarToGetOpenProjectLocation();
我不能使用当前目录,因为我使用按钮创建的插件与我正在使用的项目不在同一个地方。
有什么想法吗?
您可以像这样找到项目目录:
Lookup lookup = Utilities.actionsGlobalContext();
Project project = lookup.lookup(Project.class);
FileObject projectDir = project.getProjectDirectory();
String projectLocation = projectDir.getPath();
这些类都来自 NetBeans API:Utilities
、Lookup
、Project
和FileObject
如果您不想只使用当前项目,则可以使用OpenProjects
该类。您可以获得第一个打开的项目,如下所示:
Project project = OpenProjects.getDefault().getOpenProjects()[0];
根据您的按钮的作用,使用Main Project可能有意义:
Project mainProject = OpenProjects.getDefault().getMainProject();
Dave Webb 的上述回答负责获取项目位置。但是,如果在单击按钮之前没有直接选择所需的项目,则存在一个问题,它不会将该项目视为主项目。
例如,在文件中进行编辑然后单击按钮将不再找到项目,因为项目名称不是最后单击的内容。
我发现了一些获取打开文件名的代码:
TopComponent activeTC = TopComponent.getRegistry().getActivated();
DataObject dataLookup = activeTC.getLookup().lookup(DataObject.class);
String filePath = FileUtil.toFile(dataLookup.getPrimaryFile()).getAbsolutePath();
project
在为空的情况下(在他的第一个代码块的第二行之后),我在 if 语句中使用了它。
这为我提供了我正在使用的文件的路径,然后花了很短的时间处理字符串来获取项目的位置。