2011-08-26 28 views
17

我创建了一个接口,我想添加一个允许用户打开文件的函数。我正在使用AWT。我不明白如何使用FileDialog。你可以给我一个例子或一个很好的链接来解释这个吗?如何使用FileDialog?

+1

参见['FileDialogTest'](http://stackoverflow.com/questions/2914627/file-explorer-using-java-how-to-go-about-it/2914733#2914733)。 – trashgod

回答

3

有几个代码示例here演示如何将它用于各种不同的任务。

也就是说,您可能需要退一步,检查awt是否是这里工作的最佳任务。当然有一些合理的理由将它用在swing/swt之类的东西上,但如果你刚开始使用Swing,IMO会是更好的选择(有更多的组件,更多的教程,它是一个更广泛需求的库来处理。这些天)

+1

链接导致的所有三个代码示例都是完全相同的......(只是说,如果它们看起来相似,那么您并不疯狂......) – ArtOfWarfare

26

一个完整的代码示例,用文件过滤:

FileDialog fd = new FileDialog(yourJFrame, "Choose a file", FileDialog.LOAD); 
fd.setDirectory("C:\\"); 
fd.setFile("*.xml"); 
fd.setVisible(true); 
String filename = fd.getFile(); 
if (filename == null) 
    System.out.println("You cancelled the choice"); 
else 
    System.out.println("You chose " + filename); 
+1

这有助于很多,它比JFileChooser更快,遗憾的是它并没有很好地处理异常情况,'零'字让我沮丧。 – iKlsR

7

要通过@TheBronx添加到答案 - 对我来说,​​不工作在OS X上这工作:

fd.setFilenameFilter(new FilenameFilter() { 
    @Override 
    public boolean accept(File dir, String name) { 
     return name.endsWith(".txt"); 
    } 
}); 

或作为Java 8 lambda:

fd.setFilenameFilter((dir, name) -> name.endsWith(".txt")); 
+1

不能在Ubuntu上工作。这解决了它。 –

+1

伟大的解决方案,但它不会在Windows上工作。 https://docs.oracle.com/javase/7/docs/api/java/awt/FileDialog.html#setFilenameFilter%28java.io.FilenameFilter%29 –

+1

@KenoClayton True。我认为跨平台解决方案是使用'setFile'和'setFilenameFilter'。 –