java定時任務

定時任務代碼

package com.sobey;

import java.io.File;
import java.util.Timer;
import java.util.TimerTask;

public class TimerTaskReadFile extends TimerTask {

    // 表示任務是否啓動
    private boolean isRunning = false;

    private Timer mTimer = new Timer();

    // 需要的屬性
    private String filePathStr;

    private int folderCount;

    /**
     * 構造方法
     *
     * @param filePathStr
     */
    public TimerTaskReadFile(String filePathStr) {
        this.filePathStr = filePathStr;
    }

    @Override
    public void run() {
        if (!(this.isRunning)) {
            runMain();
        }
    }

    private synchronized void runMain() {
        this.isRunning = true;
        File file = new File(filePathStr);
        try {

            long fileSize = getFileSize(file);
            System.out.println("定時掃描傳人文件路徑的文件大小:" + fileSize);

            System.out.println("文件夾下面的文件夾個數:" + getTotalFolderNum(file)
                    + " 文件夾下面的文件個數:" + getTotalFileNum(file));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            this.isRunning = false;
        }
    }

    /**
     * 獲取文件夾下面的文件個數和文件夾個數
     * @param file
     */
    private int getTotalFileNum(File file) {
        int fileCount = 0;
        File list[] = file.listFiles();
        fileCount = list.length;
        for (int i = 0; i < list.length; i++) {
            if (list[i].isDirectory()) {
                fileCount = fileCount + getTotalFileNum(list[i]);
                fileCount--;
            }
        }
        return fileCount;
    }

    /**
     * 獲取文件夾下面的文件個數和文件夾個數
     * @param file
     */
    private int getTotalFolderNum(File file) {
        File list[] = file.listFiles();
        for (int i = 0; i < list.length; i++) {
            if (list[i].isDirectory()) {
                getTotalFolderNum(list[i]);
            }
            if (!list[i].isFile()) {
                folderCount++;
            }
        }
        return folderCount;
    }

    /**
     * 讀取文件大小
     * @param f
     * @return
     * @throws Exception
     */
    public long getFileSize(File f) throws Exception// 取得文件夾大小
    {
        long size = 0;
        File flist[] = f.listFiles();
        for (int i = 0; i < flist.length; i++) {
            if (flist[i].isDirectory()) {
                size = size + getFileSize(flist[i]);
            } else {
                size = size + flist[i].length();
            }
        }
        return size;
    }

    /**
     * 銷燬方法
     */
    public void destory() {
        cancel();
        this.mTimer.cancel();
    }

    public static void main(String[] args) {
        String filePath = "D:\\webtv";
        Timer mTimer = new Timer();
        mTimer.scheduleAtFixedRate(new TimerTaskReadFile(filePath), 0, 10000);
    }

}

注意:java定時任務沒有返回值,需要向定時任務裏面傳人蔘數,可以用定時任務類的構造函數。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章