`
08284008
  • 浏览: 51140 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

FilenameFilter文件的过滤,线程对文件夹的监控

阅读更多

实现FilenameFilter接口

import java.io.File;
import java.io.FilenameFilter;
/**
 * 过滤指定的文件
 * 可以在遍历文件时,选择需要过滤的文件;弹出对话框选择文件时,过滤文件
 * @author 
 *
 */
public class FileFilter implements FilenameFilter {

	private boolean isDoc(String fileName)
	{
		if(fileName.endsWith(".docx"))
		{
			return false;
		}
		return true;
	}
	@Override
	public boolean accept(File dir, String name) {
		// TODO Auto-generated method stub
		return isDoc(name);
	}

}

 

测试类

import java.io.File;

public class TestFilterFile {

	public static void main(String[] args) {
		File file =new File("D:"+File.separator+"developer");
		File[] files=file.listFiles(new FileFilter());
		for (File file2 : files) {
			System.out.println(file2.getName());
		}
	}
}

 

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

/**
 * 用线程监控文件目录的变化
 * 
 * @author 时间 2013-4-11 下午10:28:05
 * @version 1.0 </br>
 */
public class FilesMonitor implements Runnable
{
	private String filePath = "D:\\testFile";
	/**
	 * map : 存放目录中文件,key:文件名称+最后修改时间 value:File对象
	 */
	private static Map<String, File> map = new HashMap<String, File>();

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Runnable#run()
	 */
	public void run()
	{
		while( true )
		{
			try
			{
				Thread.sleep( 3000 );
				fileMonitor();
			}
			catch( Exception e )
			{
				// TODO: handle exception
			}
		}
	}

	public void fileMonitor()
	{
		File[] files = getFiles( filePath, null );
		if( files != null && files.length > 0 )
		{
			String fName = "";
			// if( files.length != map.size() )
			// {
			if( map.size() == 0 )
			{
				for( File file : files )
				{
					System.out.println( file.lastModified() );
					fName = file.getName() + file.lastModified();
					map.put( fName, file );
					System.out.println( "新增文件: " + fName );
				}
			}
			else
			{
				if( map.size() > files.length )
				{
					List<String> removeName = new ArrayList<String>();
					Iterator<String> iter = map.keySet().iterator();
					int j = 0;
					while( iter.hasNext() )
					{
						String key = iter.next();
						if( key != null && key.length() > 0 )
						{
							for( File file : files )
							{
								fName = file.getName() + file.lastModified();
								if( fName.equals( key ) )
								{
									j = 1;
									break;
								}
							}
							if( j != 1 )
							{
								removeName.add( key );
								map.remove( key );
							}
							j = 0;
						}
						if( removeName.size() > 0 )
						{
							for( String item : removeName )
							{
								System.out.println( "减少文件: " + item );
							}
						}
					}
				}
				else
				{
					for( File file : files )
					{
						fName = file.getName() + file.lastModified();
						if( !map.containsKey( fName ) )
						{
							map.put( fName, file );
							System.out.println( "新增加的文件: " + fName );
						}
					}
				}
			}
			// }
			// else
			// {
			// map.clear();
			// for( File file : files )
			// {
			// fName = file.getName() + file.lastModified();
			// map.put( fName, file );
			// }
			// }
			// System.out.println( "此缓存中文件的个数: " + map.size() );
		}
	}

	/**
	 * 获取文件
	 * 
	 * @author 时间 2013-4-11 下午11:31:49
	 * @param filePath
	 *            文件目录
	 * @param fileName
	 *            文件名
	 * @return
	 */
	public File[] getFiles( String filePath, String fileName )
	{
		File[] files = null;
		if( StringUtils.isEmpty( fileName ) )
		{
			File doc = new File( filePath );
			if( doc.isDirectory() )
			{
				String[] fileNameArr = doc.list();
				if( fileNameArr.length > 0 )
				{
					files = new File[ fileNameArr.length ];
					for( int i = 0; i < fileNameArr.length; i++ )
					{
						fileName = fileNameArr[ i ];
						String fileAbspath = filePath + File.separator + fileName;
						File regInfoFile = new File( fileAbspath );
						files[ i ] = regInfoFile;
					}
				}
			}
		}
		else
		{
			String path = filePath + File.separator + fileName;
			File doc = new File( path );
			if( doc.isFile() )
			{
				files = new File[ 1 ];
				files[ 0 ] = doc;
			}
		}
		return files;
	}

	public void show()
	{
		FilesMonitor t = new FilesMonitor();
		Thread thread = new Thread( t );
		thread.setName( "eshore" );
		thread.start();
	}

	public static void main( String[] args )
	{
		FilesMonitor t = new FilesMonitor();
		t.show();
	}
}

 对文件夹的监控,我记得好像有FileMonitor,应该是第三方jar包,要实现一个接口,里面有增加、删除、更新文件等方法的,自己还写过例子,但是忘记了,怎么也找不到了,有知道的同学请知会一下。

分享到:
评论

相关推荐

    小程序------FilenameFilter 接口 过滤指定类型的文件

    在Java编程语言中,`FilenameFilter`接口是一个非常实用的工具,主要用于在文件系统操作中筛选...在实际开发中,尤其是在需要对大量文件进行操作的场景下,合理利用`FilenameFilter`能够显著提升代码的效率和可维护性。

    文件浏览 打开sdcard文件夹。只显示文件夹和txt文件。过滤非txt文件。选择txt文件返回其名字。

    在给定的标题和描述中,重点在于打开SD卡(Secondary Storage Device,即外部存储)文件夹,并且只显示文件夹和TXT文本文件,同时过滤掉其他非TXT文件。当用户选择一个TXT文件时,应用应返回该文件的名字。以下是对...

    读取文件夹下所有文件

    Java中的`FilenameFilter`接口和`FileFilter`抽象类提供了这样的功能,允许你自定义文件过滤规则,只处理满足特定条件的文件。 总之,读取文件夹下所有文件(包括子文件夹)是一个涉及多方面知识的综合任务。掌握...

    FileFitle(文件过滤)

    Java的`java.io.File`类有`listFiles()`方法,配合文件过滤器(如`FilenameFilter`)可实现过滤。在JavaScript中,Node.js的`fs.readdir()`配合回调函数或Promise可以实现类似功能。 4. **正则表达式过滤**: 对于...

    遍历某文件夹下的 .txt 文件

    除了简单的字符串匹配外,还可以使用更复杂的文件过滤逻辑,例如自定义的 `FilenameFilter` 接口实现来筛选文件。 通过上述知识点的学习,可以更好地理解如何在 Java 中遍历文件夹并处理其中的文件,特别是在针对...

    简单java文件过滤

    总的来说,“简单java文件过滤”涉及了Java中对文件的基本操作,包括文件过滤和内容改写。这些技能对于任何Java开发者来说都是基础且实用的,无论是在日常开发还是处理个人程序存储时,都能派上用场。通过不断的实践...

    java核心编程之文件过滤类FileFilter和FilenameFilter

    Java 文件过滤类 FileFilter 和 FilenameFilter Java 中的文件过滤类 FileFilter 和 FilenameFilter 是两个非常重要的接口,用于过滤文件和目录。它们广泛应用于文件管理、搜索、备份、数据分析等领域。 ...

    java查询本地文件夹动态显示并下载文件

    1. 文件操作:Java的`java.io`包提供了对文件和目录的基本操作,如创建、读取、写入、删除等。`File`类是文件和目录路径名的抽象表示。通过`new File(path)`实例化`File`对象,然后可以调用`exists()`判断文件是否...

    Java 文件过滤器

    又如,在服务器端,可能需要定期扫描文件夹,只处理某些类型的日志文件,这时也可以使用文件过滤器。 在实际开发中,你还可以通过组合多个过滤器来实现更复杂的逻辑。例如,你可以先过滤出所有的.txt文件,然后再...

    FilenameFilter的用法

    除了筛选特定后缀的文件外,我们还可以通过FilenameFilter筛选具有特定前缀的文件,例如筛选所有以`log`开头的日志文件: ```java import java.io.File; public class FilterDemo { public static void main...

    查询文件夹下的匹配文件名称

    在IT领域,尤其是在进行文件管理和自动化任务时,查询文件夹下的匹配文件名称是一项基础且重要的操作。这通常涉及到操作系统提供的文件系统接口或者编程语言中的文件处理模块。下面将详细讲解这个知识点。 首先,...

    遍历子文件和文件夹_遍历文件_遍历子文件和文件夹_

    在编程领域,遍历文件和文件夹是一项基本且重要的任务,尤其在处理大量数据或进行文件操作时。本文将深入探讨如何在不同的编程环境中遍历目录下的子文件和子文件夹,以满足日常开发需求。 首先,我们来看“遍历文件...

    FilenameFileter list 查看 java文件列表(过滤 java文件)

    在Java编程中,`FilenameFilter` 是一个接口,它用于过滤文件名,允许我们根据特定的文件扩展名或模式选择性地列出目录中的文件。在给定的标题和描述中,我们关注的是如何使用 `FilenameFilter` 来查看并列出只包含 ...

    java中如何使用过滤器过滤指定格式的文件

    在Java编程中,过滤器(Filter)是一种设计模式,它允许我们按照特定条件对数据进行筛选或修改。在处理文件时,我们可以利用过滤器来选取符合特定格式的文件,例如只选择`.txt`文本文件而忽略其他类型的文件,或者...

    java中遍历某个目录下的所有文件及文件夹中的文件

    - **文件过滤器**: 可以通过自定义`FilenameFilter`或`FileFilter`接口来筛选文件。 - **文件观察者**: 利用`java.nio.file.WatchService`可以监听文件系统的变更事件。 - **并发访问**: 处理大量文件时,可以考虑...

    Java使用FilenameFilter查找出目录下指定后缀的文件示例

    FilenameFilter是一个文件名过滤器,它可以根据文件名的规则来过滤文件。 FilenameFilter的accept方法将被传递两个参数:File dir和String name。其中,File dir是指文件所在的目录,而String name是文件名。accept...

    android从指定文件夹中显示图片

    在Android平台上,从指定文件夹显示图片涉及到一系列的步骤和技术,包括文件系统操作、图片加载库的使用以及UI设计。以下是对这个主题的详细讲解: 首先,我们需要理解Android的文件系统结构。Android设备通常有两...

    Java实现文件批量重命名

    可以使用`FileFilter`接口或`FilenameFilter`接口自定义过滤规则,例如只重命名特定扩展名的文件。 4. **命名规则**:重命名的规则可以多样化,如替换字符串、添加前缀或后缀、按照数字顺序重新编号等。这些规则...

    Java IO文件过滤器对命令设计模式的使用

    在使用文件过滤器时,我们需要实现FilenameFilter接口,该接口有一个accept()方法,我们可以在该方法中实现自己的过滤规则。例如,我们可以编写一个MyFilenameFilter类来过滤以.xml结尾的文件名或者路径名。 三、 ...

    java中读取目录下指定的文件

    对于特定条件(如只读取特定扩展名的文件),可以传入一个`FileFilter`或者`FilenameFilter`。例如,要查找所有的`.txt`文件: ```java File[] textFiles = directory.listFiles(new FilenameFilter() { @Override...

Global site tag (gtag.js) - Google Analytics