我使用System.setProperty("apple.awt.fileDialogForDirectories", "true");
仅选择文件夹。当我执行new java.io.File(fd.getFile()).getAbsolutePath();
时,它总是返回/Users/<user>/Desktop/<folder>
。假设我选择/用户,它将返回/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");
}
修改我需要完整的路径
答案 0 :(得分:1)
fd.getFile()
返回相对路径,new File()
将创建相对于执行目录的新File
:
默认情况下,
java.io
包中的类始终解析当前用户目录的相对路径名。此目录由系统属性user.dir
命名,通常是调用Java虚拟机的目录。
因此,当您致电.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更容易使用。如果您想尝试JavaFX,还有DirectoryChooser
。
答案 1 :(得分:0)
我明白了!
此
String loc = new java.io.File(fd.getFile()).getAbsolutePath();
需要成为这个
String loc = fd.getDirectory() + fd.getFile();