该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
( W2 g' j! Z2 R% m) w0 w0 o
4 S3 o8 j! q3 a; M5 [# \, k5 w ; q E* d, k8 k
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
6 ^# ]& p3 \5 h8 D! q( V - 9 w; c0 m5 R: k$ D
- import java.io.File;" p9 ~) _$ L! j; _# ]
- import java.io.FileInputStream;! z* J: l2 \7 u. D7 J
- import java.text.DecimalFormat;
) y+ [, @$ J; C0 |1 A6 y! j/ z/ A$ v - import java.util.ArrayList;
4 I, J6 Q5 {. Y2 P7 w - import java.util.LinkedList;
/ x6 Y* }) t j0 j: W2 N - import java.util.List;' j; U& K! K5 T! a( t
3 H" O" _/ V! L/ r5 ] A7 A. a- import com.uudisk.domain.DirBean;
0 e2 u+ X& J: z& o, m - import com.uudisk.domain.FileBean;. q6 Y* h, `4 k8 p$ M- A
- import com.uudisk.domain.RootBean;
+ I4 e% {5 [8 a1 `1 \* `. V1 s$ W - 7 K& [1 n! @3 B" [$ M
- public class IterateDir {( J0 {9 K6 q# j4 ]' g/ D) o
- /*7 l& f* l: ?6 e# G5 D' a
- * 获取根目录信息1 A" N* \1 y9 A$ R
- */
. J" c7 }9 b2 i" @9 J4 Y$ @ - public static List<RootBean> getDiskInfo(){
$ `% Q. \! s! l0 f. Q/ Y - //获取盘符
/ {: y4 t# x1 z4 h) b - File []files=File.listRoots();
4 d* _; w8 i$ j# g$ Z. k - List<RootBean>roots=new ArrayList<RootBean>();& [! J7 N. ^+ o8 q& Z& B2 H7 P
- for(File file:files){
: e: p* @% a/ d2 p o - if(file.getTotalSpace()!=0){1 X0 B6 _& t9 `+ i k4 `0 {; d2 X
- RootBean rootBean=new RootBean();: F3 C, `# x, |2 m
- rootBean.setDiskPath(file.getAbsolutePath());# H7 O, F, c8 {! a: q& F
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");' O( D; A8 H( s0 k
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));) n2 y, ]. w2 x! W O) i
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
+ R: o2 N t+ L% x& H - roots.add(rootBean);! I; b8 C9 F: z, F1 n* i4 C
- }- A, Q1 A/ R. l) t# R+ \
- }
* F: L& [3 W7 U - return roots;
7 o7 d3 z: [6 w/ K S - }
; x$ @/ y- P5 ` j1 u" r, p - /*
% j; W9 \( P7 ~5 M# s6 r! D - * 通过递归得到某一路径下所有的目录及其文件
, t; Q9 A9 z* |: q - */
7 m' Z+ W" {% `+ V& B9 e- @0 R5 D - public static DirBean getFiles(String dirPath) throws Exception{( G) G) L0 }# ^6 e& f) h
- File root = new File(dirPath);- b4 @: ~0 U+ H5 q; j
- DirBean dirBean=null;
7 N( w* y" d8 I$ @0 ?" b% E- @9 w5 i - if(root.exists()){+ t d, C# ?& j6 {4 D: a
- dirBean=new DirBean();3 J! n) i7 W$ `" J J
- String dirSize="";
; r- _ j8 P9 l4 i; \, b - int dirCount=0;
% G. _9 p( ^2 q. ]1 B6 y- P - List<FileBean> filelist=new LinkedList<FileBean>();6 G' T/ W0 L0 E; a* A
- if(root.isDirectory()){
# E5 k4 }3 ~1 t) A - File[] files = root.listFiles();% y8 G7 D9 W& f
- for (File file : files) {& D. N' o+ j* z
- FileBean fileBean=new FileBean();
9 A! }% i" i- N( _6 X3 _! ?2 s; D - String realPath=file.getAbsolutePath();
* L7 @& R2 m- _ - fileBean.setFilePath(realPath);
" Z$ o3 |" S/ f8 Z6 r, ~2 `( u' ~ - fileBean.setFileName(getFileName(realPath));0 X3 b5 B- `0 m+ R, z7 w9 J+ b
- if (file.isDirectory()) {
7 B; S( O/ z. b6 c9 v Y L - fileBean.setFileType("DIR");
5 ^/ k! W; C* o, v - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
7 c% _5 |7 \' j - fileBean.setFileSize("");9 f$ h7 E6 k0 N6 J# N& E
- }else{
' {0 W& b* B2 V. Y+ ] - fileBean.setFileType(getFileType(getFileName(realPath)));+ G' {* L, l8 n" q
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));/ y0 Y- C/ u- X' H8 a( f
- }5 e% F- m @! u1 ]+ O( j3 D
- filelist.add(fileBean);( }5 @6 E7 W. Q# Z0 K$ ~
- }3 d: y; \* g- N+ d" Y
- }else{: q+ @6 a( A7 Q% e" _) h9 U
- dirSize=FormetFileSize(getFileSizes(root));; U6 E+ I- u3 m6 Q- c. }0 x
- }* l( S% U% T# \ G2 g0 Q2 o* f H
- dirBean.setDirCount(dirCount);4 d; ~7 M, A, o) c! m
- dirBean.setDirSize(dirSize);
) U. W, t: z& R0 G - dirBean.setDirPath(dirPath);2 a3 F" j/ p- R6 ?! r& b
- dirBean.setFiles(filelist); B1 I& J7 V/ S0 d% u# F
- }else{8 I5 e* r0 p! B6 |$ Z2 f7 B7 L2 z
- System.out.println("文件或文件目录不存在");$ Q$ z( z% [' t, s
- }
. B7 I8 x# e) M$ Z2 k - return dirBean;
0 j- C0 l2 |& y# a& K1 ~ - }
- g P, ]6 `8 Q0 ? T - private static String getFileType(String fileName) {& S, C) h' E1 G7 N9 |+ U7 G
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
/ H2 C3 w- X/ Z8 V5 B/ ~0 |$ L* c/ Y - }
8 Y4 C2 ?) u( P& ~1 Z7 Z8 K2 r0 @ - //获取文件名
) ]0 p# \. t" ^5 z+ H+ Z - static String getFileName(String filePath) {
+ z& G: @" _$ o' p5 p - String [] fileItems=filePath.split("\\\");) \# H6 }8 _# L/ {
- return fileItems[fileItems.length-1];
: p3 x! u8 V' P( U0 ^ - } Q3 V. A, A% [& S" O! @8 H6 e
- //取得文件大小
" _4 F7 K0 g j - public static long getFileSizes(File f) throws Exception{
" @6 r& ]/ z5 p! t' _! k& j - long s=0;
7 N! n. ]3 Y( O" w - if (f.exists()) {2 o# N# `- C3 l
- FileInputStream fis = null;( z8 S& _# M# g ~$ U: x
- fis = new FileInputStream(f);
' m: z8 o6 L5 c# w) Z7 c" O$ ] - s= fis.available();
! a5 T& G% Z* ]6 b$ @/ J! L; f1 a: { - } else {
% x1 M3 `) q' ^) L - System.out.println("文件不存在");
: q; x! h! b6 z - }5 `. G- {* l/ \4 H! ]
- return s;
' m' Y \( I) _; @ - }
$ e6 c/ W! x }" o4 v8 } - //取得文件夹大小4 I) J' V. E' {8 P6 y# {2 r4 U9 a4 z
- public static long getFileSize(File f)throws Exception
% j$ h2 I$ B8 y' x. Y9 J8 c - {5 H! v% z% l, S" p! r
- long size = 0;2 c; E( D ]* z
- File flist[] = f.listFiles();
$ M; u( s3 X* ]; K6 K5 q - for (int i = 0; i < flist.length; i++)/ n: M+ i# E8 X( n7 [
- {: j. @- x* ?0 @& F4 ]* P- C) N, [
- if (flist[i].isDirectory())
5 P% X: ~' a" k* |. [. i R - {7 p5 W6 H! K m; d+ K
- size = size + getFileSize(flist[i]);
: c+ ?3 _9 s Z- e$ ?% g5 m4 E - } else
% u- o2 U4 _% K/ O8 b- Q8 [0 I$ m6 ] A - { H; [9 s9 _1 c1 D! r
- size = size + flist[i].length();5 h( _5 e) k6 S9 f; ?& C
- }7 g2 Y" p1 V* C, _* U, ^
- }" p, B0 [0 N+ \& v& e7 `
- return size;+ c. E: s6 ^9 l! s) H/ c- o
- }
$ X/ B2 p+ g* E - public static String FormetFileSize(long fileS) {//转换文件大小
! I' k9 D/ Y5 t" R& v5 h - DecimalFormat df = new DecimalFormat("#.00");
) Q4 F u" n- g" o6 k3 r' |% Q - String fileSizeString = "";
: J1 e7 S/ `8 U0 M - if (fileS < 1024) {9 c7 I8 \) w* u4 A# F3 f
- fileSizeString = df.format((double) fileS) + "B";
" c+ b8 P% B- w+ m% x3 b - } else if (fileS < 1048576) {
3 M( z7 b0 Z C% b$ k% J - fileSizeString = df.format((double) fileS / 1024) + "KB";
7 l9 L9 G7 `! P; q - } else if (fileS < 1073741824) {( z/ F6 t$ s0 V1 d
- fileSizeString = df.format((double) fileS / 1048576) + "M";
& g( {% _ \3 w4 X6 Q0 j, t - } else {$ ~/ }1 }/ \; q, P s+ v
- fileSizeString = df.format((double) fileS / 1073741824) + "G";
, u4 A6 C' ^( @) x - }* Z, \$ Q2 G/ g0 U6 k7 H! W; r
- return fileSizeString;
1 g: N. ?" e; E( o/ L. {: E, p - }
7 k. K4 t/ `+ W% @7 ~ [ -
' f2 {8 Z |( x8 N# L% n* ] - public static long getlist(File f){//递归求取目录文件个数
2 ?. ~$ l/ U4 m! Y - long size = 0;, }0 D+ s7 ?, u4 o
- File flist[] = f.listFiles();4 B3 W6 h m3 T f F
- size=flist.length;. V$ ^9 N C' d9 b6 n! f
- for (int i = 0; i < flist.length; i++) {
$ Q2 V! |/ R: a; ^ x - if (flist[i].isDirectory()) {
% d; V8 X6 D! _- j4 I - size = size + getlist(flist[i]);
, c( V I; L9 a. B g0 b. S+ d1 P - size--;8 Q+ V% ?4 g, j7 L0 J. p h
- }! F; t2 r4 K+ h2 ~$ v
- }
3 R! C8 f. i- Z1 {6 n; { - return size;
: P, [% c, ?% I1 [, s
' @% Y! b9 B' x9 r+ e- Z8 z8 e! Q* m- }9 J1 c( z8 _0 t( [9 L
- }
复制代码
+ [( }" S+ y [/ b! R1 BJavaWeb实现显示本地文件目录项目源码解压码: + j6 N6 I$ H; D5 Y
2 M, Z/ i n5 X) h4 J# ?5 Z % K6 | c, l/ v: ~+ v/ }" w8 r
|
|