Java+JQuery實現網頁顯示本地文件目錄(含源碼)


原文地址:http://www.cnblogs.com/liaoyu/p/uudisk.html

源碼地址:https://github.com/liaoyu/uudisk 

  前段時間為是練習JQuery和Java遍歷目錄,寫了一個JavaWeb(使用Jsp+Servlet)的例子。源碼是Myeclipse新建的項目,需要配置一些環境,比如JRE路徑,以下是運行截圖,界面模仿新浪微盤。

 

  

  工作原理就是通過Java遍歷系統(Windows)的目錄,前台通過點擊圖標以ajax方式觸發事件,后台以json數據的形式把文件結構返回給前台,前台通過JS解析JSON數據內容,展示不同的圖片。目前尚存在的問題有無法顯示C盤目錄下的文件。

  下面貼出其中核心的代碼,即遍歷目錄的工具類IterateDir.java

package com.uudisk.utils;

import java.io.File;
import java.io.FileInputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import com.uudisk.domain.DirBean;
import com.uudisk.domain.FileBean;
import com.uudisk.domain.RootBean;

public class IterateDir {
    /*
     * 獲取根目錄信息
     */
    public static List<RootBean> getDiskInfo(){
        //獲取盤符
        File []files=File.listRoots();
        List<RootBean>roots=new ArrayList<RootBean>();
        for(File file:files){
            if(file.getTotalSpace()!=0){
                RootBean rootBean=new RootBean();
                rootBean.setDiskPath(file.getAbsolutePath());
                rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");
                rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
                rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
                roots.add(rootBean);
            }
        }
        return roots;
    }
    /*
     * 通過遞歸得到某一路徑下所有的目錄及其文件
     */
    public static DirBean getFiles(String dirPath) throws Exception{
        File root = new File(dirPath);
        DirBean dirBean=null;
        if(root.exists()){
            dirBean=new DirBean();
            String dirSize="";
            int dirCount=0;
            List<FileBean> filelist=new LinkedList<FileBean>();
            if(root.isDirectory()){
                File[] files = root.listFiles();
                for (File file : files) {
                    FileBean fileBean=new FileBean();
                    String realPath=file.getAbsolutePath();
                    fileBean.setFilePath(realPath);
                    fileBean.setFileName(getFileName(realPath));
                    if (file.isDirectory()) {
                        fileBean.setFileType("DIR");
                        //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
                        fileBean.setFileSize("");
                    }else{
                        fileBean.setFileType(getFileType(getFileName(realPath)));
                        fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
                    }
                    filelist.add(fileBean);
                }
            }else{
                    dirSize=FormetFileSize(getFileSizes(root));
            }
            dirBean.setDirCount(dirCount);
            dirBean.setDirSize(dirSize);
            dirBean.setDirPath(dirPath);
            dirBean.setFiles(filelist);
        }else{
            System.out.println("文件或文件目錄不存在");
        }        
        return dirBean;
    }
    private static String getFileType(String fileName) {
        return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
    }
    //獲取文件名
    static String getFileName(String filePath) {
        String [] fileItems=filePath.split("\\\\");
        return fileItems[fileItems.length-1];
    }
    //取得文件大小
    public static long getFileSizes(File f) throws Exception{
        long s=0;
        if (f.exists()) {
            FileInputStream fis = null;
            fis = new FileInputStream(f);
           s= fis.available();
        } else {
            System.out.println("文件不存在");
        }
        return s;
    }
    //取得文件夾大小
    public static 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 static String FormetFileSize(long fileS) {//轉換文件大小
        DecimalFormat df = new DecimalFormat("#.00");
        String fileSizeString = "";
        if (fileS < 1024) {
            fileSizeString = df.format((double) fileS) + "B";
        } else if (fileS < 1048576) {
            fileSizeString = df.format((double) fileS / 1024) + "KB";
        } else if (fileS < 1073741824) {
            fileSizeString = df.format((double) fileS / 1048576) + "M";
        } else {
            fileSizeString = df.format((double) fileS / 1073741824) + "G";
        }
        return fileSizeString;
    }
   
    public static long getlist(File f){//遞歸求取目錄文件個數
        long size = 0;
        File flist[] = f.listFiles();
        size=flist.length;
        for (int i = 0; i < flist.length; i++) {
            if (flist[i].isDirectory()) {
                size = size + getlist(flist[i]);
                size--;
            }
        }
        return size;

    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM