我试图根据我在这里找到的一个例子在用户目录中打开一个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中,不知道其他平台.
这就是我最终做的事情,它就像一个魅力.
此外,请确保在尝试阅读时可以访问您的文件夹(良好做法).您可以创建该文件,然后检查是否可以读取它.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,但在其他操作系统上可能有所不同(未经测试)
尝试:
String currentDir = System.getProperty("user.home");
file = new File(currentDir);
fc.setInitialDirectory(file);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19509 次 |
| 最近记录: |