FileSystemView fileSystemView=FileSystemView.getFileSystemView(); File tempFile; if (filepath==null||filepath.isEmpty()||filepath.equals("")) { tempFile=fileSystemView.getHomeDirectory(); }else { tempFile=new File(filepath); } JFileChooser chooser = new JFileChooser(tempFile); //设置选择器 chooser.setMultiSelectionEnabled(true); //设为多选 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);//设置可选择的为文件和文件夹 chooser.addChoosableFileFilter(new javax.swing.filechooser.FileFilter() { @Override public String getDescription() { // TODO Auto-generated method stub return ".xml"; } @Override public boolean accept(File f) { // TODO Auto-generated method stub if (f.getName().toLowerCase().endsWith(".xml")) { return true; } return false; } }); chooser.setDialogTitle("请选择需要修改的文件"); chooser.setPreferredSize(new Dimension(800,1000)); chooser.getActionMap().get("viewTypeDetails").actionPerformed(null); chooser.showOpenDialog(button); //显示打开文件选择框 filepath = chooser.getSelectedFile().getAbsolutePath(); //获取绝对路径 button.setText(filepath); if (chooser.isFileSelectionEnabled()) { new MyJOptionPane("目前仅支持修改xml格式文件,请选择正确的格式"); } if(chooser.isDirectorySelectionEnabled()) { progressBar.setIndeterminate(true); progressBar.setStringPainted(false); progressDialog.setVisible(true); Thread thread=new Thread(() -> { try { XmlHanding.getMyFlie(new File(filepath)); text.setText("已选择文件夹:"+filepath); text.append("\n"+"文件包含"+XmlHanding.fList.size()+"个xml文件"); for(File f:XmlHanding.fList){ text1.append("\n"+f.getAbsolutePath()); } text1.setCaretPosition(0); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); }finally { // 执行完毕后关闭进度对话框 progressDialog.dispose(); } }); thread.start(); } }为什么选择了单个的文件 text还是会写入"已选择文件夹:"+filepath
时间: 2024-04-18 11:30:12 浏览: 131
PHP远程文件下载解压压缩包.zip文件file文件操作类
在你的代码中,当选择了单个文件时,`chooser.isDirectorySelectionEnabled()` 仍然返回 `true`,导致 `text` 文本区域会显示 "已选择文件夹:"+filepath。这是因为在选择文件时,JFileChooser 仍然允许选择文件夹,所以 `chooser.isDirectorySelectionEnabled()` 返回的是选择模式而不是实际选择的类型。
要解决这个问题,你可以在选择单个文件时,检查选择的是文件还是文件夹。以下是修改后的代码:
```java
FileSystemView fileSystemView = FileSystemView.getFileSystemView();
File tempFile;
if (filepath == null || filepath.isEmpty() || filepath.equals("")) {
tempFile = fileSystemView.getHomeDirectory();
} else {
tempFile = new File(filepath);
}
JFileChooser chooser = new JFileChooser(tempFile);
chooser.setMultiSelectionEnabled(true);
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
chooser.addChoosableFileFilter(new javax.swing.filechooser.FileFilter() {
@Override
public String getDescription() {
return ".xml";
}
@Override
public boolean accept(File f) {
if (f.getName().toLowerCase().endsWith(".xml")) {
return true;
}
return false;
}
});
chooser.setDialogTitle("请选择需要修改的文件");
chooser.setPreferredSize(new Dimension(800, 1000));
chooser.getActionMap().get("viewTypeDetails").actionPerformed(null);
int result = chooser.showOpenDialog(button);
if (result == JFileChooser.APPROVE_OPTION) {
File[] selectedFiles = chooser.getSelectedFiles();
if (selectedFiles.length == 1 && selectedFiles[0].isFile()) {
// 单个文件被选择
filepath = selectedFiles[0].getAbsolutePath();
button.setText(filepath);
text.setText("已选择文件:" + filepath);
text.append("\n" + "文件包含 1 个xml文件");
text1.setText(selectedFiles[0].getAbsolutePath());
} else if (selectedFiles.length > 1 || (selectedFiles.length == 1 && selectedFiles[0].isDirectory())) {
// 多个文件或文件夹被选择
filepath = selectedFiles[0].getAbsolutePath();
button.setText(filepath);
text.setText("已选择文件夹:" + filepath);
text.append("\n" + "文件包含 " + selectedFiles.length + " 个xml文件");
for (File f : selectedFiles) {
text1.append("\n" + f.getAbsolutePath());
}
text1.setCaretPosition(0);
}
}
```
在修改后的代码中,我们首先获取用户选择的文件数组 `selectedFiles`,然后根据数组的长度和元素类型判断用户选择的是单个文件还是多个文件/文件夹。根据判断结果,我们相应地更新 `text` 和 `text1` 的文本内容。
阅读全文