雨落 发表于 2015-5-23 12:46

JavaWeb实现显示本地文件目录项目源码

前段时间为是练习JQuery和Java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 


  工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。  下面贴出其中核心的代码,即遍历目录的工具类IterateDir.javapackage 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;
    }
    //取得文件大小
    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.isDirectory())
            {
                size = size + getFileSize(flist);
            } else
            {
                size = size + flist.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.isDirectory()) {
                size = size + getlist(flist);
                size--;
            }
      }
      return size;

    }
}
JavaWeb实现显示本地文件目录项目源码解压码:**** Hidden Message *****


凄凉的风 发表于 2015-5-23 13:18

楼主威武啊!!!!!!!!!!!!!!!!!!!!!!!!

凄凉的风 发表于 2015-5-23 13:19

楼主威武啊!!!!!!!!!!!!!!!!!!!!!!!!

程序猿 发表于 2015-5-24 00:15

恢复就可以看了吗

barry200890 发表于 2015-5-24 09:48

不错呀,能把js和java结合起来查看windows里的内容,你好像还是第一个呀,至于为什么显示不出来c盘的内容,你想到了吗?

我很无奈 发表于 2015-5-25 09:25

学习学习

yangak 发表于 2015-5-26 17:54

下载下来学习一下

大头娃娃 发表于 2015-5-28 11:55

我像下载

花开不败 发表于 2015-5-29 08:44

我就不信我这么多分权限不够。。

明不明白 发表于 2015-5-29 11:39

啦啦啦啦啦啦啦
页: [1] 2 3 4 5
查看完整版本: JavaWeb实现显示本地文件目录项目源码