经常我老婆让我帮她从她的手机导出图片,为了避免下次再打搅我玩游戏,索性动手写了一段程序.以下程序有重复造轮子之嫌(这个需求完全可以使用Apache Commons IO来处理),但自己动手玩一下,也能从中体会良多.
package com.app.common.util.file.selector;
import java.io.File;
import java.io.FileFilter;
import java.util.*;
/**
* 此过滤器用来过滤大于最后修改时间之后的文件
* @author Administrator
*
*/
public class AfterLastUpdateFileFilter implements FileFilter {
private Date lastUpdateTime;
public AfterLastUpdateFileFilter(Date lastUpdateTime) {
this.lastUpdateTime = lastUpdateTime;
}
@Override
public boolean accept(File file) {
Date fileDate = new Date(file.lastModified());
return fileDate.after(lastUpdateTime);
}
}
package com.app.common.util.file.selector;
import java.io.*;
import java.util.*;
/**
* 此过滤器属于组合过滤器,仅当两个过滤器验证通过,才会选中文件
* @author Administrator
*
*/
public class CompositeFileFilter implements FileFilter {
private List<FileFilter> filters;
public CompositeFileFilter(List<FileFilter> filters) {
this.filters = filters;
}
@Override
public boolean accept(File file) {
for (FileFilter filter : filters) {
if (filter.accept(file) == false) {
return false;
}
}
return true;
}
}
package com.app.common.util.file.selector;
import java.io.File;
import java.io.FileFilter;
/**
* 文件扩展名过滤器
* @author Administrator
*
*/
public class FileExtensionFilter implements FileFilter {
private String extension;
public FileExtensionFilter(String extension) {
this.extension = extension;
}
@Override
public boolean accept(File file) {
if(file.isDirectory()){
return false;
}
return file.getName().toLowerCase().endsWith(extension.toLowerCase());
}
}
package com.app.common.util.file.selector;
import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import org.apache.commons.io.IOUtils;
/**
* 文件选择测试类
* @author Administrator
*
*/
public class FileSelector {
public void copyFiles(File inputDir, CompositeFileFilter fileFilter,File outDir) {
File[] files = null;
InputStream in = null;
OutputStream output = null;
if (inputDir != null && inputDir.exists() && inputDir.isDirectory()
&& inputDir.canRead()) {
files = inputDir.listFiles(fileFilter);
System.out.println("select files length: " + files.length);
for (File file : files) {
try {
in = new FileInputStream(file);
System.out.println("handle: " + file.getName());
output = new FileOutputStream(new File(outDir,
file.getName()));
IOUtils.copy(in, output);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != output) {
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
output = null;
}
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
in = null;
}
}
}
}
}
public static void main(String[] args) throws ParseException {
File inputDir = new File("f:/pic");
File outDir = new File("f:/test/");
FileSelector selector = new FileSelector();
Date lastUpdateTime = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
lastUpdateTime = sdf.parse("2012-10-28 23:59:59");
List<FileFilter> filters = new ArrayList<FileFilter>();
filters.add(new AfterLastUpdateFileFilter(lastUpdateTime));
filters.add(new FileExtensionFilter(".jpg"));
CompositeFileFilter compositeFileFilter = new CompositeFileFilter(
filters);
selector.copyFiles(inputDir, compositeFileFilter, outDir);
System.out.println("finished...");
}
}
当然还可以实现其它的过滤器,不过说真的,Apache Commons IO里的过滤器已经够强大了,完全可以用它的.除此之外,Apache Commons IO里还有很多比较器,完全可以实现你的排序要求.
分享到:
相关推荐
在Android平台上,开发一款能够支持选择U盘的文件选择器是一项具有挑战性的任务,因为U盘在Android设备上的接入通常需要特殊的处理。本项目“Android 文件选择器(支持选择u盘)”提供了一个完整的解决方案,使得...
在Android应用开发中,文件上传和文件选择器是常见的功能需求。用户可能需要从设备存储中选择一个或多个文件,例如图片、文档或音频文件,然后上传到服务器或进行其他操作。本文将深入探讨如何在Android平台上实现...
在Android平台上,开发一款“另类的文件选择器”是一个创新且实用的功能,它能够为用户提供不同于系统默认的文件浏览和选取体验。Android文件选择器的设计和实现涉及到多个技术点,包括文件系统的访问、UI设计、多选...
在Android开发中,文件选择器是一个非常常见的组件,它允许用户在设备的文件系统中浏览并选择文件。本文将深入探讨如何在Android应用中实现一个文件选择器,并提供相关的代码示例。 首先,理解Android的文件系统至...
在Android开发中,有时我们需要为用户提供一种方便的方式来选择设备上的文件,这通常涉及到创建自定义的文件选择器。"Android简易文件选择器"是一个这样的工具,它具备多选、反选和全选功能,旨在优化用户体验并解决...
在Android应用开发中,"android图片/视频文件选择器"是一个至关重要的组件,它允许用户在设备上方便地选择图片和视频。这个特定的选择器具备多种功能,包括多选、单选模式,以及内置的拍摄和裁剪工具,极大地提升了...
在Android开发中,文件选择器是一个重要的组件,它允许用户在设备上选择文件或目录,以便进行读取、写入或其他操作。标题“Android文件选择器”表明我们讨论的是一个自定义实现的解决方案,用于解决Android系统原生...
根据提供的信息,我们可以总结出以下有关“Java文件选择器”的知识点: ### Java 文件选择器概述 在Java开发中,文件选择器是一种常见的图形用户界面组件,用于帮助用户从文件系统中选择文件或目录。通常,这涉及...
在Java编程中,文件选择器(FileChooser)是一个非常实用的工具,它允许用户从本地文件系统中选择文件或目录。这个“有用的例子啊JAVA文件选择器”提供的示例代码可以帮助我们更好地理解如何在Java应用程序中集成...
"文件选择器FolderChooser"是一款专为Android平台设计的应用,旨在提供美观且高效的文件和文件夹选择功能。这款选择器不仅界面简洁,还具备高级特性,如筛选特定类型的文件以及自定义文件图标,使得用户在处理文件时...
在JavaScript中实现一个本地文件选择器功能,是前端开发中常见的需求,这通常涉及到HTML5的File API。这个功能允许用户从他们的计算机上选择文件,并且可以进行预览、上传或者其他处理。以下将详细讲解如何实现这个...
在Android开发中,文件选择器是一个非常常见的组件,它允许用户在设备的文件系统中浏览并选择文件。本文将深入探讨一个基于Android的简单文件选择器工程,该工程是通过参考论坛上的示例并进行实践而创建的。下面我们...
Unity3D文件选择器 在 Unity3D 中,文件选择器是一个非常重要的组件,它允许用户选择文件或目录,以便在 Unity3D 项目中使用。今天,我们将讲解 Unity3D 文件选择器的实现原理和实现细节。 文件选择器的实现原理 -...
【标题】"Android代码-文件选择器.zip"指的是一个包含Android平台上实现文件选择功能的代码资源包。在Android开发中,文件选择器是用户界面的一个重要组成部分,它允许用户浏览和选择存储在设备上的文件,如图片、...
在Android开发中,文件选择器是一个非常常见的组件,它允许用户在设备的文件系统中浏览并选择所需的文件或目录。本资源"Android高级应用源码-文件选择器.rar"提供了一个实现这一功能的源代码示例,对于深入理解...
文件选择器源码,aFileChooser是一个Android库项目,简化了过程,提出一个文件选择器。意图为第三方应用程序组件提供钩子的能力为内容的选择。这对媒体文件运行良好,但如果你希望用户能够选择任何文件,他们必须安装一...
Java文件选择器源代码是用于在Java应用程序中实现文件选择功能的代码片段或库。它通常包含一组类和方法,允许用户浏览并选择本地文件系统中的文件或目录,类似于操作系统提供的文件选择对话框。在Java中,我们可以...
AutoJs源码-文件选择器。本资源购买前提醒:本源码都是实际autojs项目模板,安装好autojs直接运行即可打开。1、支持低版本autojs。2、资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!。3...
Java Swing组件文件选择器JFileChooser简单用法示例 Java Swing组件文件选择器JFileChooser是Java Swing中一个功能强大且灵活的文件选择器组件,可以用来选择文件或文件夹。下面我们将通过一个简单的示例来介绍...
标题"C#文件选择器FolderBrowser_Code.zip"表明这是一个与C#编程语言相关的项目,它包含一个文件选择器功能,能够允许用户在WPF(Windows Presentation Foundation)环境中选择文件夹和文件。WPF是.NET框架的一部分...