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;

    }
}
posted @ 2014-05-06 21:05  liaoyu  阅读(12438)  评论(0编辑  收藏  举报