该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 X$ @+ y9 k# `8 V9 N3 s6 B
/ N) q) v9 W+ X+ X0 _0 w# w % C8 p2 C Z. T0 `
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
8 f+ }$ [. e! v# c
9 g. v: W) s8 w6 q- x- import java.io.File;
7 r6 A; z% r+ D - import java.io.FileInputStream;# F9 o! r3 j7 \2 }9 E q
- import java.text.DecimalFormat;
& M3 ]& r# ~3 ^+ C' Y - import java.util.ArrayList;, T4 J" x: S# h+ ~% R* W
- import java.util.LinkedList;
" j: g# J7 L& x8 f1 t0 H - import java.util.List;8 y" @4 w4 Z8 Q5 G7 b
- ( A1 e0 k0 {3 l" v- z
- import com.uudisk.domain.DirBean;8 [* g8 z6 \# O9 v( C# F
- import com.uudisk.domain.FileBean;
$ G. }2 L: E5 i7 {, I- o# j - import com.uudisk.domain.RootBean;
7 C! O+ i7 L' N
! {9 {! Y- L# b. A6 K0 w, r- public class IterateDir { e- }. V* T8 w" p1 n" u- k, r
- /*
9 i0 {$ r3 h1 C - * 获取根目录信息
0 \/ m* F" k* N6 F9 a/ _+ j - */
2 k9 b- W" ?" V' B" G6 I - public static List<RootBean> getDiskInfo(){
1 \9 N7 w( _0 q8 {9 H& Y a7 { - //获取盘符
8 a) z4 g# `: v N/ W - File []files=File.listRoots();2 f% `0 i8 m# Z
- List<RootBean>roots=new ArrayList<RootBean>();; B( W; Y k# G& J; m: F
- for(File file:files){
$ `% p. k1 R! Y% F n - if(file.getTotalSpace()!=0){& K; L+ a; q; P5 |
- RootBean rootBean=new RootBean();1 T: g( ?/ E8 z3 |7 F' T
- rootBean.setDiskPath(file.getAbsolutePath());& v6 t; j4 X) m0 g2 q
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");# z6 R1 E7 g& G: t, z# U- p
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
; t& U- l' x: e7 ]5 C& [ - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));1 c! \5 z1 D# Y( x# O/ O7 X/ o. X
- roots.add(rootBean);* C/ L* v8 B9 Y: ~
- }% l$ c/ W! m6 O4 k7 _; v! P6 K1 {/ t
- }
; w# _# `9 C: @1 R0 } - return roots;2 M+ O. @. \9 H8 D9 v; c- \
- }. P/ g/ s4 G0 s( [7 `
- /*
9 X. |' t2 R/ F, i2 K - * 通过递归得到某一路径下所有的目录及其文件$ F! h h; M5 ~4 }% a! ^
- */
) G1 `* y7 m- U# y2 { - public static DirBean getFiles(String dirPath) throws Exception{
0 L! {7 _7 _) A0 V& L! p - File root = new File(dirPath);
; A: L* u7 a' Q9 v4 ~4 D - DirBean dirBean=null;
& }0 }( O- M$ Y1 X: F9 x9 h - if(root.exists()){) O2 v4 ?0 {! p4 \. B
- dirBean=new DirBean(); j. `$ {* O# k' ~; d* n
- String dirSize="";. ?) s' m9 m$ i( u9 b5 j
- int dirCount=0;, S5 E9 {" G( j, \* A
- List<FileBean> filelist=new LinkedList<FileBean>();, Y+ X) B0 h$ W9 T, z
- if(root.isDirectory()){
+ c4 o% F, s& T: P* H0 f. m - File[] files = root.listFiles();
5 R/ U w8 v2 P' k - for (File file : files) {1 p- [! R/ }! m* J! J. N
- FileBean fileBean=new FileBean();0 f$ f) _& t2 U% ~# g& F1 I0 T' g- q
- String realPath=file.getAbsolutePath();
0 I9 H) F z& N* S - fileBean.setFilePath(realPath);
( K, J9 h) \0 Q- s - fileBean.setFileName(getFileName(realPath));
( I& J+ `0 \4 x - if (file.isDirectory()) {( y9 x7 ~( j9 ]8 e
- fileBean.setFileType("DIR");
8 c1 m2 X, ]2 C' S - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));4 K' [7 s- T0 ]" f/ g" p; w
- fileBean.setFileSize("");) b/ x# ]* y$ J( s0 f; J$ s
- }else{
: N2 w* Z0 ?$ H: M - fileBean.setFileType(getFileType(getFileName(realPath)));
7 h, e# c7 Q& |; E! q - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));. i( o; D/ c r. w
- }
" Z% h: T) }4 A% S - filelist.add(fileBean);, _/ Q, G* V" P* k) Y& ~& q
- }
" b% a( |" \+ T - }else{
' x; r' }8 D6 n" g# A0 Q8 u! Q - dirSize=FormetFileSize(getFileSizes(root));
6 S+ y5 e+ ?& \! e- p4 J; x4 D% }6 I - }
; v# Z: r6 i: [3 e8 f" ~ - dirBean.setDirCount(dirCount);2 M! i% K4 [. x" J$ D
- dirBean.setDirSize(dirSize);
8 N& k ^3 y# ] - dirBean.setDirPath(dirPath);
# V: w6 V+ D- k: T - dirBean.setFiles(filelist);0 J) M3 s/ V) {3 |3 f
- }else{
8 P$ {: w# V Z' R - System.out.println("文件或文件目录不存在");1 b9 S9 k; \. E; s/ m0 ^3 k. C0 _
- }
; H$ U" r% Z7 Y2 t" e - return dirBean;
' b7 R2 L8 c) ], Y+ _. M/ a - }+ i; W8 K) d! c3 ^1 |
- private static String getFileType(String fileName) {3 x( J6 j0 s* ~& {& `( g+ S6 q
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
' E; D) B2 z" T3 v1 o, W - }
" j" f4 T$ z: A" z4 B1 B4 z1 [ ]. q- W - //获取文件名
) \2 |) U/ \5 q. u/ f. T( C - static String getFileName(String filePath) {$ e9 j) R: k6 ]8 i+ M5 T
- String [] fileItems=filePath.split("\\\");$ |7 X& m8 x# v
- return fileItems[fileItems.length-1];1 W$ J6 @& v% w5 G6 I
- }3 F) ^$ E, w! H
- //取得文件大小
3 A* v: A) W. T; T( _1 l# g - public static long getFileSizes(File f) throws Exception{9 P* A2 J- \( O5 j4 V
- long s=0;/ P+ O8 R. Z2 b2 r; C# V- C
- if (f.exists()) {: E$ V# a% n1 b+ Z, h0 g7 @- W
- FileInputStream fis = null;
+ @7 y# _7 K \3 P Z: X - fis = new FileInputStream(f);
G5 R8 L2 A3 t7 g; _, A - s= fis.available();
2 V! L+ I' U3 ?' m- j - } else {
' \3 a; }5 ` d3 a - System.out.println("文件不存在");
1 s I# O/ k" y, u& Y' j0 C7 V - }
& l5 y: _# C- T4 ?: ^, |0 a5 c# P - return s;
+ X# I; G( B+ ~4 W! Y - }
( J8 P, x- I1 L0 t. F - //取得文件夹大小# N& M( ^" I2 `) L& K8 r$ J
- public static long getFileSize(File f)throws Exception, n$ R6 d- e' s
- {0 c" [& P* D7 ~' |( Q5 a" ?
- long size = 0;5 N4 Y* w. j+ F
- File flist[] = f.listFiles();; g& r1 v$ F0 [3 \6 P
- for (int i = 0; i < flist.length; i++)
$ {4 C; C( {7 \. F# H, o9 n - {
8 f+ D' L! g. w - if (flist[i].isDirectory())0 c% f2 R& ~. C# D+ t
- {
9 ~( N% f1 v/ c+ _1 ] - size = size + getFileSize(flist[i]);
( k: `: }; x/ P% M2 @4 f, k( _ - } else
! V9 P) J# o8 l0 p1 s$ P% | - {
( b+ W7 q7 q( y" O n& [ - size = size + flist[i].length();
( U8 E8 o' R+ r2 ?0 x+ E; B' ^ - }3 Q% w1 b: v; J) A- U& c
- }
4 \; h: g3 p, l - return size;
! [# D ~# y& s/ I0 X - }
2 h2 Y3 i R- w' _ - public static String FormetFileSize(long fileS) {//转换文件大小
& R4 E: R/ H( B - DecimalFormat df = new DecimalFormat("#.00");( `. U6 F( y. l# j% Z; ]
- String fileSizeString = "";
3 }& l6 A* [5 B6 D% h) W - if (fileS < 1024) {* W; \ p j l n- r
- fileSizeString = df.format((double) fileS) + "B";
# i( k- s* p8 ~* p o/ d" r t - } else if (fileS < 1048576) {
) C& O% O3 l9 v# c$ @- e' A - fileSizeString = df.format((double) fileS / 1024) + "KB";3 R- u" W- a7 K( f( S
- } else if (fileS < 1073741824) {! A5 v& J" Q: A; u
- fileSizeString = df.format((double) fileS / 1048576) + "M";% E; f; i. d+ o7 o: @9 v @
- } else {( s5 @6 s( Y/ Q1 \' C } s# X
- fileSizeString = df.format((double) fileS / 1073741824) + "G";% d% e' G4 S* a) s
- }' V% X+ }6 D! l2 V: N2 `
- return fileSizeString;
: Y u0 b& ~6 e$ ]4 W) W - }$ @/ B, u0 L; [# E& D& H2 X6 O& h
-
# s- ?; [/ e$ B) H' W - public static long getlist(File f){//递归求取目录文件个数) U0 ?; K4 ?% A, @$ D9 i
- long size = 0;8 s. p* l0 r5 M# a1 G
- File flist[] = f.listFiles();1 k$ G6 Y& ^, y5 {
- size=flist.length;3 n8 k. O1 E/ ~+ W% l
- for (int i = 0; i < flist.length; i++) {
2 S' @2 F. Z/ S* v+ r% J( U - if (flist[i].isDirectory()) {8 h. }6 ^+ m. n6 c+ S. j- m
- size = size + getlist(flist[i]);6 K I5 S7 e6 l* r: B2 P
- size--;
! f0 G: a: G1 d; A' t6 Z) N - }
5 k6 I2 ]- R1 q, |( T- N* V - }
- p/ j7 y/ _; f1 T, a* `- F. S& u - return size;
( f L/ v( e0 ^ M z& e, J4 K
7 @# O' v" [9 c: l" C! K" Z6 u- }
# D% t& {8 e2 K' W+ U5 r# r( G! S - }
复制代码
1 l3 [3 h5 E- oJavaWeb实现显示本地文件目录项目源码解压码:
+ T6 ]: Y; \3 G4 z1 j$ p- J* U- v7 G1 ?2 N: _
+ ?0 L' x0 p. H6 p
|
|