该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
# M! s' d8 \: U& N$ f( Y
% z' G; P9 `! W" ]: s h+ ?7 ` , G) x8 b( O5 `! E
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
) G0 c% F- ]: B. K
# T+ a- U. q& B, u/ [% @% m- import java.io.File;8 H1 X& l$ s$ K; t% c
- import java.io.FileInputStream;
+ x4 P' ~! B& A( u! } - import java.text.DecimalFormat;
@, L+ U6 `$ U) H5 k; I - import java.util.ArrayList;
# S. o8 Q# D1 V8 p: Z3 W( k' ^ - import java.util.LinkedList;
7 E2 I7 s b# ?5 M9 Z3 S - import java.util.List;
2 a6 p, W* e+ o, x8 y, y/ q - . `( y" _9 S( j
- import com.uudisk.domain.DirBean;4 ^. i0 [5 W) }, Z7 I( i$ T# m
- import com.uudisk.domain.FileBean;$ `: x. T4 z L/ j& Y
- import com.uudisk.domain.RootBean;+ M: P: n: b: u/ ?; Z1 \
- % u5 @7 {% k& U1 w- O7 g
- public class IterateDir {8 s7 e$ l6 U5 f! a
- /*2 p" p+ t. K, d/ x
- * 获取根目录信息
5 N6 u# z0 Z: M1 x/ ~2 m - */* c, ]- M c4 ?$ t8 U
- public static List<RootBean> getDiskInfo(){ R* A* h% P |0 a; n
- //获取盘符$ [+ U6 L" U& M' @! g7 ~* q3 m. @
- File []files=File.listRoots();$ G. K. t$ ?1 H/ j4 Y+ Q* N& q0 I
- List<RootBean>roots=new ArrayList<RootBean>();
, e9 d: q: X5 p - for(File file:files){
+ x/ e9 ^" u+ l2 q5 U - if(file.getTotalSpace()!=0){
2 O! J6 a, r3 ]9 H - RootBean rootBean=new RootBean();
) X7 ]5 i6 l+ |* u Y7 z+ Q4 y - rootBean.setDiskPath(file.getAbsolutePath());! L( m3 D: S {
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");
( G% u8 ^0 [1 P# s0 Q - rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
4 }; Z$ a8 e4 S1 l {! {: l( w - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));: g. N( T0 k$ u) I
- roots.add(rootBean);( }& H2 I4 b2 R/ m" P! B" C& `; R; p
- }
6 A+ G6 Q3 Y$ z! c7 `1 L - }( K& X9 L1 e4 `/ j, o" C
- return roots;7 Q5 S) q& \) r; _
- }9 j- U) u: }5 b" x F
- /*
& q+ N2 ?9 O7 K# K' t4 p1 | - * 通过递归得到某一路径下所有的目录及其文件
: M- G( c( S/ J& H2 ^ - */
0 S$ ^8 G) V( a7 M d - public static DirBean getFiles(String dirPath) throws Exception{+ \ K% Z/ W( P# P; z
- File root = new File(dirPath);. @& |% F4 X4 y) M Y! g4 e4 u& R
- DirBean dirBean=null;, s8 F: k) J/ G: v
- if(root.exists()){: g2 i/ y M v6 ~4 i
- dirBean=new DirBean();6 g+ o- i' X( v5 v2 i$ c2 N$ E
- String dirSize="";
, `$ W: ?4 |1 M" ]; z+ ?/ w - int dirCount=0;
2 O4 u. R% H# X5 F6 o+ ~9 d - List<FileBean> filelist=new LinkedList<FileBean>();: ^) T3 l) d8 K m# L6 \
- if(root.isDirectory()){4 O7 }+ }/ E6 X0 O5 a
- File[] files = root.listFiles();% Y0 N1 T& J$ F4 u' c
- for (File file : files) {* A) j% o: m0 q! L) s9 K
- FileBean fileBean=new FileBean();
9 s' p1 N' I/ M7 f - String realPath=file.getAbsolutePath();
6 W* B0 j0 c& C- x - fileBean.setFilePath(realPath);
1 G( t) C6 {) L* k6 e0 k! C - fileBean.setFileName(getFileName(realPath));* ]! {7 I0 X% t* Z" S
- if (file.isDirectory()) {" q9 c8 x, c8 a* `0 f
- fileBean.setFileType("DIR");
) R) R2 y: w n( u; j+ E- o$ H - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));- A4 X5 g0 ?* k K
- fileBean.setFileSize("");
, X. S& W. A% g2 M ]" M; o9 f - }else{
) d9 T' Q6 W6 x% A* [ - fileBean.setFileType(getFileType(getFileName(realPath)));
; R }- ]6 d2 ^2 Y - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
; W' Q* k9 }: r" E - }- d+ B4 q0 ^& }( l% E( B
- filelist.add(fileBean);
7 A% K9 Z' G! d+ r2 j - }
8 L; m5 h" N# U4 z' N- `3 _* f - }else{* e! r% i2 u. l9 x9 q2 T
- dirSize=FormetFileSize(getFileSizes(root));
$ }+ i# _4 B) M+ { - }
' s% `* o) s$ r3 `/ x - dirBean.setDirCount(dirCount);2 C3 H0 t. J1 L1 `( Z" F/ {
- dirBean.setDirSize(dirSize);3 _. B/ G3 k2 }- }8 t1 G2 z- d' B
- dirBean.setDirPath(dirPath);, o, S' |. Y3 b" F# s9 E& u
- dirBean.setFiles(filelist); R. {6 G6 T. u! c# b7 B* g' N2 I7 {4 B) r
- }else{
; L4 I$ X8 O4 f - System.out.println("文件或文件目录不存在");/ P- Y4 z3 `# ~0 \. J. p% f- r
- } * ^1 s$ {$ ~: L+ v
- return dirBean;
% E' i& X/ J# R7 g& V - }6 r' N. K5 H3 r$ H
- private static String getFileType(String fileName) {1 I! P% }% Q3 D5 {$ ^; r
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
2 H0 p2 X, \. ` - }. C( Y# x8 g" W. I' m
- //获取文件名
- z$ x( `* e, B' `! }7 N& K - static String getFileName(String filePath) {
2 U& G' \. r- b' r: O - String [] fileItems=filePath.split("\\\");
& C/ o, \; M: j1 |3 [2 l; X% _ - return fileItems[fileItems.length-1];( F1 J/ M- g4 c! O* h/ x2 @
- }% O- C: L0 }+ n0 t
- //取得文件大小
- h1 R* @9 R' b. X! p - public static long getFileSizes(File f) throws Exception{
5 J) q' c" j' J& f6 S - long s=0;( \! D2 \) R" E1 z
- if (f.exists()) {( ~$ S) r4 q M$ @9 D
- FileInputStream fis = null;' Z7 l& i6 U) w
- fis = new FileInputStream(f);
; Y2 A1 B0 g+ ?# `8 X0 m - s= fis.available();2 G1 l$ W5 ?7 l
- } else {4 @* p- b6 L6 [' V# P. m
- System.out.println("文件不存在");5 g5 A: y# j. H7 @
- } u2 r+ `6 p) r0 V
- return s;
" R$ X3 A F3 [ - }# ]% ~; [7 R9 w% r4 H
- //取得文件夹大小
o- I; O$ h1 U, c - public static long getFileSize(File f)throws Exception% C# h% d6 T; k$ V
- {+ `/ H+ B' |& n- ]& N$ H
- long size = 0;! G- g+ r" a7 b9 S( L( S! ?
- File flist[] = f.listFiles();
5 d& I8 n" G r; G) f - for (int i = 0; i < flist.length; i++)
; H2 k, R3 U. z - {
3 c% _* W9 Q6 l% V& q - if (flist[i].isDirectory()); r% H! W4 w6 @7 x* b
- {
4 n$ q+ w# C: Q8 \ L% d - size = size + getFileSize(flist[i]);
2 B3 p3 m; t8 A - } else
& _4 E5 M$ u+ B# p0 W4 t/ d; F% L0 o - {& I$ \& J4 [3 B; Q
- size = size + flist[i].length();
- b: y# i- n x: p8 z- d- \+ c - }) S# F. p, E/ _
- }. l( d+ p6 p: W, O) @
- return size;
2 t9 r' l+ p- ^1 N - }: H4 M) Q3 b- |
- public static String FormetFileSize(long fileS) {//转换文件大小
3 {. _& x! l5 X L! Z9 k - DecimalFormat df = new DecimalFormat("#.00");/ V6 t/ v" Y5 B. r- B! |
- String fileSizeString = "";+ t& S1 g) X! y. f
- if (fileS < 1024) {& h' F$ A9 [3 U5 o- ?
- fileSizeString = df.format((double) fileS) + "B";' j8 e, N' m5 t7 b) ?" z1 p9 f, B. i
- } else if (fileS < 1048576) {3 v2 p8 P/ ^4 R# X. }+ a. b
- fileSizeString = df.format((double) fileS / 1024) + "KB";. ~' M5 ]/ X! Y4 z
- } else if (fileS < 1073741824) {8 ~& y) z- j& z
- fileSizeString = df.format((double) fileS / 1048576) + "M";
2 s3 a; D; q0 T3 Q8 I - } else {
( ^. R3 J; S1 |( M$ C - fileSizeString = df.format((double) fileS / 1073741824) + "G";
& `$ Y# v8 v L4 k4 J U2 D' \ - }
% h3 s2 K; v/ E; O - return fileSizeString;" q7 g' T3 K: X( y; F! F/ v, o
- }0 [6 S8 Z, ^% ^3 e$ V
-
: F3 R; Q9 k1 Q: K" r - public static long getlist(File f){//递归求取目录文件个数
9 Q) y5 S: Q8 E- u( E$ I - long size = 0;1 l! s- D* u' T; W0 Q
- File flist[] = f.listFiles();" ~; y/ X6 \$ a9 w- w6 I2 K& @8 o
- size=flist.length;
( z/ b) L" d- @) k* g1 L# C - for (int i = 0; i < flist.length; i++) {7 u2 |# \1 h8 V8 L
- if (flist[i].isDirectory()) {+ ~( y0 d* C% V# {! [, b
- size = size + getlist(flist[i]);
, e" y; O7 X; s' N) G8 X" Y - size--;
0 W! R2 L# }! o( k0 j { h) q - }1 i) ^$ w4 S& ^- f( i G
- }
! a: [, @' _9 d- \1 C - return size;6 I. c& K- s/ ?' G
) w/ R. ]: S9 q9 H& d- }! p5 e( p3 n K! Y) Z6 o2 |
- }
复制代码 ( S: H4 L7 S! Z5 ~
JavaWeb实现显示本地文件目录项目源码解压码:
0 i( f: O! Q8 Z+ Y' D
/ N7 l0 s4 S5 H; l( E Q / }3 V5 t$ ]: Z; L; x6 _3 {
|
|