• 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;
    
        }
    }
  • 相关阅读:
    【IT笔试面试题整理】把n个骰子扔在地上,所有骰子朝上一面的点数之和为S概率转
    面试题位操作
    微软面试题 寻找数组中出现的唯一重复的一个数
    【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法
    【IT笔试面试题整理】 二叉树任意两个节点间最大距离
    面试题堆栈和队列
    LRU cache实现 Java 转
    【IT笔试面试题整理】有序数组生成最小高度二叉树
    Unity3d Asset Store下载的资源在哪?
    Xcode 6 如何将 模拟器(simulator) for iphone/ipad 转变成 simulator for iphone
  • 原文地址:https://www.cnblogs.com/liaoyu/p/uudisk.html
Copyright © 2020-2023  润新知