该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
8 b/ d$ G% Q& z
) ^; `5 K$ I3 t+ u3 X, _ @
Q$ U6 T: n, R' ^& e 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;: ~* j: @+ A8 V+ G9 N
; {) h/ R9 Q6 m: i: x W6 H- import java.io.File;
; ~( Y' v8 }8 k3 [ - import java.io.FileInputStream;- o- w& `: K7 V' Y3 T
- import java.text.DecimalFormat;- h% {- a1 ?1 I; S
- import java.util.ArrayList;
% M7 o: O# i- Q) z - import java.util.LinkedList;: l" L2 g# F/ _- L; O
- import java.util.List;
' h/ L/ C/ l( |2 Q2 d3 S
: }0 E+ M6 i9 ^: d$ a! d- import com.uudisk.domain.DirBean;
$ a. O" O4 x' X2 Y. a' a - import com.uudisk.domain.FileBean;* j) Q0 B3 h, G: L! Z
- import com.uudisk.domain.RootBean;
7 @& I" a9 ?! Q5 h) k
5 s% T/ K6 F" m p- public class IterateDir {
- H! ^" J. L6 \& ~/ j1 S - /*
( L! r# w7 Z0 n1 i - * 获取根目录信息
" p; S. [ K1 W3 l. d4 ] - */
* i8 n Q2 s7 ~- j) a% I5 w - public static List<RootBean> getDiskInfo(){
+ D$ e9 `( j c/ ? - //获取盘符! u1 H# L. ^" A! K
- File []files=File.listRoots();
+ [1 q( p- I. k& ~4 U) d+ c5 i - List<RootBean>roots=new ArrayList<RootBean>();
" W! O% Z( j) H: p; |7 q4 n8 P - for(File file:files){
. Y" z' T6 K6 d* \- O# ^0 S - if(file.getTotalSpace()!=0){
7 K! ~0 f! z7 K9 F# \( q - RootBean rootBean=new RootBean();
+ A; {' x, `3 r Z/ l% q - rootBean.setDiskPath(file.getAbsolutePath());) B C0 x2 _/ ^3 _. K6 p% [4 u
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");
0 P3 C( T0 `4 h4 Q j2 w - rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
' n+ _* W+ m: d+ Z0 A, i - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
$ Y, V: ?0 n% s- h+ E2 ? - roots.add(rootBean);
7 k! y5 E+ A k* ~- P, o; v - }* f1 }: D6 I0 A* H- p
- }& l: q. @* P! i& n0 R9 x' U m) `
- return roots;
8 u+ M8 y: M6 A8 R - }
/ r p% W( m( W9 p2 i+ @ - /*5 X6 ~( K4 G _1 [) o4 h. G
- * 通过递归得到某一路径下所有的目录及其文件1 ^1 `+ x1 d7 O/ S" i1 h0 s" m+ u
- */
* L( A$ _( B" k& F" ~) ^1 w6 u3 G - public static DirBean getFiles(String dirPath) throws Exception{
7 W1 u4 V1 i& l6 Q" d R, J - File root = new File(dirPath);1 _, ]& e) c3 ?' }
- DirBean dirBean=null;
( C) w$ m/ n; _& U8 W - if(root.exists()){
: F% f. M" d e, f F+ V! A - dirBean=new DirBean();
% K: j2 `8 y7 [! [ - String dirSize="";4 Y' T' n3 I# [
- int dirCount=0;
j# h3 P/ V! G1 c8 n9 M* b - List<FileBean> filelist=new LinkedList<FileBean>();
' ]4 {) q4 d( O8 T$ r: f; Z - if(root.isDirectory()){
) t1 ^2 h7 Y+ s' ?$ \0 M! ]8 H - File[] files = root.listFiles();: x, H8 l8 T. J, \, a
- for (File file : files) {; Z% J) f0 M- o5 ?7 P8 x) y, c
- FileBean fileBean=new FileBean();
/ ~* T4 j4 \+ g( L - String realPath=file.getAbsolutePath();
; @1 W- [/ b/ i) f- A: A- y - fileBean.setFilePath(realPath);
' `* I7 b0 J; }0 v - fileBean.setFileName(getFileName(realPath));$ ^& S3 i- O1 N" n; X0 J
- if (file.isDirectory()) {
" V$ R3 W" r) i, r( }4 e - fileBean.setFileType("DIR");, V& n6 B% @- Y4 _ v9 c
- //fileBean.setFileSize(FormetFileSize(getFileSize(file)));: c/ P, Z8 z2 |7 y/ p# I
- fileBean.setFileSize("");9 }7 N. Z) l$ j5 _
- }else{
$ V& _ M0 N7 h" d+ K - fileBean.setFileType(getFileType(getFileName(realPath)));
* x" e4 ?( X' s - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
$ p& j2 h+ v$ o5 H& t, {! u5 M - }& R9 b; [# f% l, m
- filelist.add(fileBean);& c2 Q, L8 G8 D- S5 C
- }
+ Z! y% \1 s+ c& W5 c7 e/ I% x - }else{
; F: x$ E3 }3 m, A# E. h - dirSize=FormetFileSize(getFileSizes(root));
+ Y+ s6 ~0 g9 s+ _; I - }
}; H% ]. a ]2 M/ ] - dirBean.setDirCount(dirCount);1 c7 s5 k) I* ]
- dirBean.setDirSize(dirSize);
- m- u! L, v( K! g - dirBean.setDirPath(dirPath);+ s- ^3 c9 W+ ?# D/ m
- dirBean.setFiles(filelist);" C: h/ I2 }- G
- }else{
3 g9 i" U5 z# e& h, Y' c - System.out.println("文件或文件目录不存在");! u7 b$ H R6 d4 o! _+ F! e4 U. F4 ]
- } f' r; `& M) K$ ]2 I6 i9 K
- return dirBean;
" q3 e0 c* R' ] S0 D0 f% e - }
$ x$ l0 X3 `4 t2 Z - private static String getFileType(String fileName) {7 `3 U( F) _, m! [
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();9 s$ ?% R. k$ {( I. x4 I( Z: {
- }
; I" \1 a* |6 f6 ~% M. ?" H - //获取文件名
7 `5 `8 ^% B& R$ x5 {: O: j - static String getFileName(String filePath) {
! P& u9 {! q" z - String [] fileItems=filePath.split("\\\");
# f% e& h7 o+ V* f, R, p - return fileItems[fileItems.length-1];7 U7 g4 x! e/ E# y, g% n
- }
( j* B7 B3 R0 X. ?* ]/ V - //取得文件大小, B& p, }. @5 ~
- public static long getFileSizes(File f) throws Exception{' H* G6 ?" q. A+ D
- long s=0;
! K1 N" _2 q T% Z2 |* ^ - if (f.exists()) {
# H7 G/ K! A0 G0 T - FileInputStream fis = null;
; x8 b9 b7 B$ v7 A# m3 q' ` - fis = new FileInputStream(f);
' o2 m! }; h+ m* M* @4 C - s= fis.available();
( u3 g" u+ o% d - } else {/ b3 o a3 \( Z, ]( E( P2 V3 x
- System.out.println("文件不存在");
) C+ E$ L, x) L4 j - }; A3 I, r5 d; P6 q4 L6 U! k
- return s;
5 Y& x5 i R/ Z! q$ t4 C5 n- t7 B - } _% o' q, o a. m O! n; R
- //取得文件夹大小
$ W' ]- M6 A: y$ [% e+ L - public static long getFileSize(File f)throws Exception/ i$ x L1 `% n3 Q0 q, m
- {
, s3 _5 |6 \4 y/ T" u/ y7 ^ - long size = 0;
& m5 d- x) u. @ - File flist[] = f.listFiles();4 t$ x& T% c2 I) H0 c
- for (int i = 0; i < flist.length; i++)
( ]( s q9 E ?5 [: |; _, W& ^6 l5 q - { V' P7 B' G8 }' I3 L! j
- if (flist[i].isDirectory())
( L: o& w6 d$ ^4 j( U - {
! v5 v6 v! Q) C) s+ j - size = size + getFileSize(flist[i]);
5 s" O. T; c" O8 x" K - } else
% Z% i! _7 J0 w: _( d% I - {( h+ c' w* s& B
- size = size + flist[i].length();1 l0 O- P, \( A8 \8 O' A( S
- }
8 d, {; b- C. o) W* D' r! m - }; X r1 P4 E, W. L9 c( L+ C! P E
- return size;
5 u9 I2 B- O6 ~" I4 A7 t9 M - }
3 p2 ` B4 z2 ^6 T/ z - public static String FormetFileSize(long fileS) {//转换文件大小8 o3 {. X. W7 e' q9 [
- DecimalFormat df = new DecimalFormat("#.00");
0 p* v; R) Y( e1 {# q - String fileSizeString = "";
+ t9 d$ @+ x. r1 F1 [$ k5 a1 G - if (fileS < 1024) {5 d9 A( i' \, e
- fileSizeString = df.format((double) fileS) + "B";& Z `/ H" R; h9 _; ^( Z
- } else if (fileS < 1048576) {
2 N( f% T g* R5 v2 }# h" ^, T - fileSizeString = df.format((double) fileS / 1024) + "KB";
. P1 N1 s2 u- F - } else if (fileS < 1073741824) {
G! Q0 i/ |' i# S* [ - fileSizeString = df.format((double) fileS / 1048576) + "M";
3 O2 u/ w& Z* w# i+ D - } else {1 j# y9 }: C* s) I% ~! @
- fileSizeString = df.format((double) fileS / 1073741824) + "G";' r6 h% Y! z" `" v- ^
- }9 O2 B* S( S6 E) G( t) x6 }
- return fileSizeString;" T- F1 @7 F$ `. {+ U
- }4 B! d1 v; g( C
-
4 t) T7 m; q3 m, f; L' x& e - public static long getlist(File f){//递归求取目录文件个数7 D8 w" k6 v9 ^, ^9 ?( ~
- long size = 0;
% w) l7 I: y! ^" S2 T - File flist[] = f.listFiles();
) p+ _+ r5 |3 D! k- u: d - size=flist.length;
; d. @% q* Y, ~; m* c8 ^# k/ _8 ? - for (int i = 0; i < flist.length; i++) {
" }6 m$ d* \" x9 N( Z3 ~6 E - if (flist[i].isDirectory()) {- M( X$ x0 A7 n6 ~
- size = size + getlist(flist[i]);' }: {: C# Q4 ^- ^( L# G' U# j& ?
- size--;
( M. x V( x% L, S; G( s& T# i0 j - }- j' m0 @ r1 \& |
- }
2 V# v# @3 u/ G& P6 h0 p - return size;
% E" l1 j7 N# ]6 I' _$ x+ c! Q - 3 S/ _: U8 m/ n' Q! g5 g1 P
- }$ M* Z+ ]7 S. D- {- r: o# g
- }
复制代码 ) ~0 `2 p: @3 W& o6 v8 ]
JavaWeb实现显示本地文件目录项目源码解压码: 0 {$ {- a/ j; ^
2 Z) j1 S t- j. l1 \6 B2 p
- j, g; M( K! D' F* D |
|