该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
7 @9 W. m/ k( d* p9 l) g+ J
5 h6 k M$ J: r
9 `& n- V6 @9 O4 z# {' L5 F 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
# \$ Q9 H9 i/ |$ b
! M/ c0 W5 f5 G" R; M- import java.io.File;* {& {" j/ ~0 r+ ^' T6 E& M
- import java.io.FileInputStream;9 e( Q8 A4 O# \6 U; y
- import java.text.DecimalFormat;( a+ K1 Y5 v1 m) _$ j- x" J
- import java.util.ArrayList;
* z) X4 I3 {9 H - import java.util.LinkedList;/ ^+ `& q" f# b! O! w
- import java.util.List;
8 p3 }8 h3 l# B- |
, A- w7 q; `/ A$ v$ h/ e/ n' H- import com.uudisk.domain.DirBean;
& _- U8 Q3 ~6 Q; {% V0 r - import com.uudisk.domain.FileBean;9 h' o4 P1 P& D2 {( `7 s
- import com.uudisk.domain.RootBean;* ^4 P, e0 e6 g+ I Y
- % }: Q9 W- l# R* S4 {4 S
- public class IterateDir {
! |6 e3 \4 G/ N% Y! o0 a - /*
( ~( L6 k7 l; _ - * 获取根目录信息
& V- O, `6 a7 r- N$ T) A) P - */5 G. X$ m- ^4 U6 D9 H6 ^
- public static List<RootBean> getDiskInfo(){+ a* S6 n- K$ X/ O) b
- //获取盘符1 w. o" I- j# ?* }
- File []files=File.listRoots();! s' w( N! c- }' D5 o/ s
- List<RootBean>roots=new ArrayList<RootBean>();
1 h$ h: ]5 W- F; M2 i - for(File file:files){6 k1 X9 A; p3 H
- if(file.getTotalSpace()!=0){3 G5 Y6 D0 D0 z( C& M# Z
- RootBean rootBean=new RootBean();7 o3 L6 `+ [, y. N* V
- rootBean.setDiskPath(file.getAbsolutePath());
7 n/ W3 H; g3 j- T/ H' e: ^ - rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");, E3 G9 {8 I2 G6 q8 p
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));0 o0 q/ o. b: W; O/ i e
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
) S9 w( M! m) e) }" W! P - roots.add(rootBean);$ A& G5 m0 K. U
- }: G4 ^6 h5 p0 J( {; p8 J5 n
- }6 }8 B: s$ a! @
- return roots;) ]& i9 |8 n! \
- }
+ ?/ G N6 z1 y8 C; i5 Q. { - /*
5 r6 g. { N- b - * 通过递归得到某一路径下所有的目录及其文件
. P* F `# n) Q3 r0 g - */
$ T3 |" v- w% i$ J4 e w, `. w) z - public static DirBean getFiles(String dirPath) throws Exception{9 z: S6 r) }7 d. D. u, L8 g
- File root = new File(dirPath);& H' n! b/ _, ? i
- DirBean dirBean=null;, d# c' e# h$ c, j* k; J& `
- if(root.exists()){
0 f( Q8 j3 @3 {6 J7 B: E/ z - dirBean=new DirBean();$ S" j y' e2 v9 F9 S
- String dirSize="";
/ }( @! f8 i! r; f0 Y0 j - int dirCount=0;( C/ n n# Q& a4 J4 V
- List<FileBean> filelist=new LinkedList<FileBean>();, C0 q: h( N8 A+ J4 p
- if(root.isDirectory()){
9 ^, `8 o3 X; Z" p# Z - File[] files = root.listFiles();' N" D# p- D9 @+ I, j; i5 H
- for (File file : files) {
# H" ?- R, ^" } - FileBean fileBean=new FileBean();
8 D& z d! e9 U* |2 P - String realPath=file.getAbsolutePath();5 M; H. U) |) Q
- fileBean.setFilePath(realPath);5 d- n5 R7 r6 H$ s
- fileBean.setFileName(getFileName(realPath));
3 z7 h8 O8 A( b% r2 M* R! I - if (file.isDirectory()) {% U2 K2 h2 I4 Q+ l& {9 |1 f
- fileBean.setFileType("DIR");* n1 a/ V$ W; ^( |$ Z
- //fileBean.setFileSize(FormetFileSize(getFileSize(file)));3 u" q. X) z0 r) u' y5 o9 Q d& ]
- fileBean.setFileSize("");, `. h0 F) V3 _+ E% f: n$ \6 s$ }
- }else{0 l) T3 X9 a3 h- q
- fileBean.setFileType(getFileType(getFileName(realPath)));) X- c. `3 J1 B- y' W
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));+ u2 o, {; x" |* \8 P7 y ~& l
- }- n: N& A7 z4 [) l7 C
- filelist.add(fileBean);
) ?" x9 f# B. Y4 a - }
% i t [2 b" D4 t7 f. n7 ^. |( a - }else{# ?$ c& @* k& z, z5 Q
- dirSize=FormetFileSize(getFileSizes(root));$ N) f3 P3 S& \" T; w4 d5 p; f
- }
9 n8 r" T& N6 b3 ~/ z - dirBean.setDirCount(dirCount);
; T( y* f9 m B5 U B1 U - dirBean.setDirSize(dirSize);
7 m( U, X* c# r, ~ - dirBean.setDirPath(dirPath);
: x4 u) M, J' f& X$ z- ~ t/ p1 c8 v - dirBean.setFiles(filelist);
) L, m* Y; K$ Q# O - }else{9 }+ ]# W3 i+ m- w6 V
- System.out.println("文件或文件目录不存在");
( u6 O1 t! E2 g; Q# W6 N: ?7 q - }
2 [9 G3 y) x% ^, e8 M1 @7 { - return dirBean;9 y/ J( s* L2 X9 G
- }
) L( i/ X- a* ~& U {) a6 Z1 O) S c - private static String getFileType(String fileName) {
6 a4 M6 S1 g, r T. x - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
5 h6 U9 b- ?% l - }
& T' ]/ V, ^; W7 Y/ R - //获取文件名
/ B; _; u4 _2 ^( T% n. ^ - static String getFileName(String filePath) {
' Q* P' W6 k1 ^ - String [] fileItems=filePath.split("\\\");5 D3 y$ S! o8 L0 g, r$ L, v
- return fileItems[fileItems.length-1];% ^/ g6 f! P9 `3 u) w
- }6 @% g1 D! H8 F# r; p
- //取得文件大小. W: z! S7 J" ]* G/ e/ f& x
- public static long getFileSizes(File f) throws Exception{
B: z6 p# j+ H3 g% g9 F4 Z - long s=0;
: q6 [/ }2 a& Y/ d! E9 K - if (f.exists()) {
! A9 Z0 K7 a; { H1 c - FileInputStream fis = null;4 G0 z# F( r' o9 C
- fis = new FileInputStream(f);1 c& v* y$ T9 O1 \, I+ |
- s= fis.available();
8 i4 C/ m. ]1 g& H9 v/ g - } else {! X, u; _1 n- |9 r; A3 R
- System.out.println("文件不存在");
5 Z: c" ]+ }7 M - }
2 ?2 Y5 r! O. _' [% q: R) B+ Y - return s;- w; }, k" F8 Z3 V" h5 }
- }- T1 H. |& ` D% q) N* P( A
- //取得文件夹大小2 U' K" u* A! |
- public static long getFileSize(File f)throws Exception2 v. }" F+ s' D1 V$ @3 \' |# }
- {3 A% f9 C7 q1 u( j
- long size = 0;1 z, I; c4 y6 t4 K( ]+ R
- File flist[] = f.listFiles();
: M9 l) M( g: W( H! A1 h3 g4 V/ | - for (int i = 0; i < flist.length; i++)8 C1 Q1 O# l1 e" I+ B) F- M
- {
7 j" @) S; J& z* f0 [1 W - if (flist[i].isDirectory()); _' o$ E: s$ J' c) ]- j
- {
% m. Z9 V' m) c! K% I2 T, B - size = size + getFileSize(flist[i]);
" v. V8 ?, o) z9 V) v% w+ ? - } else+ I8 D0 r$ ~0 [+ ~% B. W, l
- {; j- }, J+ u5 j$ h" {
- size = size + flist[i].length();( S* k( ?) W3 ?: X& Q N: C
- }; t2 N6 h% T) z$ g
- }
; {1 N+ |* `0 A, ~/ z - return size;) d8 M+ M/ K k& E! s
- }
! p& t5 c. u' m9 M8 Z8 I6 C - public static String FormetFileSize(long fileS) {//转换文件大小$ c3 n/ @" @- m' W) D2 O7 V# ^
- DecimalFormat df = new DecimalFormat("#.00");
( Y( N' r# e2 b7 t& E' n, g5 ~ - String fileSizeString = "";
) i! A, }0 L z; m8 S0 d - if (fileS < 1024) {
8 @% L0 V0 z8 O: d& u - fileSizeString = df.format((double) fileS) + "B";8 A6 E3 |; w4 H$ v) y
- } else if (fileS < 1048576) {
& {+ }# x. j/ F; {4 G3 ^7 P) p H - fileSizeString = df.format((double) fileS / 1024) + "KB";
9 p5 j8 l" q0 i9 H - } else if (fileS < 1073741824) {6 G! n, d! E& c8 m1 J
- fileSizeString = df.format((double) fileS / 1048576) + "M";
7 }1 M+ J4 a3 | H# {9 X - } else {
( [% k% s7 K( a2 v" k0 @8 l - fileSizeString = df.format((double) fileS / 1073741824) + "G";& O6 M4 E. s& V
- }
- H* l% x7 p" M4 z5 x- [% ~ - return fileSizeString;
: Q( `" D: Q+ E7 _( s2 V. Z( K - }
" `3 n j7 }6 y -
2 x) G# O1 E# c8 B - public static long getlist(File f){//递归求取目录文件个数6 U+ p4 k: J- p) ~! q
- long size = 0;/ _0 J( z+ \0 E
- File flist[] = f.listFiles();
0 s) r* m: H/ N2 g+ s o* n& i - size=flist.length;; W) h) {5 R- B. R$ e/ x% r$ ^
- for (int i = 0; i < flist.length; i++) {
2 `+ F) Q( Q% t - if (flist[i].isDirectory()) {$ k! Y8 B) D8 v6 r0 C
- size = size + getlist(flist[i]);
* X C7 F. W. W$ z0 l/ x - size--;
_7 Y7 ?7 w( P; I - }
B+ H U: X7 w8 b2 S7 b - }
; U$ L. L' c6 Q! d+ A# T - return size;( ~ X- }# h8 s5 t. a- T
- 7 D4 R4 ~7 M* W8 l Y4 i2 L1 f& |5 E
- }3 Y: S$ Q; L1 D9 ~/ [
- }
复制代码
; `8 @. [6 s" X7 ^, M" z* U! qJavaWeb实现显示本地文件目录项目源码解压码: # E0 x" U- `* V# B# D Z
4 Q% x$ g/ K" C( f ) g, c1 F% S( y) U
|
|