1.FileDialog使用方法:
java 保存文件對話框的使用以及文件過濾器(FileDialog、JFileChooser)
FileDialog fd=new FileDialog(new Frame(),"測試",FileDialog.LOAD);
FilenameFilter ff=new FilenameFilter(){
public boolean accept(File dir, String name) {
if (name.endsWith("jpg")){
return true;
}
return false;
}
};
fd.setFilenameFilter(ff);
fd.setVisible(true);
System.out.println(fd.getDirectory()+fd.getFile());
但在Windows中FileDialog + FilenameFilter無法正常工作, jdoc的原註釋爲:Filename filters do not function in Sun's reference implementation for Microsoft Windows.
2.FileDialog + FilenameFilter可以用JFileChooser + javax.swing.filechooser.FileFilter 來代替,jdoc中的例子如下:
JFileChooser chooser = new JFileChooser();
// Note: source for ExampleFileFilter can be found in FileChooserDemo,
// under the demo/jfc directory in the Java 2 SDK, Standard Edition.
ExampleFileFilter filter = new ExampleFileFilter();
filter.addExtension("jpg");
filter.addExtension("gif");
filter.setDescription("JPG & GIF Images");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(parent);
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You chose to open this file: " +
chooser.getSelectedFile().getName());
}
轉應用實例:
JFileChooser filechooser = new JFileChooser();//創建文件選擇器
filechooser.setCurrentDirectory(new File("."));//設置當前目錄
filechooser.setAcceptAllFileFilterUsed(false);
//顯示所有文件
filechooser.addChoosableFileFilter(new javax.swing.filechooser.FileFilter() {
public boolean accept(File f) {
return true;
}
public String getDescription() {
return "所有文件(*.*)";
}
});
//顯示JAVA源文件
filechooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
public boolean accept(File f) { //設定可用的文件的後綴名
if(f.getName().endsWith(".java")||f.isDirectory()){
return true;
}
return false;
}
public String getDescription() {
return "JAVA源程序(*.java)";
}
});
java--FilenameFilter文件過濾器
java中有一個FilenameFilter的接口,能夠過濾得到指定類型的文件或者目錄,其中必須重寫accept(File file,String path)方法
public class DirFilter implements FilenameFilter{
private String type;
public DirFilter(String tp){
this.type=tp;
}
public boolean accept(File fl,String path) throws Exception{
File file=new File(path);
String filename=file.getName();
return filename.indexOf(type)!=-1;
}
}
具體應用方法:File假如是一個Directory,可以通過list()方法得到這個目錄下所有的文件和目錄的名稱數組,list()方法,一種是沒有參數,一種是實現FilenameFilter接口的參數,例如要獲得一個指定目錄下的所有的java文件,就要使用第二種帶參數的list()方法
public class Test{
public static void main(String[] args){
try{
//指定目錄(“.”表示當前目錄)
File dir=new File(".");
String[] names;
//獲得所有java文件
DirFilter filter=new DirFilter(".java");
names=dir.list(filter);
//打印所有java文件名稱
for(int i=0;i<names.length;i++){
System.out.println("i:"+i+" name:"+names[i]);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
其中這裏還可以將DirFilter類作爲Test的一個匿名內部類來實現,例如:
public class Test{
//type:必須聲明爲final類型,作爲一個匿名內部類,訪問的變量都必須聲明爲final類型
public static FilenameFilter filter(final String type) throws Exception{
return new FilenameFilter(){
public boolean accept(File file,Stirng path){
String filename=new File(path).getName();
return filename.indexOf(type)!=-1;
}
};
}
public static void main(String[] args){
try{
File file=new File(".");
String names[];
names=file.list(filter(".java");
for(int i=0;i<names.length;i++){
System.out.println("i:"+i+" filename:"+names[i]);
}
catch(Exception e){
e.printStackTrace();
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.