我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 项目源码 > JavaWeb实现显示本地文件目录项目源码
总共48086条微博

动态微博

查看: 12463|回复: 49

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

[复制链接]

34

主题

4

听众

110

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2015-05-23 12:46:26 |只看该作者 |倒序浏览
前段时间为是练习JQuery和java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
 
0 J8 L* H: u( u+ i8 e
1 |9 z4 v' A# F; d" B! ?/ v
" |) J3 a6 S# A! N
  工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。
  下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java
  1. package com.uudisk.utils;
    - X! x4 m) h, ^* x& B3 @1 w
  2. ( |( t4 U+ c2 ?4 M- b( X0 ^: S
  3. import java.io.File;
    ' C6 o2 [% E6 |* h: F" u" r& q: L
  4. import java.io.FileInputStream;
    ! E/ z( I' z' O: m8 i8 v  U
  5. import java.text.DecimalFormat;5 V4 W$ r& e9 p
  6. import java.util.ArrayList;
    / H; k6 E( ?" z6 @( b: b  N* |
  7. import java.util.LinkedList;
    : v& ^! V- s' o; D" h- E, g- q
  8. import java.util.List;
    , U* _( ?. s: G% f$ S
  9. ) h  H+ q; s% [% e6 G  R# t8 O/ Y
  10. import com.uudisk.domain.DirBean;- c# d1 w4 O- q' C9 N" E
  11. import com.uudisk.domain.FileBean;
    % M# }" e' |1 A; J
  12. import com.uudisk.domain.RootBean;7 V8 l. }% H$ |" s
  13. 9 x; x; l5 C5 U  x- u/ [
  14. public class IterateDir {
    / ^* g  Y! g3 ^/ j+ p7 P' y3 M
  15.     /*7 E  U  G0 H* m: v" h
  16.      * 获取根目录信息
    2 n. e' c9 ?8 h2 f
  17.      */! O8 N( U6 c4 ~
  18.     public static List<RootBean> getDiskInfo(){' Z6 }- I% j; w' o. L
  19.         //获取盘符" |6 ^$ g9 N$ c; N
  20.         File []files=File.listRoots();
      H, q( I' z9 c1 ^2 q6 x
  21.         List<RootBean>roots=new ArrayList<RootBean>();, L7 D( P, J" B1 v  _# o0 g
  22.         for(File file:files){
    # ~1 V7 I9 r3 _7 b+ }
  23.             if(file.getTotalSpace()!=0){- ]. G* T0 s& t0 [& w
  24.                 RootBean rootBean=new RootBean();
    , B0 h: \5 k- T$ z% ^  G
  25.                 rootBean.setDiskPath(file.getAbsolutePath());
    - H' [+ b; i" e% j+ U7 `
  26.                 rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");, ?0 U4 }, n! G- n) h7 c) {
  27.                 rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));7 A( D: t2 d, B5 u! a; r
  28.                 rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));1 k5 ]% ^- G# B* G7 K
  29.                 roots.add(rootBean);
    ) u( B' Y4 p3 F5 r1 A7 x
  30.             }
      c6 j; o  G( e8 d, X
  31.         }
    , K* B! L1 }0 s, z1 ?, J
  32.         return roots;3 {. N& E1 g$ M
  33.     }9 @$ N, g6 k) A3 o0 }$ d1 R
  34.     /*( ?' {1 ^* z/ ~; x: W3 R
  35.      * 通过递归得到某一路径下所有的目录及其文件. b) F9 S, F# M! S8 O7 U
  36.      */
    ) d4 K7 q* b6 Z3 C% B
  37.     public static DirBean getFiles(String dirPath) throws Exception{
    8 Y: L: \8 v& t
  38.         File root = new File(dirPath);6 z. B0 }: v1 d0 x9 v, P  @
  39.         DirBean dirBean=null;
    . W2 z2 N: a+ z7 Y+ @& `: h
  40.         if(root.exists()){5 [/ A; F) C, V
  41.             dirBean=new DirBean();
    9 I, }7 n, M. ^+ X' s
  42.             String dirSize="";
    9 q! f9 e) H: y1 h
  43.             int dirCount=0;( y0 v0 v% m+ Q  a
  44.             List<FileBean> filelist=new LinkedList<FileBean>();
    - G( y* U. D3 k- \9 r4 [& n# _" e) E: |
  45.             if(root.isDirectory()){
    % Z; o  \1 b% B0 `! |( k8 Q; \4 p
  46.                 File[] files = root.listFiles();( d8 `, W6 T" ]( h% l. x
  47.                 for (File file : files) {0 P( E3 b2 v& F  b
  48.                     FileBean fileBean=new FileBean();
    0 G: ~4 i% V5 g' b  p& o; ?$ `& w
  49.                     String realPath=file.getAbsolutePath();' a  \; Z* O, A7 H
  50.                     fileBean.setFilePath(realPath);( Q1 t4 K& [5 b: s, ]- [6 m$ O' W% b) Y
  51.                     fileBean.setFileName(getFileName(realPath));1 a, ^3 m7 T1 [: s
  52.                     if (file.isDirectory()) {
    7 [1 S0 _* n" ?9 N7 R
  53.                         fileBean.setFileType("DIR");8 @& r1 o1 d. J7 p- P
  54.                         //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
    & v7 @! E* [; H4 [
  55.                         fileBean.setFileSize("");
    $ S0 r/ \9 V5 N- ]. K  r6 [& E; I1 j
  56.                     }else{
    0 h- A+ C. h& t
  57.                         fileBean.setFileType(getFileType(getFileName(realPath)));$ |/ ~* f' W. `5 l
  58.                         fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
    6 h4 I3 H# Q  S* `9 `
  59.                     }
      }9 K; t9 [3 B$ o
  60.                     filelist.add(fileBean);
    8 m" Q" g6 A# Z; h; g3 u* D+ G$ t
  61.                 }
    $ S, F6 o# G5 D: G4 I
  62.             }else{9 K) V5 J2 ?3 Q" o' J; g
  63.                     dirSize=FormetFileSize(getFileSizes(root));
    + F0 q5 A" O8 q5 s6 J* @
  64.             }
    6 l3 W# ?& n2 Q1 b- X
  65.             dirBean.setDirCount(dirCount);* r1 [( j! r+ G1 A: X+ k
  66.             dirBean.setDirSize(dirSize);) T  q4 K& y( J# \2 @, Z' F
  67.             dirBean.setDirPath(dirPath);
    ; b4 A* A# s% M
  68.             dirBean.setFiles(filelist);
    5 ?% @5 n* l. g, C
  69.         }else{
    1 k8 L2 |% N& x+ o$ v2 N- P) L
  70.             System.out.println("文件或文件目录不存在");8 G, l0 k* e# T# T: R$ X4 F3 j& B
  71.         }        ( z2 E" h2 \/ M
  72.         return dirBean;. H8 I  N6 h9 n+ _5 O
  73.     }, {- P# [% p( i4 [
  74.     private static String getFileType(String fileName) {. K" E8 N: t, ?4 \) l0 h/ O5 S
  75.         return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
    # t, b  [0 |/ H$ n! n
  76.     }5 w. f' o8 s4 @  g5 j
  77.     //获取文件名4 j' Q7 B. b$ z9 u* ]) l/ D
  78.     static String getFileName(String filePath) {
    , \# ~% L( C. x4 Y- ]# Q. t
  79.         String [] fileItems=filePath.split("\\\");
    5 [+ O7 Y" e1 g3 w6 |
  80.         return fileItems[fileItems.length-1];9 v: j7 Y$ ~. c: |, N
  81.     }, e: Y9 f6 u+ M9 X( j6 C
  82.     //取得文件大小
    2 i/ @0 a  w. q1 f% ]2 j. I) Y% w
  83.     public static long getFileSizes(File f) throws Exception{+ h! Q7 M6 @( d: u, y% Y
  84.         long s=0;" I# U6 A+ J7 X4 u; C
  85.         if (f.exists()) {0 q4 G  v  c1 I, m* v
  86.             FileInputStream fis = null;
    ) _- T1 h8 j7 c8 s
  87.             fis = new FileInputStream(f);  E5 E+ |% k; C0 L. n3 x
  88.            s= fis.available();( m+ V; n- r  }0 t+ R- i+ V
  89.         } else {# E5 q# Z' C) @+ T9 @- S# v
  90.             System.out.println("文件不存在");
    ' C6 M" w' L6 j6 F- ]
  91.         }6 Q6 K# r6 h$ j- F$ i
  92.         return s;' U7 O( `' A2 F2 A* r" W
  93.     }- ]6 h3 c- v* K9 n" D3 ]" H" W
  94.     //取得文件夹大小* s5 b7 p7 m9 S% G0 f
  95.     public static long getFileSize(File f)throws Exception9 O; S2 L! W& M5 d2 `
  96.     {
    + ?) I* N, k1 `$ X, v
  97.         long size = 0;
    $ B7 m# L% F/ B, L8 X0 v: `
  98.         File flist[] = f.listFiles();, x2 I6 E$ j2 D% Q; O3 X$ P
  99.         for (int i = 0; i < flist.length; i++); I2 d6 u* ^5 u# N7 N8 r1 C
  100.         {
    0 f: y( \+ F/ t9 w- w
  101.             if (flist[i].isDirectory())
    & {: [2 Z* h# C0 [5 @) m2 N
  102.             {
    % i7 I) B  q# ~" v/ T5 \
  103.                 size = size + getFileSize(flist[i]);1 Y) R$ S1 ^, |1 {' [
  104.             } else
    + g; U' `5 Q# x0 f' Q) y
  105.             {! f! u2 u$ y" }
  106.                 size = size + flist[i].length();( n4 g$ O+ d* ~% x$ t3 t) v' s/ O
  107.             }
    3 l7 Y) K& p0 ^! {- a! @
  108.         }
    & l1 ~" X; J2 M1 t1 f" Y: Z+ W
  109.         return size;
    ( M* u% T5 D- q, m
  110.     }
    3 v% N) j4 }4 \' c  W# f
  111.     public static String FormetFileSize(long fileS) {//转换文件大小) w6 t* Y& g2 U3 ]! O* ]: j$ P' ^
  112.         DecimalFormat df = new DecimalFormat("#.00");( q: H! G7 J$ e% U* }; B8 Q5 _
  113.         String fileSizeString = "";0 ^" |7 Y- B% o
  114.         if (fileS < 1024) {
    - `0 A# v* H/ D  Q* v! v
  115.             fileSizeString = df.format((double) fileS) + "B";
    $ J: f6 y/ |. a. T% u
  116.         } else if (fileS < 1048576) {
    3 J: I% \- ]  w
  117.             fileSizeString = df.format((double) fileS / 1024) + "KB";
    ! |# e1 \& j& ?% p" @. A
  118.         } else if (fileS < 1073741824) {7 E$ w" Q2 w4 |  L  @( l- W
  119.             fileSizeString = df.format((double) fileS / 1048576) + "M";
      N$ p# {$ e8 y5 x3 [7 b- _2 ^! `
  120.         } else {
    ; x) G  k# g- {$ F; v( _
  121.             fileSizeString = df.format((double) fileS / 1073741824) + "G";+ V/ z5 u" j1 v, J% a  O
  122.         }" s* {, F- e6 ^' U, P
  123.         return fileSizeString;
    2 K5 b$ y+ }7 V) R* X$ S
  124.     }
    , K' ?# J! j! e# d& M, M3 D
  125.    9 {* k+ H% i9 G3 f. c8 F/ X/ J* i
  126.     public static long getlist(File f){//递归求取目录文件个数
    0 ~( F$ U7 [1 J8 l4 }& |& P' ^
  127.         long size = 0;# r7 N- _& q4 s0 o! w
  128.         File flist[] = f.listFiles();9 B! u! U1 @6 W' D/ x  d
  129.         size=flist.length;
    : T- S* {( T3 ]' [# [
  130.         for (int i = 0; i < flist.length; i++) {
    9 L, ?( Y7 @8 M- S$ p/ R, ?
  131.             if (flist[i].isDirectory()) {
    ! R* r; u6 I; h. w+ K2 b
  132.                 size = size + getlist(flist[i]);
    ; [' Y5 H+ S) x( \$ F
  133.                 size--;( Q1 k6 J3 z" L/ d2 W  o
  134.             }
    & g1 v+ f; x: p
  135.         }
    8 _3 u* w' ~& m9 Z1 Z4 W% c' p( `6 ~
  136.         return size;; {* v. D! z  U. r3 q

  137. * `- f. S2 Z% `7 U% s7 M
  138.     }
    . r% O, q5 L3 d, \1 b" P
  139. }
复制代码
& b  ^/ z5 a( q
JavaWeb实现显示本地文件目录项目源码
解压码:
游客,如果您要查看本帖隐藏内容请回复

% w- |# Q- m7 v( p

5 t5 ^- u% T) S6 [
3 ]5 Z8 {. W5 h7 H! ?% I/ e

我的日常 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与我的日常享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和我的日常的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、我的日常管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

2

主题

1

听众

1352

金钱

六袋长老

该用户从未签到

沙发
发表于 2015-05-23 13:18:43 |只看该作者
楼主威武啊!!!!!!!!!!!!!!!!!!!!!!!!
回复

使用道具 举报

2

主题

1

听众

1352

金钱

六袋长老

该用户从未签到

板凳
发表于 2015-05-23 13:19:01 |只看该作者
楼主威武啊!!!!!!!!!!!!!!!!!!!!!!!!
回复

使用道具 举报

2

主题

0

听众

128

金钱

三袋弟子

该用户从未签到

地板
发表于 2015-05-24 00:15:36 |只看该作者
恢复就可以看了吗
回复

使用道具 举报

3

主题

3

听众

1211

金钱

五袋长老

该用户从未签到

5#
发表于 2015-05-24 09:48:18 |只看该作者
不错呀,能把js和java结合起来查看windows里的内容,你好像还是第一个呀,至于为什么显示不出来c盘的内容,你想到了吗?
回复

使用道具 举报

7

主题

3

听众

383

金钱

版主

该用户从未签到

6#
发表于 2015-05-25 09:25:15 |只看该作者
学习学习
回复

使用道具 举报

72

主题

0

听众

1034

金钱

五袋长老

该用户从未签到

90后

7#
发表于 2015-05-26 17:54:35 |只看该作者
下载下来学习一下
回复

使用道具 举报

3

主题

0

听众

1296

金钱

五袋长老

该用户从未签到

8#
发表于 2015-05-28 11:55:59 |只看该作者
我像下载! ?" i3 x# x6 j' u! v( a" N
回复

使用道具 举报

76

主题

2

听众

1104

金钱

五袋长老

该用户从未签到

9#
发表于 2015-05-29 08:44:37 |只看该作者
我就不信我这么多分权限不够。。
回复

使用道具 举报

1

主题

0

听众

57

金钱

二袋弟子

该用户从未签到

10#
发表于 2015-05-29 11:39:40 |只看该作者
啦啦啦啦啦啦啦
回复

使用道具 举报

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表