该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
5 F0 v2 x2 P9 z4 M* s
+ \! k8 l+ `5 w
3 z! u% L' V* {7 L
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
# V, V4 X M- P; X, {8 | - + _+ k# M$ H# ?1 Z
- import java.io.File;/ G2 T; g9 l1 V& h0 i: K1 Q. p; w- B+ C
- import java.io.FileInputStream;% R3 Q) ?0 y# T$ o6 X. Q
- import java.text.DecimalFormat;
* a) C- l2 f+ E4 e0 @# H: V - import java.util.ArrayList;
6 ^& l! e2 [4 |, L5 P! ~7 D - import java.util.LinkedList;
. F1 V" ?( @: i. D - import java.util.List;
4 b R7 H1 d, ^$ ?& m
3 Q4 e5 {4 M* `+ @4 W, @- import com.uudisk.domain.DirBean;5 x* I$ i) w i+ h+ P
- import com.uudisk.domain.FileBean;
5 _, `. X: |9 L- a% Y( H) _ - import com.uudisk.domain.RootBean;1 R+ e* _. [- @
' \) K! [ r. H( s/ a- public class IterateDir {* P) u2 Q( R' H! Q! s
- /*
s& _6 H4 Z) b/ ~ - * 获取根目录信息
0 }9 P9 o3 [ R: ?6 f* v - */9 U0 x" d# D! Y% }$ d3 |. R
- public static List<RootBean> getDiskInfo(){
4 A2 O# I% w4 p& ^6 L8 `# O/ | - //获取盘符
; L1 W# H* Z8 I' R. d. ~7 e - File []files=File.listRoots();0 C4 S( u2 g& u" x. ` @7 x" ]
- List<RootBean>roots=new ArrayList<RootBean>();
6 I) q& a+ ]. P' F - for(File file:files){
: I3 k0 {2 H1 V8 @ - if(file.getTotalSpace()!=0){
9 k/ z$ i. {2 d p' b* ^ - RootBean rootBean=new RootBean();
6 r3 d) }- r: V, J+ Y' Z% t: H - rootBean.setDiskPath(file.getAbsolutePath());' U* Q; a1 y/ R, f
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");& K3 @1 p. d0 G4 x( d6 p
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
8 x, v; `- u& w - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));# w6 R @! b7 f, S8 f8 L
- roots.add(rootBean);) w2 g* x( b C& ^: @: U2 a
- }, t4 I' U* T$ j% B
- }
~9 n: n1 o, p1 b& k1 { - return roots;
5 J! H* T2 D; @: M/ x' P$ ^- j - }5 k: K m6 C, ]7 \9 d0 [; f6 Y$ I
- /*
4 }' C9 x x: m% F# @ - * 通过递归得到某一路径下所有的目录及其文件( _, Y% ~0 n; J+ x, I. }, X
- */
2 z0 ^, |8 u0 h1 t - public static DirBean getFiles(String dirPath) throws Exception{+ M# a$ ?+ P% C1 [2 y
- File root = new File(dirPath);! M! y5 K! U$ `. j' r& S
- DirBean dirBean=null;5 _' A3 U4 q% K, \1 V. k R
- if(root.exists()){7 c0 ~ ]. E9 M+ l
- dirBean=new DirBean();
/ L* ?& `5 W7 O& P - String dirSize="";* U" C0 Z& n6 a# a
- int dirCount=0; u* {$ G* w) F [: z
- List<FileBean> filelist=new LinkedList<FileBean>();
/ ?( v! |& l% k, V8 J - if(root.isDirectory()){8 N; o% r- T1 \
- File[] files = root.listFiles();
7 H( Y; h2 |! C/ W& q - for (File file : files) {- w8 y0 k. S, {" S7 a7 w
- FileBean fileBean=new FileBean();; c/ N6 m4 K. ^
- String realPath=file.getAbsolutePath();
, R4 P! i. y, \/ d1 ^ - fileBean.setFilePath(realPath);6 ^- \9 B: P" M% b- Y! f
- fileBean.setFileName(getFileName(realPath));
" K! t: Q- s+ V7 j" t1 U2 q - if (file.isDirectory()) {
3 Z$ |. X4 z4 ? N. F - fileBean.setFileType("DIR");
- l/ F4 F' M4 K( _# F( }, z - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
6 q2 d y/ q7 `; B3 z8 H/ f# U7 J; z - fileBean.setFileSize("");; P/ C8 U2 _& T [9 F
- }else{8 v P3 I5 m" F! m0 G* S! C
- fileBean.setFileType(getFileType(getFileName(realPath)));/ N) }- g9 v2 }
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));, O& ]: c+ q' E% j& \! w
- }
6 o2 |5 g4 `, k8 ?) a8 T8 k$ T% q1 C - filelist.add(fileBean); Q+ E* `. i9 h# {* \3 _0 W9 z; C
- }/ n% S- J$ m6 W4 V( Q8 ?% @$ a
- }else{9 c" Y* Y& h& V% `; N8 A2 N# ~5 q
- dirSize=FormetFileSize(getFileSizes(root));$ D' H4 h! C1 Q I5 ~; u5 ~
- }
7 Z% u3 D3 ]+ p" } - dirBean.setDirCount(dirCount);
7 R# B/ w2 i) N' i1 V' n1 c' ] - dirBean.setDirSize(dirSize);* c0 s1 x8 R0 l; T+ h* b! f
- dirBean.setDirPath(dirPath);2 O8 @2 J4 Z; E* y& X& h; y* @: Z
- dirBean.setFiles(filelist);" a9 g! ?; P3 c0 s6 J- y2 q
- }else{
$ E: f' [ Y* e& x4 W - System.out.println("文件或文件目录不存在");
0 U( ?9 ^8 a2 k# K5 [- s - }
$ Y: J8 L1 v. C' F7 f* \ - return dirBean;0 A+ g6 @; {9 ^
- }
( x9 X! w/ {; y- G - private static String getFileType(String fileName) {
# S0 v8 [+ E2 Y$ e' l1 ^ - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
! n$ Y2 r9 E: ]5 z8 b% a - }
5 z( y7 f" _0 d5 K - //获取文件名6 e6 b2 `6 {( j4 N" J& e7 o
- static String getFileName(String filePath) {! h/ J3 h6 D( z N* I1 ?& K
- String [] fileItems=filePath.split("\\\");. _0 `3 F' E+ P, G% G0 r, e
- return fileItems[fileItems.length-1];! o: ^0 s" M* V
- }# l/ D& W" @1 D, v+ [5 t
- //取得文件大小
/ C: Q8 `, \6 P& U& p - public static long getFileSizes(File f) throws Exception{# {! ^ H: S2 j' L$ f, l. |: B
- long s=0;$ `7 U+ n5 K9 h& K
- if (f.exists()) {( w1 O! A* K, Z+ v
- FileInputStream fis = null;
' s8 M7 q% _3 R3 G# G - fis = new FileInputStream(f);" k: _+ z) n# T, c: B. z; ^
- s= fis.available();
: g# W1 J( L! @4 f% W; p" i' ~ - } else {5 j) M( E" D+ N& ~0 ~. ?* m
- System.out.println("文件不存在");& y& ?; A& R* y8 p1 D
- }
% b! ], C+ r( q% y+ G0 T - return s;1 I n: R! ]! p6 }( z! X1 c
- }
4 r; y7 f5 K0 ]. h" z8 B. ]7 J - //取得文件夹大小
4 q( _/ r5 t& s u5 M+ `7 E - public static long getFileSize(File f)throws Exception
, X# |# d9 h, @' e: _- U - {
. I& T$ r, i7 C% A - long size = 0;
! t* X8 T# _& m* y% ]8 `( M - File flist[] = f.listFiles();4 @- g G* T( ^0 e4 t$ a4 c
- for (int i = 0; i < flist.length; i++)
+ I$ v9 H, v: U- W4 o7 m - {
3 o, S- F6 p7 d - if (flist[i].isDirectory())3 X7 V( M" f7 H/ b3 f6 Z$ G
- {
! n1 }* ~! q* B- [- }! T - size = size + getFileSize(flist[i]);
& g1 u, Z) l! N4 y+ P" S# A, k - } else/ }$ f6 g* ^- P) a
- { \- p, D6 z+ ~% U" \( N- W
- size = size + flist[i].length();3 Z. l- k- k4 H. `
- }+ ]% F9 k# [5 L% ?, u0 D
- }
6 ^2 A& b7 m1 W( x% T* I - return size;
% K E4 _6 e! c! ]! x E - }# O' |4 a5 M) L* s
- public static String FormetFileSize(long fileS) {//转换文件大小$ S4 P- t. z- ~. d# u
- DecimalFormat df = new DecimalFormat("#.00");3 R5 v% z: C- n
- String fileSizeString = "";/ ~; E' q7 r' C& z4 _* J- c5 X
- if (fileS < 1024) {
# E1 s% v3 Q7 B' E8 \$ ` - fileSizeString = df.format((double) fileS) + "B";
: v. u$ V: l6 S: O- ? - } else if (fileS < 1048576) {% l. [- Y/ w4 a' t% F8 o
- fileSizeString = df.format((double) fileS / 1024) + "KB";
4 m6 V s: P9 ^; Z( f! ` - } else if (fileS < 1073741824) {
4 j9 c; m+ D w# y5 |" B, P - fileSizeString = df.format((double) fileS / 1048576) + "M";* J* \( \6 @! I; }! t& R3 `
- } else {5 l* W7 P/ \. m) l: f
- fileSizeString = df.format((double) fileS / 1073741824) + "G";
* o( y2 A9 A e2 \- G - }
$ w# u' o; D0 S - return fileSizeString;" C6 [' x$ O0 `; O3 p- {
- }# X5 f9 Q7 Q- \$ N/ j& k
- . O$ n$ J' ]" S- C4 @
- public static long getlist(File f){//递归求取目录文件个数
- _! D/ N% m2 w5 X0 A - long size = 0;- d- F5 f/ F; |0 q; i3 N9 t
- File flist[] = f.listFiles();- x5 ~% ?2 X: k+ X
- size=flist.length;2 a' i+ ]2 w3 w) \. {5 H
- for (int i = 0; i < flist.length; i++) {! Q; h6 O' S3 b2 ^/ R5 h
- if (flist[i].isDirectory()) {
9 ~4 ~: O6 K$ G - size = size + getlist(flist[i]);
/ Q, p" w/ ~* D! y# p - size--;
% _& t3 m! ?/ U - }
' H, G6 _2 x/ d- Q& B - }
8 C2 H/ x. b& t0 e0 G( b - return size;
- O* T9 I: ~, h
. F% ~3 ^; M- \, H; L' W- }3 b/ Y1 n7 W4 f2 v6 O
- }
复制代码 ' j1 E) t+ s0 l- |
JavaWeb实现显示本地文件目录项目源码解压码:
) h* A" w, z& \6 z& P
' Q1 p. Z. y) R# h7 O
- V, j3 } l6 S; `. _2 w |
|