该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 6 h$ u$ X7 G6 i0 D: \* F/ p+ F
! M* C A2 Z- k. w+ V! G# l
2 | t- C- l+ _9 T8 l( Y3 J 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
4 z Q- B( k* x ]1 m
8 \! @8 S4 W# Q* K( U- import java.io.File;+ F" T9 B* R" O. |* X
- import java.io.FileInputStream;
2 |) B7 X) o0 r6 A9 O - import java.text.DecimalFormat;4 r7 j7 o* A* H6 T2 `
- import java.util.ArrayList;. n% P) ?: T2 c3 [) ]) u
- import java.util.LinkedList;
1 C6 w9 }, A5 W8 {9 e7 }9 u - import java.util.List;! Z: N* x+ N4 ]1 ~, ]: p- I( `
5 M4 P x5 M: r# S$ ~6 {: l- import com.uudisk.domain.DirBean;# s! O) D9 G1 a( `
- import com.uudisk.domain.FileBean;
1 I9 ?5 Q0 Q3 i% R- d1 f4 D - import com.uudisk.domain.RootBean;
# O( l1 C3 T2 N0 Y& M1 N+ x
2 h. H+ A/ Z. K8 y( W- public class IterateDir {6 Q8 ]9 [4 @) B# M* v+ ^1 R
- /*
5 k+ A' l6 M, Y; N X2 k - * 获取根目录信息
$ q! t9 J: n! l! G8 L. n0 ?; H - */& E$ J% _" P! J( F, \
- public static List<RootBean> getDiskInfo(){
) L1 L2 K+ ]. v) W - //获取盘符# v O( j6 S1 Q' s3 m* \! z* l
- File []files=File.listRoots();
: F" t6 ?" X v% n8 y5 ?7 x3 Z - List<RootBean>roots=new ArrayList<RootBean>();: n) X) Q- Z: s1 \, a" z
- for(File file:files){5 o& O# x, E1 W5 _- h4 y
- if(file.getTotalSpace()!=0){
s; k, G# X, D - RootBean rootBean=new RootBean();/ Z1 E5 @5 d" j7 Y2 ^0 e0 y
- rootBean.setDiskPath(file.getAbsolutePath());& z- e/ S- l5 h+ f) P
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");, H# [5 G! o4 q6 P0 `+ r
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));# I3 u* x" v: C+ b" E. ?: \
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
+ A7 ?! q# I+ o( P! @! | - roots.add(rootBean);5 f* t' W; ^8 O# G& `
- }
+ P1 A/ ^. T" n, X - }
9 p3 [& f- d/ r- l% z* J - return roots;( `& O; [" [$ q% h% y* a0 f
- }
; ]- q9 K3 A. D1 b2 v( S1 y - /*
% j5 {3 q q; a, @, O# u - * 通过递归得到某一路径下所有的目录及其文件
4 S2 O1 j5 h5 v) @5 t. j; t0 N - */2 s: g+ x, Q" R( S" \" X+ d
- public static DirBean getFiles(String dirPath) throws Exception{
1 }3 r3 w4 I* {" v9 M: M2 g; {4 m - File root = new File(dirPath);9 H6 j2 z/ p% d8 E
- DirBean dirBean=null;
' M( U, m/ H. m% ~* R- M% Y - if(root.exists()){/ T" j: T5 y6 U( b/ C8 R
- dirBean=new DirBean();
& z; U1 R' e c! ]5 e0 S - String dirSize="";# ?- _# s+ F& Y1 _& W# L
- int dirCount=0;+ V" |4 s" |8 k1 o _7 G
- List<FileBean> filelist=new LinkedList<FileBean>();
3 C9 q# q0 C) I( N - if(root.isDirectory()){
7 b) e; M. T8 w2 R+ c+ f - File[] files = root.listFiles();
6 r2 H' Y( m+ }1 R# H4 x - for (File file : files) {
% i1 q& f. ]8 a4 Y$ x0 O1 s - FileBean fileBean=new FileBean();
8 W8 Q4 z5 x; p8 S3 A - String realPath=file.getAbsolutePath();$ D4 m7 @: p+ T0 X: o
- fileBean.setFilePath(realPath);1 ?& j# ~. Q3 p- ~
- fileBean.setFileName(getFileName(realPath));
/ L# A1 q* @; `7 G1 ] a - if (file.isDirectory()) {0 ~ ~# K/ v4 ~) A' E
- fileBean.setFileType("DIR");7 s% N/ l; U0 F
- //fileBean.setFileSize(FormetFileSize(getFileSize(file)));( o" I5 u, f( m/ b, Q7 n L4 T5 A
- fileBean.setFileSize("");9 I6 I6 H h' i/ Y3 T6 G! M
- }else{5 F2 e, @: W, N' ~+ f
- fileBean.setFileType(getFileType(getFileName(realPath)));) E7 Z1 v0 z6 \
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));+ m) E$ |" j8 [! p
- }; U+ W3 @3 |* \5 J* ]" F7 S: H! q
- filelist.add(fileBean);
2 F' Q6 F: F# \5 n3 y: f" f - }
! \4 I' b3 s3 z% i - }else{1 `+ x. P. x {8 [2 G+ G8 B
- dirSize=FormetFileSize(getFileSizes(root));. P+ r' O0 h( H3 j8 d. B- K: z
- }( Y% J' s9 F9 P) V; U$ p& F1 d
- dirBean.setDirCount(dirCount);
2 @, Q- h6 p5 O9 o0 G - dirBean.setDirSize(dirSize);8 ^* y7 o2 W9 i3 f1 Q- C# ^9 R
- dirBean.setDirPath(dirPath);- E/ ^4 N5 m9 w1 t3 ^
- dirBean.setFiles(filelist);: L5 v6 |! E( [1 H- D, \# o: I, R
- }else{
0 `) h8 e3 F$ x$ }( U, L& Z - System.out.println("文件或文件目录不存在");
, O9 D8 Q% t) N' D7 Z' H - }
w% {$ ?( j/ c( {. Z9 m - return dirBean;
1 _6 c; N9 F6 R' v2 R - }. ^% H, G1 N9 t7 g" j
- private static String getFileType(String fileName) { S# h; V0 `2 L1 X
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
5 B7 a0 ]/ |5 i! m% z- H - }6 O: M7 [* `$ v
- //获取文件名
% h8 C2 B, J% d) J: r& Y3 _ - static String getFileName(String filePath) { m5 Y5 [/ u* d y- x, R5 W* d7 z
- String [] fileItems=filePath.split("\\\");9 I0 h5 v) J. h& j0 o9 m1 q
- return fileItems[fileItems.length-1];
% q4 S! F9 q9 g$ J - }9 b; w3 W9 Y8 D* L( m& r
- //取得文件大小
) L1 y# I+ ~ o0 P3 M1 I4 c5 f - public static long getFileSizes(File f) throws Exception{
8 |# K. Y4 k$ s9 N% m - long s=0;
) U9 k/ ]) f$ J- ` - if (f.exists()) {
, D: l% a6 p- Z2 j' l - FileInputStream fis = null;% d9 R0 p5 y; j9 _
- fis = new FileInputStream(f);% m: p/ P% p4 q! S' N8 s4 d. V9 y8 _
- s= fis.available();
$ \1 c: ^$ U# S - } else {
" M+ ~8 u2 k R - System.out.println("文件不存在");; d$ Q) d# M/ q) I
- }
Q1 R, S( O4 J d; d - return s;% O k4 f8 |5 V5 S$ T% r u
- }& t- v( Q; P. f
- //取得文件夹大小
; R5 O$ Y Y/ p6 L' v - public static long getFileSize(File f)throws Exception
! |/ ~% m4 }# H7 k2 n - {
2 ?2 ^' u' \& z& W% x - long size = 0;
& B1 Q3 T3 Y& ~6 } - File flist[] = f.listFiles();. I* D/ `0 M( O5 z
- for (int i = 0; i < flist.length; i++). o1 ?. k8 E% C; \* I
- {+ T0 @/ ~7 O, _1 o* M% p$ C4 I& R! _
- if (flist[i].isDirectory())
, _2 ?# V+ [- D8 n1 _" s n: o' S7 W - {; F" K) O9 N. f, @! B* R& ^
- size = size + getFileSize(flist[i]);: s: k- ~; F$ h9 P8 V) t8 j5 ^
- } else
7 c6 }4 A$ w) w; h8 x - {
( X K. r, Q; y) o! ^- b j - size = size + flist[i].length();
$ D/ p6 `( s6 h7 e - }
Q4 k7 _, O P6 a8 g% r - }
- f9 _5 w* }* g* i# v - return size;
: C7 Q' r0 ? K: D - }
3 j; l+ t9 f3 U6 } n8 W k! N - public static String FormetFileSize(long fileS) {//转换文件大小
0 e, A0 f/ V( f6 N - DecimalFormat df = new DecimalFormat("#.00");. ~! x' _" ?! q7 y+ l# ?# {
- String fileSizeString = "";% w/ U& C7 Q- P" f
- if (fileS < 1024) { B! d" b: p1 V9 p' V6 A" L
- fileSizeString = df.format((double) fileS) + "B";1 w# O, k/ s- P2 _. H
- } else if (fileS < 1048576) {
, L |3 E: i0 x/ L$ m - fileSizeString = df.format((double) fileS / 1024) + "KB";
3 B7 ~ S& J. P& v6 i5 ^/ Q - } else if (fileS < 1073741824) {2 y7 \ a5 c) ~; d& H/ y8 ] ?
- fileSizeString = df.format((double) fileS / 1048576) + "M";' m* \/ r( W6 o( q* t' D0 _
- } else {
. j) c7 @: A7 F8 M z - fileSizeString = df.format((double) fileS / 1073741824) + "G";! f2 z0 `" n$ O! u
- }
# L# \5 s1 m+ O - return fileSizeString;
' g! L' g- F! Z: n - }; U& L' d7 O# D
-
- U6 J1 g3 X8 v2 v+ l$ K - public static long getlist(File f){//递归求取目录文件个数1 Y9 K' p* P% V
- long size = 0;0 ]. P4 J! K# i
- File flist[] = f.listFiles();
: F& S8 Y8 M' X3 J$ Y$ ^& B; C - size=flist.length;
1 m2 l; v" U$ A1 d- H! T( a - for (int i = 0; i < flist.length; i++) {1 c- _8 [- t2 _, d, K9 [
- if (flist[i].isDirectory()) {! N* A$ {7 i0 ~" e
- size = size + getlist(flist[i]);; {& h4 @7 m$ t2 d# |, m, ?
- size--;
2 z! c0 E8 B6 X0 F Q2 U9 X7 A% b - }- x* t* N b# D0 u! X1 ?
- }
1 v2 L# T9 \4 d4 Z& C O* D - return size;
9 i! V, X# A; K5 q( l6 ^0 A - 6 w+ `3 {2 ?0 ?; |$ x
- }1 ^+ V1 G$ Z" G4 L# F1 b3 y
- }
复制代码
3 o! _! D! K7 t! U% J- EJavaWeb实现显示本地文件目录项目源码解压码: 2 x. v- j7 M7 g" f
4 ^& \, ~5 x' m6 v/ z & Z2 r9 h, h* G3 j% d) Z& f
|
|