gpt4 book ai didi

在 Mac 中,Java filedialog 始终前置/Users//Desktop

转载 作者:行者123 更新时间:2023-12-01 09:37:49 24 4
gpt4 key购买 nike

我正在使用System.setProperty("apple.awt.fileDialogForDirectories", "true");仅选择文件夹。当我执行new java.io.File(fd.getFile()).getAbsolutePath();时,它总是返回 /Users/<user>/Desktop/<folder> 。假设我选择/Users,它将返回 /Users/<user>/Desktop/Users 。我该如何修复它?

代码:

if (System.getProperty("os.name").toLowerCase().contains("mac")) {
System.setProperty("apple.awt.fileDialogForDirectories", "true");

FileDialog fd = new FileDialog(this, "Choose a folder to save streams", FileDialog.LOAD);
fd.setDirectory(saveStreamLocTB.getText());

fd.setVisible(true);

String loc = new java.io.File(fd.getFile()).getAbsolutePath();
if (loc != null) {
p.setSaveStreamLoc(loc);
saveStreamLocTB.setText(loc);
}

System.setProperty("apple.awt.fileDialogForDirectories", "false");
}

编辑我需要完整路径

最佳答案

fd.getFile() 返回相对路径,new File()将创建一个新的文件相对于执行目录:

By default the classes in the java.io package always resolve relative pathnames against the current user directory. This directory is named by the system property user.dir, and is typically the directory in which the Java virtual machine was invoked.

因此,当您调用 .getAbsolutePath() 时,您正在使用的路径已经被破坏。

调用 fd.getDirectory() + fd.getFile() 可以,但您应该避免使用字符串连接来构造文件路径 - 这就是 two-argument File constructor 的作用。是为了,所以改为:

String loc = new File(fd.getDirectory(), fd.getFile()).getAbsolutePath();
<小时/>

也就是说,Java 7 引入了更加灵活和强大的 Path类,只要有可能,我建议在 File 上使用它。同样,Swing 包括 cross-platform file-chooser dialog这比 Apple 旧的 awt API 更容易使用。还有DirectoryChooser如果您想尝试 JavaFX。

关于在 Mac 中,Java filedialog 始终前置/Users/<user>/Desktop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38707522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com