定时器TimerTask:定时清理上传文件

来源:互联网 发布:js .tostring 的用法 编辑:程序博客网 时间:2024/06/06 19:47
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.util.Timer;import java.util.TimerTask;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import com.gmcc.kuchuan.MessageConstants;/** * 定时清理上传文件(超过7天) *  * @author Join *  */public class DelUploadFileTimerTask {private Log logger = LogFactory.getLog(DelUploadFileTimerTask.class);private Timer timer;private final static long SEVER_DAY = 7 * 1000 * 60 * 60 * 24;//7天转换成毫秒private final static String BACK_FILE_ROOT = "/data/www_back";// 服务器存储备份文件根目录public DelUploadFileTimerTask() {timer = new Timer();timer.schedule(new RemindTask(), 0, // initial delaySEVER_DAY); // subsequent rate 7天1次logger.debug("DelUploadFileTimerTask is Started");}class RemindTask extends TimerTask {public void run() {delUploadFile();// System.exit(0);}}/** * 清理上传文件(7天) */public void delUploadFile() {ListDirectoryAndDelUploadFile(MessageConstants.FILE_ROOT);}/** * 遍历目录文件和删除超过时间的上传文件(移动到备份目录) * @param path 根目录 */public void ListDirectoryAndDelUploadFile(String path) {File file = new File(path);File[] files = file.listFiles();for (File fl : files) {if (fl.isDirectory()) {ListDirectoryAndDelUploadFile(fl.toString());} else {// 删除超过7天的文件if (fl.lastModified() + SEVER_DAY < System.currentTimeMillis()) {moveFile(fl.getAbsolutePath(), BACK_FILE_ROOT + File.separator +fl.getName());}}}}/** * 删除文件 *  * @param filePathAndName */public void delFile(String filePathAndName) {try {String filePath = filePathAndName;filePath = filePath.toString();File myDelFile = new File(filePath);myDelFile.delete();} catch (Exception e) {logger.error("DelUploadFileTimerTask. Cleaning upload files. Delete file error." ,e);e.printStackTrace();}}/** * 复制文件 *  * @param oldPath * @param newPath */public void copyFile(String oldPath, String newPath) {try {int bytesum = 0;int byteread = 0;File oldfile = new File(oldPath);if (oldfile.exists()) { // 文件存在时// 读入原文件InputStream inStream = new FileInputStream(oldPath);FileOutputStream fs = new FileOutputStream(newPath);byte[] buffer = new byte[1444];while ((byteread = inStream.read(buffer)) != -1) {bytesum += byteread; // 字节数 文件大小//System.out.println(bytesum);fs.write(buffer, 0, byteread);}inStream.close();}} catch (Exception e) {logger.error("DelUploadFileTimerTask. Cleaning upload files. Copy file error." ,e);e.printStackTrace();}}/** * 移动文件到指定路径 *  * @param oldPath * @param newPath */public void moveFile(String oldPath, String newPath) {copyFile(oldPath, newPath);delFile(oldPath);}public static void main(String[] args) {new DelUploadFileTimerTask();}}

原创粉丝点击