|
该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
8 _7 S. n ]3 t% g3 H$ u. i, N
& W& Y+ u% L1 i1 p5 M8 {, z
1 Z& l6 J2 t A& j+ P 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
1 f5 m, W3 @" c7 ] - 8 v+ V! E# R1 A$ M t5 z- ~$ b: D
- import java.io.File;0 z( }6 v/ S2 ~2 [) C
- import java.io.FileInputStream;
6 O/ G: l& q! `9 O4 V- q7 T7 F$ x0 d+ a - import java.text.DecimalFormat;) o4 m" J! X5 o$ @
- import java.util.ArrayList;
) s! m# {& N4 X3 f( [ - import java.util.LinkedList;8 [' L9 E, c3 p/ r, R) y
- import java.util.List;
+ @9 l: ]* T, m
- G* L. T& ~% V7 U3 o& e- import com.uudisk.domain.DirBean;
5 V0 D. s3 r( r; ~5 J4 N5 i - import com.uudisk.domain.FileBean;* c4 e- [" ?3 M, b0 o% V% P; w
- import com.uudisk.domain.RootBean;0 T f$ ^4 B( z7 p2 D& E
3 }. }1 m( U+ Q, s- public class IterateDir {: ~# e& E4 S4 H. d$ y8 e* s$ M+ w
- /*
K5 I$ D* p8 M - * 获取根目录信息$ _ L9 S4 N8 Y$ G" f* C9 k- i5 J5 e
- */9 C7 A) t: A+ ?8 w
- public static List<RootBean> getDiskInfo(){
- ^& r) k6 B' N - //获取盘符 U. [0 [6 y6 m4 `5 N
- File []files=File.listRoots();
, b4 E u( M9 n' a' @ - List<RootBean>roots=new ArrayList<RootBean>();
3 H% L; v- X3 n, A% s w- U, P$ a0 k" R - for(File file:files){ b: D" R i: O/ _- \/ J6 v1 l
- if(file.getTotalSpace()!=0){2 L) `- Q/ z, S3 D' x9 r; Z _
- RootBean rootBean=new RootBean();2 K9 Z2 ^! O2 x# a5 A
- rootBean.setDiskPath(file.getAbsolutePath());8 m& v; R* O/ i- m N+ @( S
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");
' J: ?$ P' m$ a% D! `) }7 ?9 F - rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));* D5 D8 S$ d6 s$ n
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));: ~2 K! W( h: l8 {1 J
- roots.add(rootBean);
$ U1 X% x' _0 } - }
/ u- `1 ^. v9 z8 }! j8 P/ T& H( r - }6 G* v. l/ s9 b: c% v6 G! f
- return roots;+ G% a. T/ `1 R# L- H6 I
- }
8 B% w1 _" C" M9 V - /*
7 w* c* S! P% `4 d A9 f - * 通过递归得到某一路径下所有的目录及其文件
* ^6 \; E, k, y B& p' s, v6 g S+ X - */
5 Z1 Y$ F6 R5 y7 _' [2 Y - public static DirBean getFiles(String dirPath) throws Exception{
! H; h6 B* N# | ?4 k- B( j" B* u - File root = new File(dirPath);# Z `' K: N! P* B2 j( Z w
- DirBean dirBean=null;: r9 g$ ], T% d @ ~- F
- if(root.exists()){
$ _( }# B/ n* S# M a, K - dirBean=new DirBean();$ G/ b. v8 w! F
- String dirSize="";/ ~# u8 v1 D2 w& P v; ]8 I
- int dirCount=0;
8 j4 }- ^ |: t3 n1 y& e - List<FileBean> filelist=new LinkedList<FileBean>();
: k$ E* Y: Y6 ?1 l - if(root.isDirectory()){, `: F0 s4 B/ N4 W- Q) ]
- File[] files = root.listFiles();" }, S- F8 P* Q% ?
- for (File file : files) {
+ j7 l. k' ?- N' o6 W# I0 ^$ j" Q - FileBean fileBean=new FileBean();3 B" Z% b1 o6 Z2 c& h+ p( L
- String realPath=file.getAbsolutePath();
8 ?) X/ i* b8 B0 I - fileBean.setFilePath(realPath);0 Q$ U% {4 i9 A
- fileBean.setFileName(getFileName(realPath));
* u" q9 b9 V, q( ]" Q, M; L$ y - if (file.isDirectory()) {2 F2 @$ w6 O) |( P% t" W
- fileBean.setFileType("DIR");
" z5 o4 P# ~3 b$ Y - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));) I* y3 q1 C+ y. m1 ]' `
- fileBean.setFileSize("");
2 Z5 q7 J, w6 O9 `$ n; T+ j) u - }else{% k, D! A8 q. ~, E$ x: x% J; G
- fileBean.setFileType(getFileType(getFileName(realPath)));
( q, j3 q! ^- R& J8 H% D3 j9 R - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
' F: n# b& C! Z: h! ?2 f+ y3 {+ I - }
( K+ ^3 F8 C0 x7 j$ s* K - filelist.add(fileBean);
- r: C9 ?* _# W2 {9 z( P# h* A9 _ - }
4 c; Z5 `4 d: W. G% s0 H - }else{
0 u$ p1 R0 r6 J* L; Q - dirSize=FormetFileSize(getFileSizes(root));, @2 H) D# U4 @! a H8 F6 F1 ?, \4 k: T
- }
0 H; t7 s5 c' a7 J+ [5 L - dirBean.setDirCount(dirCount);4 L8 ~3 D! F5 C. |8 ]) k2 q# c7 z
- dirBean.setDirSize(dirSize);- D0 x4 ^: v" \; f8 o" \
- dirBean.setDirPath(dirPath);
1 V+ ~+ j* [5 b - dirBean.setFiles(filelist);0 g- I* u/ D1 l
- }else{
) R9 m5 t( r+ R; _5 w - System.out.println("文件或文件目录不存在");
) t3 b9 n! N5 B& |- I - } " o6 I- `) K9 u
- return dirBean;! }$ f* @1 ]8 k1 A
- }8 T) M, i# i o! ^7 |
- private static String getFileType(String fileName) {
9 a# e& Q$ ^2 A" h& g6 G - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
. ?& @9 L' S, A! m) T - }2 |2 ~6 V: s( z& O8 s9 b
- //获取文件名
. Q L1 C, c; [1 Q3 g - static String getFileName(String filePath) {
9 ?2 [: M Z: h7 y# ?+ Q7 X - String [] fileItems=filePath.split("\\\");
+ t$ X( m; Z r- _& J0 ? - return fileItems[fileItems.length-1];% t7 C, V0 F D% ?2 J% c) t% O
- }
( P4 v: `$ ^ n; d6 T - //取得文件大小4 m4 u! H# A# B4 `+ p
- public static long getFileSizes(File f) throws Exception{( Z9 J1 t! X2 g+ h% R; p0 h" b
- long s=0;
. [: T& P& N4 a* z$ ]- z! J - if (f.exists()) {$ D7 F, A8 Y' s& m( W7 G( W5 A$ }
- FileInputStream fis = null;' ~+ u: R6 R7 d) y, y3 \) K# a/ c
- fis = new FileInputStream(f);
7 d I( E5 [' n h - s= fis.available();$ I4 N* p- R0 S a( j: o$ a
- } else {, u: Y- }7 v& l2 I& e
- System.out.println("文件不存在");5 p) `9 N) _. J
- }
K: n" ?. f1 D0 m/ e) V - return s;
6 y% {* B5 k5 M - }
! Z1 R& f; }* {* v7 U - //取得文件夹大小
. @) d Z7 j; \4 `- p L( y - public static long getFileSize(File f)throws Exception1 R' \8 q: r5 i. E
- {
7 L4 L" a7 g2 [, Q - long size = 0;3 j. J3 R8 p, m8 A" Z
- File flist[] = f.listFiles();
/ ]6 Y: E! X3 B! F# {0 q' f7 W; ] _3 e - for (int i = 0; i < flist.length; i++)
. `& H0 q2 F( v3 G9 I - {
7 _/ a$ T. ]+ D - if (flist[i].isDirectory())
$ T( d( A- C7 } - {$ P% Z( \8 D: u8 F. S6 F
- size = size + getFileSize(flist[i]);! I2 R* }4 z1 J. q) _7 N& }5 b4 f3 y8 f
- } else4 p8 Y, J# V2 G
- {
6 K' s- \$ ~- V+ W4 U0 v1 ? - size = size + flist[i].length();
( l' S9 H1 E& O1 K& b5 e - }
2 G% `. U9 M4 y. H% h( k - }9 Q' G2 @) J7 O H# S4 R$ f
- return size;
D3 D6 R4 L% F. `# X. I - }
! u* J2 B! j9 R& [" @$ N5 h - public static String FormetFileSize(long fileS) {//转换文件大小
0 H y1 u" C ~. b/ ~9 N. N& } - DecimalFormat df = new DecimalFormat("#.00");
+ B1 Y& {. `! X" b. i" u& f0 ~ - String fileSizeString = "";
1 [9 E) \) z. A* k+ J - if (fileS < 1024) {* h- f h) h' B3 q- k9 n
- fileSizeString = df.format((double) fileS) + "B";) {' O) C( D9 K, n; j0 v" [' t/ G
- } else if (fileS < 1048576) {
+ r2 z3 k# M" o - fileSizeString = df.format((double) fileS / 1024) + "KB";# ^* ~0 ~3 o. X( T, {9 {
- } else if (fileS < 1073741824) {" H& G0 c/ @& X, B( n1 z
- fileSizeString = df.format((double) fileS / 1048576) + "M";
$ k5 E) S" \# ]7 }/ C - } else {
& L+ B# N, A6 Y% }5 A' l* y - fileSizeString = df.format((double) fileS / 1073741824) + "G";7 q$ c3 b: {7 [& v' |4 T6 X( ?
- }
5 O5 i% ?" t/ o5 ?' N& B; y - return fileSizeString;
# _' D7 U/ C! b* G1 j3 ~8 N - }4 V- I K+ e! q% a
- 9 C; I2 }- z1 D
- public static long getlist(File f){//递归求取目录文件个数
6 t* L1 Y. V6 M4 p @: E - long size = 0;
$ q6 D+ }1 v+ r - File flist[] = f.listFiles();4 j' m. r4 m. }( e, Z, ]
- size=flist.length;
1 E2 H* n" u& L5 B( I9 @ - for (int i = 0; i < flist.length; i++) {
- p7 `* H! N( } - if (flist[i].isDirectory()) {& x, Z' m- j/ h4 X7 t& V
- size = size + getlist(flist[i]);
) U: M. s! p7 n, _ - size--;
. ]1 Z* }+ ` b; I7 H" U - }6 B' \6 S' I; Q# a0 M* B
- }$ f) y, w' G: [: R% G7 X. m; q
- return size;
, D2 O( z* C# Q# A7 u$ s
) \2 D, y5 Z3 l- }
1 v" G( F! [+ M2 v: d9 ?" Q- c, S - }
复制代码 / ~' ?& B/ C% q1 W. R5 K3 Q ~
JavaWeb实现显示本地文件目录项目源码解压码: 4 h/ I" }: e) W9 G6 I8 U! |4 q! E6 P
z/ R- H2 L5 Y& ^
; x: x3 l0 v6 r4 E9 [7 Z% @7 Y |
|