FilenameFilterファイルのフィルタリング、スレッドによるフォルダの監視

5837 ワード

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パッケージであるべきで、1つのインタフェースを実现して、中には増加、削除、ファイルの更新などの方法があって、自分でまた例を书いたことがあって、しかし忘れて、どうしても探し出せなくて、知っている学友がいて知っていて少し知っていてください.