FilenameFilterファイルのフィルタリング、スレッドによるフォルダの監視
5837 ワード
FilenameFilterインタフェースの実装
テストクラス
フォルダの监视に対して、私はFileMonitorがあるようなことを覚えていて、サードパーティのjarパッケージであるべきで、1つのインタフェースを実现して、中には増加、削除、ファイルの更新などの方法があって、自分でまた例を书いたことがあって、しかし忘れて、どうしても探し出せなくて、知っている学友がいて知っていて少し知っていてください.
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つのインタフェースを実现して、中には増加、削除、ファイルの更新などの方法があって、自分でまた例を书いたことがあって、しかし忘れて、どうしても探し出せなくて、知っている学友がいて知っていて少し知っていてください.