在用户目录中打开javafx FileChooser

Ser*_*gio 8 java javafx-2

我试图根据我在这里找到的一个例子在用户目录中打开一个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);
Run Code Online (Sandbox Code Playgroud)

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

Invalid URL passed to an open/save panel: '/Users/my_user'.  Using 'file://localhost/Users/my_user/<etc>/' instead.
Run Code Online (Sandbox Code Playgroud)

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

System.out.println(file.exists()); //true
System.out.println(file.isDirectory()); //true
Run Code Online (Sandbox Code Playgroud)

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

更新:

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

blo*_*p3r 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;
}
Run Code Online (Sandbox Code Playgroud)

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


Kev*_*vin 1

尝试:

String currentDir = System.getProperty("user.home");
file = new File(currentDir);
fc.setInitialDirectory(file);
Run Code Online (Sandbox Code Playgroud)