是否有一个JavaFX的方式来添加一个文件到OS最近的文件?



我有一个显示JavaFX/OpenJFX FileChooser的应用程序,当用户选择一个文件时,它应该出现在OS最近的文件列表中,但它没有发生。

如何创建符号链接或将文件添加到操作系统最近文件中?

谢谢。

目前为止,这个答案涵盖了Windows部分,希望这成为一个合作的答案,其他人填补了macOSUnix缺失的部分:

主要结构:

public interface RecentDocsSaver {
void addToRecentDocs(File file);   
}
public class RecentDocsSaverFactory {
private static final String OS_NAME = System.getProperty("os.name").toLowerCase();
private RecentDocsSaverFactory() {
}
public static RecentDocsSaver getOSInstance() {
if (isWindows()) {
return WindowsRecentDocsSaver.INSTANCE;
}
// TODO: add code for mac and unix
throw new UnsupportedOperationException(OS_NAME + " is not supported");
}
private static boolean isWindows() {
return OS_NAME.contains("win");
}
private static boolean isMac() {
return OS_NAME.contains("mac");
}
private static boolean isUnix() {
return OS_NAME.contains("nix") || OS_NAME.contains("nux") || OS_NAME.contains("aix");
}
}

:

我相信使用JNA是正确的方式来添加文件到Windows的最近列表(其他方式包括访问Windows注册表)。

Shell32库提供了直接将文件添加到最近文件列表的功能。函数为SHAddToRecentDocs(flags, path)

public class WindowsRecentDocsSaver implements RecentDocsSaver {
public static final WindowsRecentDocsSaver INSTANCE = new WindowsRecentDocsSaver();
private WindowsRecentDocsSaver() {
}
public void addToRecentDocs(File file) {
if (file != null) {
WString unicodeStringPath = new WString(file.getPath());
// 3 is for null-terminated Unicode string
Shell32.INSTANCE.SHAddToRecentDocs(3, unicodeStringPath);
}
}
private interface Shell32 extends ShellAPI {
Shell32 INSTANCE = Native.loadLibrary("shell32", Shell32.class);
void SHAddToRecentDocs(int flags, WString file);
}
}

macOS:TODO

Unix:TODO

使用:

File recent = fileChooser.showOpenDialog(window);
if (recent != null) {
RecentDocsSaverFactory.getOSInstance().addToRecentDocs(recent);
}

相关内容

  • 没有找到相关文章

最新更新