【问题标题】:Is there a way to get directory path from FileDialog in Java?有没有办法从 Java 中的 FileDialog 获取目录路径?
【发布时间】:2020-06-20 13:48:43
【问题描述】:

我正在用 Java 构建一个简单的程序,而且我一般是 GUI 新手。我正在尝试打开 FileDialog 来选择一个目录并使用它的路径将文件发送到所选目录。但是,它不适用于 FileDialog。

现在,我尝试了 JFileChooser,但它一直挂起,并且不像 FileDialog 那样显示完整的 Mac OS X 对话框,我更喜欢使用后者。下面是我的 FileDialog 的代码。当我从对话框中选择它时,如何获取所选目录并将其打印出来?我花了 2 天时间研究,只是找不到一个好的解决方案,它可以显示完整的 MAC OS X 对话框。

String osName = System.getProperty("os.name");
String homeDir = System.getProperty("user.home");
File selectedPath = null;
final JFileChooser fc = new JFileChooser();
if (osName.equals("Mac OS X")) {
    System.setProperty("apple.awt.fileDialogForDirectories", "true");
    FileDialog fd = new FileDialog(new Frame(), "Choose a file", FileDialog.LOAD);
    fd.setDirectory(homeDir);
    fd.setVisible(true);
    String filename = fd.getDirectory();
    selectedPath = new File(filename);

    if (filename == null) {
        continue;
    } else {
        save_location = filename;
        dout.writeUTF("200"); //Status OK
        dout.flush();
        System.out.println(filename);
    }               
    System.setProperty("apple.awt.fileDialogForDirectories", "true");
}

【问题讨论】:

    标签: java macos swing awt


    【解决方案1】:

    如何获取选定的目录并在选择时将其打印出来 来自对话框?

    使用fd.getFile()获取目录的名称.e.g.

    import java.awt.FileDialog;
    import java.awt.Frame;
    import java.io.File;
    
    public class Main {
        public static void main(String[] args) {
            String osName = System.getProperty("os.name");
            String homeDir = System.getProperty("user.home");
            File selectedPath = null;
            if (osName.equals("Mac OS X")) {
                System.setProperty("apple.awt.fileDialogForDirectories", "true");
                FileDialog fd = new FileDialog(new Frame(), "Choose a file", FileDialog.LOAD);
                fd.setDirectory(homeDir);
                fd.setVisible(true);
                String fileName = fd.getFile();
                System.out.println(fileName);
                File file;
                if (fileName != null) {
                    file = new File(fd.getDirectory() + fileName);
                    System.out.println("You selected "+file.getAbsolutePath());
                } else {
                    System.out.println("You haven't selected anything");
                }
            }
        }
    }
    

    输出:当我选择Desktop然后按Open

    Desktop
    You selected /Users/arvind.avinash/Desktop
    

    注意事项:

    1. 使用fd.getDirectory() 获取所选目录的父目录的路径,即在我的示例中为/Users/arvind.avinash/
    2. 使用fd.getFile() 获取所选目录的名称,即在我的示例中为Desktop
    3. 使用组合的fd.getDirectory() + fd.getFile() 来获取所选目录的完整路径,即在我的示例中为/Users/arvind.avinash/Desktop

    【讨论】:

    • 你不是按照我提到的方式得到结果吗?请让我知道什么不起作用。
    • 虽然它确实返回了该位置,但由于我正在将一个文件移动到该位置,因此我得到了一个 IOException 错误。如果您在 OP 中查看我的代码,如果 if/else 语句,这就是我想要做的
    • 我不知道dout 指的是什么,因此,除非我有更多/完整的代码,否则我无能为力。
    • dout 与 System.out.println 类似,不同之处在于它是将消息写入服务器的套接字。因此,您可以将其视为 Sysout。
    • 你写了save_location = filename; - 这是你指的代码吗? save_location 是什么?我也无法理解,因为你没有给save_location写任何东西。
    猜你喜欢
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 2012-07-30
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多