`
08284008
  • 浏览: 48735 次
  • 性别: 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包,要实现一个接口,里面有增加、删除、更新文件等方法的,自己还写过例子,但是忘记了,怎么也找不到了,有知道的同学请知会一下。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics