黑马程序员技术交流社区
标题:
关于File中文件过滤器的问题,请教高手!
[打印本页]
作者:
晓风妮子
时间:
2013-4-21 17:04
标题:
关于File中文件过滤器的问题,请教高手!
查了API,有两个文件过滤器,File[] listFiles(FileFilter filter)和File[] listFiles(FilenameFilter filter),这两有什么区别吗?请举个例子详细说一下好吗?
作者:
乘鱼飞
时间:
2013-4-21 19:54
本帖最后由 乘鱼飞 于 2013-4-21 19:57 编辑
这两个文件过滤器非常相似,都是接口,就是里面的参数不同,
FilenameFilter是文件名过滤器,FileFilter是文件过滤器。
个人感觉FilenameFilter文件名过滤器,查找文件更精确
代码举例:
(1)//测试File[] listFiles(FileFilter filter)
import java.io.*;
public class TestFilter {
public static void main(String[] args) {
File f=new File("E:/");
File[] files=f.listFiles(new FileFilter()
{
@Override
public boolean accept(File pathname) {
try {
if(pathname.getCanonicalPath().endsWith(".txt"))
{
return true;
}
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
}) ; //匿名内部类
for(File file :files)
{
System.out.println(file);
}
}
}
/*输出结果:
E:\cccutil.txt
E:\codepage.txt
E:\license-kr.txt
E:\license.txt
E:\readme.txt
*/
(2)//测试File[] listFiles(FilenameFilter filter)
public class TestFilter {
public static void main(String[] args) {
File f=new File("E:/");
File[] files=f.listFiles(new FileFilter()
{
@Override
public boolean accept(File pathname) {
try {
if(pathname.getCanonicalPath().endsWith("xml.stx"))
{
return true;
}
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
});
for(File file :files)
{
System.out.println(file);
}
}
}
/*输出结果:
E:\xml.stx
*/
作者:
孟群峰
时间:
2013-4-23 11:05
1,File[] listFiles(FileFilter filter),
2,File[] listFiles(FilenameFilter filter)
如果你仅仅想根据文件名进行过滤,则用第二种就足够了,
可是你还想根据其他的文件属性进行过滤,比如文件大小,文件的创建时间,等等,则用第一种
第一种要比第二种强大。
我只写了测试第一种代码,不是很严谨,只是为了说明问题,
功能是:过滤文件我的F盘下文件大小大于100M的文件。
public class TestFilter {
public static void main(String[] args) {
File f=new File("F:/");
File[] files=f.listFiles(new FileFilter()
{
@Override
public boolean accept(File pathname) {
if(pathname.length()>1024*1024*100)//文件大小大于100M的过滤出来
{
return true;
}
return false;
}
}) ;
for(File file :files)
{
System.out.println(file);
}
}
}
复制代码
作者:
陈湘林
时间:
2013-4-23 11:29
java.io 接口 FileFilter
文件过滤器类
package com;
import java.io.File;
import javax.swing.filechooser.FileFilter;
//继承FileFilter
public class MyFileFilter extends FileFilter{
//路径,文件,是否在文件选择器中显示
public boolean accept(File f) {
//传进来的文件名,全部变为小写字母,方便对比
String filename=f.getName().toLowerCase();
if(f.isDirectory()){//判断是否是文件夹
return true;
}
if(filename.endsWith(".txt")){
return true;
}
return false;
}
//文件类型的描述
public String getDescription() {
return "文本文件(*.txt)";
}
}
窗体
//文件选择框
private void filechoose(){
//添加文件过滤器
this.fc.addChoosableFileFilter(new MyFileFilter());
int result=this.fc.showOpenDialog(null);
if(result==JFileChooser.APPROVE_OPTION){
File file=this.fc.getSelectedFile();//返回文件选择框选择的文件对象
System.out.println("文件名:"+file.getName());
System.out.println("文件路径:"+file.getPath());
}
}
复制代码
作者:
黄玉昆
时间:
2013-4-24 22:54
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2