在用户目录中打开javafx FileChooser

时间:2013-01-10 11:12:40

标签: java javafx-2

我正在尝试根据我找到here的示例在用户目录中打开javafx FileChooser。

以下是我正在使用的简单代码的片段:

FileChooser fc = new FileChooser();
fc.setTitle("Open Dialog");
String currentDir = System.getProperty("user.dir") + File.separator;
file = new File(currentDir);
fc.setInitialDirectory(file);

但是,我一直在获取此警告(已完成文件路径被截断):

Invalid URL passed to an open/save panel: '/Users/my_user'.  Using 'file://localhost/Users/my_user/<etc>/' instead.

我验证了file对象是添加以下行的现有目录:

System.out.println(file.exists()); //true
System.out.println(file.isDirectory()); //true

然后我不知道为什么我会收到警告信息。

更新

这似乎是JavaFX中的一个错误:https://bugs.openjdk.java.net/browse/JDK-8098160 (您需要创建一个免费的Jira帐户才能查看错误报告)。 这个问题发生在OSX中,不知道其他平台。

3 个答案:

答案 0 :(得分:8)

这就是我最终做的事情,它就像一个魅力。

此外,请确保在尝试阅读时可以访问您的文件夹(良好做法)。您可以创建该文件,然后检查是否可以读取它。如果您无法访问用户目录,则完整代码将如下所示,默认为c:驱动器。

FileChooser fileChooser = new FileChooser();

//Extention filter
FileChooser.ExtensionFilter extentionFilter = new FileChooser.ExtensionFilter("CSV files (*.csv)", "*.csv");
fileChooser.getExtensionFilters().add(extentionFilter);

//Set to user directory or go to default if cannot access
String userDirectoryString = System.getProperty("user.home");
File userDirectory = new File(userDirectoryString);
if(!userDirectory.canRead()) {
    userDirectory = new File("c:/");
}
fileChooser.setInitialDirectory(userDirectory);

//Choose the file
File chosenFile = fileChooser.showOpenDialog(null);
//Make sure a file was selected, if not return default
String path;
if(chosenFile != null) {
    path = chosenFile.getPath();
} else {
    //default return value
    path = null;
}

这适用于Windows和Linux,但在其他操作系统上可能有所不同(未经测试)

答案 1 :(得分:1)

尝试:

String currentDir = System.getProperty("user.home");
file = new File(currentDir);
fc.setInitialDirectory(file);

答案 2 :(得分:-1)

    <ctr:CircularProgressBar x:Name="progressBar" Grid.ZIndex="3"                             
                         HorizontalAlignment="Center"
                         VerticalAlignment="Center"
                         Height="100"
                         Width="100"/>