Java 打开文件的最佳方式(并确保选择了文件)

Java 打开文件的最佳方式(并确保选择了文件),java,file-io,Java,File Io,我有两种不同的打开文件的方法 第一个使用带有附加文件类型筛选器的FileChoser JFileChooser inFileName = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter("PCF & TXT Files", "pcf", "txt"); inFileName.setFileFilter(filter); Component parent = nul

我有两种不同的打开文件的方法

第一个使用带有附加文件类型筛选器的FileChoser

JFileChooser inFileName = new JFileChooser();
 FileNameExtensionFilter filter = new FileNameExtensionFilter("PCF & TXT Files", "pcf", "txt");

inFileName.setFileFilter(filter);
    Component parent = null;
int returnVal = inFileName.showOpenDialog(parent);`
第二个使用一个JOptionPane,但有一个循环来确保所选目录存在

String filePath;
File directory;

do{
  filePath = JOptionPane.showInputDialog("please enter directory");
   directory = new File(filePath);

    if (directory.exists()==false){
     JOptionPane.showMessageDialog(null,"error with directory");
    }
 }while(directory.exists()==false);
我希望在这两方面都能做到最好。要能够选择一个文件,请使用文件过滤器,并在该目录无效时循环该函数


我尝试在不同的位置切换变量名和各种函数,但似乎无法使循环(“.exists”函数)正常工作。

您只需修改
JFileChooser
代码即可使用循环

JFileChooser inFileName = new JFileChooser();

File file;
boolean valid = false;
while (!valid) {
  int returnVal = inFileName.showOpenDialog(null);
  if (returnVal == JFileChooser.APPROVE_OPTION) {
    file = inFileName.getSelectedFile();
    valid = file.isDirectory();
  else {
    valid = returnVal == JFileChooser.CANCEL_OPTION;
  }
}
值得一提的是,这种事情可能会更好地实现使用

jFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

JFileChooser
的目的是选择文件,所以我肯定会选择前者。但是是否有可能创建所需的循环?当然有可能,但是使用
JFileChooser
将不可能选择不存在的文件。(假设在访问选定的
文件之前,您进行检查以确保返回值等于
JFileChooser.APPROVE_选项
)现在回顾这个问题似乎没有必要。谢谢你的帮助。你为什么要这么做?您可以在您的
JFileChooser
实例上调用
setFileSelectionMode(仅限JFileChooser.DIRECTORIES)
。我是舒尔,我可以
$mkdir mydir.txt
FileNameExtensionFilter
将对作为目录的文件返回false。@JeanWaghetti-刚刚选中,
FileNameExtensionFilter
对目录返回true,而不考虑名称或扩展名。如果您只对选择目录感兴趣,为什么要使用
FileNameExtensionFilter
,如果文件是目录,则返回TRUE。