该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
# Q. Z3 B0 Y% Y
% H* r" ]: Z' ?+ i* r
) E/ P9 C9 L9 n4 R" c" A5 h- w
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
1 K" k. {6 t: A - 7 A& N, v8 k) \8 o8 \1 x* f
- import java.io.File;, j2 [8 u; J! i R
- import java.io.FileInputStream;
* h+ X4 [" X+ ?( a+ {; Q; L, a/ F - import java.text.DecimalFormat;# v# u ]. j, b, I2 Y. T
- import java.util.ArrayList;
2 C5 _ ^; P7 Y- t8 {+ o; A - import java.util.LinkedList;
3 l" c. ^# e$ g* e) ~$ y# ?7 ~ - import java.util.List;6 R- f$ }& u2 r. ?0 W+ i4 {
9 p( o2 z* p+ u" A- import com.uudisk.domain.DirBean;" J; s) X' I: Z* m& y& j
- import com.uudisk.domain.FileBean;/ {5 n3 {- k8 r R* Q
- import com.uudisk.domain.RootBean;( X& t: |" w, x
- * d' E. D" t+ d* z9 e- A/ Q
- public class IterateDir {* Q) \: C) E/ R" n H, M2 P& a
- /*. B3 e3 P E2 H1 ?6 `$ Z8 ` t( J) c
- * 获取根目录信息+ z% T% g6 V- u+ D9 t: A! n
- */
! }- v) N `4 a; ?9 e; u: c - public static List<RootBean> getDiskInfo(){' ^1 I1 i. Q8 [' B0 }4 i' ]
- //获取盘符
: y9 _3 _* W H1 v' e6 d+ x - File []files=File.listRoots();
$ m) y! _$ ^6 e& e# y" H% `1 G5 W7 ^$ L - List<RootBean>roots=new ArrayList<RootBean>();9 d( w5 D; ~6 ~" {
- for(File file:files){6 A% s/ G7 S; c2 S b5 o
- if(file.getTotalSpace()!=0){
0 \+ p/ D" N6 N2 U7 d/ F& w - RootBean rootBean=new RootBean();
7 n+ K, u0 \2 O, u/ Z/ ]3 g - rootBean.setDiskPath(file.getAbsolutePath());
1 m8 L. ]: ^( y) M/ d - rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");
5 `/ p0 w# |9 r$ _4 X - rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
" B, [) a. U! d Z `1 M b: ?5 G: i - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
2 ^1 T ^) h+ m# m1 o1 u9 G; L - roots.add(rootBean);
* y2 W% P7 y3 Y5 B; C - }
# r. P% n+ w0 \ - }9 X# L) I- z* h! S: T
- return roots;) Q+ [1 @- o/ g! _3 _
- }1 ~: g' K6 b6 g0 T( m
- /*
4 b& y: M' P4 @ - * 通过递归得到某一路径下所有的目录及其文件
7 ^, j7 `. ?# u* z - */
F& j& g+ u/ V5 w% [ - public static DirBean getFiles(String dirPath) throws Exception{
! a! l# n0 G2 t% L/ t& ^ - File root = new File(dirPath);% T9 v7 g( K# _8 }( p
- DirBean dirBean=null;% Q+ g4 T$ A8 d+ v/ E8 E
- if(root.exists()){
' X7 k6 \8 q. E* {* x6 W0 Z - dirBean=new DirBean();
& r: z5 ~& n3 r$ H2 H# G% Y& ` - String dirSize="";
+ A, U/ b# ~$ _5 G - int dirCount=0;6 P. }2 o; C: u6 i2 f
- List<FileBean> filelist=new LinkedList<FileBean>();. v7 L+ _8 i2 I3 t0 b
- if(root.isDirectory()){) l' j _6 w/ r9 Q
- File[] files = root.listFiles();8 x/ u+ D( Q# Q
- for (File file : files) {
9 w& D0 w+ }3 v) v' }' J - FileBean fileBean=new FileBean();
$ @' Z4 u) C* v8 q6 h8 F7 h2 Z - String realPath=file.getAbsolutePath();
( S% Q# K& \$ i+ S7 j - fileBean.setFilePath(realPath);, l* ~) n0 |' X6 {0 `/ F
- fileBean.setFileName(getFileName(realPath));& u0 s: L' O% v) W# h
- if (file.isDirectory()) {# K- |" a. a+ G* J, ?5 `
- fileBean.setFileType("DIR");
" r" w2 e7 @( ]5 i' H. l - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));7 U) i9 m1 w( r
- fileBean.setFileSize("");) I8 ]+ L D; b0 p3 G2 k4 X( s
- }else{7 D( }; w/ d6 X% s
- fileBean.setFileType(getFileType(getFileName(realPath)));
4 v+ Y" V4 A ?5 a3 J8 _) p: Y - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
6 v' V* o X3 ^* B; [ - }
3 O6 S' a. O. c - filelist.add(fileBean);4 A! {/ e4 D* [' R# ` Z0 y
- }
- z, X4 {- n$ p5 [ - }else{$ P( y. p! C% e* C6 k
- dirSize=FormetFileSize(getFileSizes(root));
) o! `; |: b3 }- ?" A+ X - }% ^. m( R* k: K% [+ C$ a9 c
- dirBean.setDirCount(dirCount);% z8 z1 e( F* P k9 i' Y
- dirBean.setDirSize(dirSize);
6 s7 \) ]- n$ d* _3 } - dirBean.setDirPath(dirPath);
" Y; C' ?3 v( o- D1 z - dirBean.setFiles(filelist);
- d# ?# L4 P: c5 u5 Y+ v9 A - }else{9 r" @ ? T6 o- r- l7 c0 a! t
- System.out.println("文件或文件目录不存在");
6 h! P, T1 _ H" P" w) H( c - }
: M$ J. F) q& f9 y" ^* ` - return dirBean;: j; {0 O; E; r
- }
& V1 a' k2 c+ h9 |# u& x" z& } - private static String getFileType(String fileName) {" N" ]1 j" f0 d- i: ]( N
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();1 o0 H1 W1 h1 ?. w* [7 l$ L
- }7 |1 w" k( b, Q* I& L1 m
- //获取文件名
$ N- z3 Z5 D. R - static String getFileName(String filePath) {
P2 g; R. b, w5 K - String [] fileItems=filePath.split("\\\");9 j! {6 I. s; m# Z+ `4 [- \: `% s
- return fileItems[fileItems.length-1];
4 t i' ~: q! `3 j! M C - }' H4 r6 w8 F: q& h" u; ~- l# |
- //取得文件大小- Q4 n9 p \+ v e) x
- public static long getFileSizes(File f) throws Exception{
* i- m" F( K B& Z - long s=0;
# R+ P& j0 Z! I# H - if (f.exists()) {, P# s" V* N. f0 k1 S u5 Y
- FileInputStream fis = null;
" g0 h- {7 R8 h8 e - fis = new FileInputStream(f);* E0 @# v$ g. C. J/ b
- s= fis.available();
6 O% R- d. ^! B4 C- ? - } else {# N8 `* _- N! E1 C" Z
- System.out.println("文件不存在");
5 F, M5 O+ y* S- Z% Z0 O6 q+ l - }
, T; F5 h( S3 @& e) B: } - return s;
! {: L! ~5 q" i0 p5 v - }/ @7 r) E( L. C. H! V
- //取得文件夹大小( ?+ J" O5 F# N/ [
- public static long getFileSize(File f)throws Exception
" B7 a& o+ X- k - {! t3 ` l/ e( ^
- long size = 0;2 N. Q1 V+ x& q
- File flist[] = f.listFiles();
. ]% P" D* ?7 y' u - for (int i = 0; i < flist.length; i++)" E7 S7 |3 ~! u a) N3 Q
- {# C; b* U& z! b& W2 _ K) X
- if (flist[i].isDirectory())" H( z6 K! a$ o+ C, q& D1 b, M
- {
/ g0 r" K: _+ C. q. k5 C$ {9 r+ W8 O - size = size + getFileSize(flist[i]);3 t$ ?; [9 S5 r2 z6 ]' N1 j
- } else6 R. Q/ y j/ _: f: [ Q
- {9 i7 g+ ?# ^2 h" C0 T( |
- size = size + flist[i].length();
' Q0 O% E, s' k- R( L" h( b2 c - }
9 h4 r& ^' c1 {8 O9 F0 E9 f - }9 N. l" p1 R' Y- J Y, p5 ~# W
- return size;
, A/ j5 R j4 b - }
' Y5 v; M! D" d5 U) C# S - public static String FormetFileSize(long fileS) {//转换文件大小- Y/ k) l' A' f g
- DecimalFormat df = new DecimalFormat("#.00");. f6 @$ i5 z- r1 q0 T1 h
- String fileSizeString = "";! q) ~1 U9 I6 l1 r, H
- if (fileS < 1024) {8 Q/ q- {; h: P$ l* q8 _
- fileSizeString = df.format((double) fileS) + "B";
% n7 W, E4 k6 s5 p - } else if (fileS < 1048576) {2 L! O* K7 E6 d! e6 D. J; x
- fileSizeString = df.format((double) fileS / 1024) + "KB";
( W: h2 F/ y X3 r - } else if (fileS < 1073741824) {: p, b% [ b* O! i, V. z6 N- W$ M3 C! o
- fileSizeString = df.format((double) fileS / 1048576) + "M";
5 X8 t F. t- t5 ?+ ?; W - } else {
) Z# ] ~ Z) o; u - fileSizeString = df.format((double) fileS / 1073741824) + "G";* b9 I( W$ v9 p9 M: o. Y
- }
* ]( C! }" V/ G# Z1 W1 D( w - return fileSizeString;
" E+ Q8 w, X; y$ ` d$ ^" w! s - }
& c% E6 t% q# V) }* K# M4 q -
; l1 J: N- W& f, y - public static long getlist(File f){//递归求取目录文件个数
+ I, o1 V. [; l/ B6 ^! t7 Z - long size = 0;
3 R4 t, ~/ a& s1 M - File flist[] = f.listFiles();/ y# G: d' P$ E- E- j' _8 N
- size=flist.length;6 o+ y: X. Y* f
- for (int i = 0; i < flist.length; i++) {
& u( Z [' o2 V+ M3 W - if (flist[i].isDirectory()) {
: m" q3 N- q, S - size = size + getlist(flist[i]);( P5 f1 j- {! d
- size--;9 h& K3 L* N$ D
- }
# Z8 a4 ]8 O8 }9 S" ]1 b - }
+ V$ }! K- J5 U* `. ^ - return size;
" \" A0 }2 O' |/ J7 m6 L' A - $ w: r* ^9 Z" K# R9 N! ?$ I
- }* G+ ?& C( a1 T1 s6 J5 O7 y3 S
- }
复制代码 / C: K; ^. `0 n2 X
JavaWeb实现显示本地文件目录项目源码解压码: 7 J8 Y" c8 [9 t) [. p9 V0 w
* s$ n( U; b- q# O* w
) G1 P; J* w$ [' B' i: ]% N7 f |
|