zoukankan      html  css  js  c++  java
  • 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;
    
        }
    }
  • 相关阅读:
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    PHP serialize() 函数
    PHP print_r() 函数
  • 原文地址:https://www.cnblogs.com/liaoyu/p/uudisk.html
Copyright © 2011-2022 走看看