该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 9 k3 ?- c2 p" h2 z6 ?. C: Y
; f. ^& U: n3 V" g% ^0 E
' X* c6 z# H8 U" L- f 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
7 ?* T: w5 d4 `" Y
( n; O+ @+ i5 g4 w9 j- import java.io.File;4 B! C. u# }1 }6 G5 L3 u& D
- import java.io.FileInputStream;
+ [( C @/ l# `$ b8 G - import java.text.DecimalFormat;3 p+ P& D: ~- g4 D! G! B
- import java.util.ArrayList;
: n8 [+ t" V8 V0 X C& E/ p - import java.util.LinkedList;$ m* E, I% v! H! M
- import java.util.List;
7 S* ~( ]; _3 j4 T2 J- U# X - # j5 c; t, o3 f$ R9 N/ P, F! [
- import com.uudisk.domain.DirBean;
7 F% w% ~9 W9 a, b4 K; s) Q/ U - import com.uudisk.domain.FileBean;. I" [: I: ? |4 D/ j$ e
- import com.uudisk.domain.RootBean;
' g) C$ { v; H/ d4 v( u. H& x
) R# ~2 p% P* V- public class IterateDir {" ?( x8 k0 Z# J3 h" Z
- /*% n2 E2 Z, v! s( h: v; c9 o
- * 获取根目录信息
: N, x; F: T( c - */+ c% \) j6 I5 `6 c
- public static List<RootBean> getDiskInfo(){5 o+ y& ?$ k$ A2 o7 L2 z7 d& j. O( X
- //获取盘符
: E/ j# U4 S1 i, x; X m' s - File []files=File.listRoots();
9 K* \8 k, J# o( ?8 n8 E+ E4 y - List<RootBean>roots=new ArrayList<RootBean>();8 _4 [% @ J: W7 z
- for(File file:files){
& Z: e8 F6 ^& _ - if(file.getTotalSpace()!=0){& ^9 x' K& T! B6 g* @3 y- s
- RootBean rootBean=new RootBean();
* c( \" s2 W" w# U# l - rootBean.setDiskPath(file.getAbsolutePath());5 `' Z. f4 }+ T0 m& |
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");) V$ `+ [8 z) y
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
; a5 A- e1 V/ W. S - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
$ M* c% G3 W4 X" \ - roots.add(rootBean);
- M: T" I- q: s& G - }
! l; `* S4 R, k- Q! x' I9 J* p - }
# K& M6 B2 _4 D - return roots;+ x, E# [* R) z. m6 @5 u2 b2 _) m
- }" g% W6 a& L c5 e. O
- /*
: z X: G2 F+ c - * 通过递归得到某一路径下所有的目录及其文件" ]5 l7 G; G+ w8 ]5 ~
- */
( j9 F" k1 [$ ] h% m! q% @3 h - public static DirBean getFiles(String dirPath) throws Exception{
; g' m) M2 I5 q) _ - File root = new File(dirPath);
+ E2 n; h) w. a - DirBean dirBean=null;% N+ m, I5 w( t2 p7 m- Z
- if(root.exists()){
$ X) r' b5 o$ i. k* _ - dirBean=new DirBean();
v8 Y7 E( \, Q8 l0 [ - String dirSize="";( _; r# E; e7 ~8 D, z% s& u
- int dirCount=0;8 B; p0 A$ f5 G2 w, N) `# e
- List<FileBean> filelist=new LinkedList<FileBean>();6 `8 {7 I. @. j) B& Y
- if(root.isDirectory()){
, H) ~: U' B0 ^3 S9 P - File[] files = root.listFiles();
Q! @3 X3 X7 N/ {$ w0 P - for (File file : files) {3 I0 }+ I9 l8 K, `
- FileBean fileBean=new FileBean();
4 r" E( O) _3 P( U- u - String realPath=file.getAbsolutePath();
6 S. o2 ?" ~/ {4 M; t - fileBean.setFilePath(realPath);; i* n; P1 }. }4 h+ B/ s9 Q+ H
- fileBean.setFileName(getFileName(realPath));
# I6 |, n( h6 P7 f& G+ b; @ - if (file.isDirectory()) {
, H! Q6 U; |1 C! r9 U3 i - fileBean.setFileType("DIR");
, {# U* G1 k. g/ Z9 x - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));# ]! O9 X$ Q- v
- fileBean.setFileSize("");
* m. _7 c) P C z" `+ f - }else{& e* p$ S) h& y) Z9 w
- fileBean.setFileType(getFileType(getFileName(realPath)));/ I1 s; e+ Q" R6 [ [6 }
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
( `% f3 v4 k( H: I! ~8 c a - }6 T. I/ b$ B' L$ ]: d9 R" m6 E
- filelist.add(fileBean);
0 |0 f& T* r8 p& h - }$ q: X# i1 Q3 J! k. |# K$ R
- }else{
7 F" c; M, l1 Z8 g7 M' K - dirSize=FormetFileSize(getFileSizes(root));
! y7 n. s! j7 ]/ ~' P - }: j" A. D/ u) L$ k/ q
- dirBean.setDirCount(dirCount);
3 t9 N; `3 ~/ w3 ]; V; q1 [: g) a - dirBean.setDirSize(dirSize);+ U4 M7 p9 _+ T# ?
- dirBean.setDirPath(dirPath);! ?( L, c3 f$ N8 t
- dirBean.setFiles(filelist);
/ z H, k6 R+ h H: _$ w' Q - }else{4 S' a9 b. m6 t/ o3 `
- System.out.println("文件或文件目录不存在");
: _ X! F9 w4 V/ `) b - } + }2 c3 W0 w# t8 |1 R
- return dirBean;
6 G( [0 J, k! C- L% D0 B ~9 s - }
& X* r) O, v- h& K1 c - private static String getFileType(String fileName) {
# ]! v! o" W- d - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
" N ]/ P* [. Z6 P6 z/ | - }; o! L! Z9 F$ [% [$ Q
- //获取文件名
$ ^5 I! W o3 A0 H! ]) k2 f - static String getFileName(String filePath) {" ^4 r( B9 r' u9 y$ e+ S, b- U& Q' q
- String [] fileItems=filePath.split("\\\");
1 @4 v: ?# {; G$ [$ Y# x - return fileItems[fileItems.length-1];9 ]! g" m% W) u5 S2 G5 o; v1 o7 l) o
- }3 B' M3 T# i2 w3 r' F" Y
- //取得文件大小
( N/ y* s+ `8 n3 f& W1 |7 j2 l1 a - public static long getFileSizes(File f) throws Exception{
. U8 v+ V1 ?& G; i2 L( x# o) L - long s=0;
* ]6 o" d; F- N5 G9 Z2 J - if (f.exists()) {
; Z8 Y! f* ^/ R/ K4 M: n - FileInputStream fis = null;
7 E3 @: ?! D: Y - fis = new FileInputStream(f);
A) b! B% T; ] - s= fis.available();
V/ _! K# E1 B0 a% G - } else {
/ j1 L' {3 x Y# I: v+ @1 G - System.out.println("文件不存在");0 E/ q% C$ B9 Q# p3 X. q) s1 k9 F
- }
- g7 E, g) s& }8 \/ b# I - return s;
& D4 s/ t1 d0 \( U - }" F2 |' F \* Q; @
- //取得文件夹大小8 k& V: ^& ^& Y0 O( d; I
- public static long getFileSize(File f)throws Exception
5 S) Z! I" X4 |1 s! M - {
1 W6 Y& r7 N! ~# z, N& N - long size = 0;
# c6 `6 B6 j/ ]" k6 u8 C - File flist[] = f.listFiles();
" V) i; P ]. X. w& [( a5 L. M1 l - for (int i = 0; i < flist.length; i++)1 h- ?8 M6 X' n+ `; k3 Q& X, ?4 o
- {- R" ` }4 |" ? R6 K/ V t. A* c
- if (flist[i].isDirectory())
1 N9 ^/ L! y! Z# ] - {5 X5 ]! J% L6 l9 ]9 E# g+ W3 G& D
- size = size + getFileSize(flist[i]);
6 X" j3 _ K% W4 a. U/ W, O - } else
! C7 g+ h, M+ l' q2 x# S9 s - {
* h. j1 n; M7 L- Y- t - size = size + flist[i].length();
' M/ v( d7 S% V6 X5 V" ^- _% z" c2 ] - }
7 d6 T: H% ~5 |) v% q* F* ^ - }
' W, v+ Y- c* S% U4 J- V - return size;
P) c) h* `+ L9 ^6 `, i: c - }
% b8 T& \- X3 L& n - public static String FormetFileSize(long fileS) {//转换文件大小
) M, B- [$ F0 a9 f8 }5 Y2 K - DecimalFormat df = new DecimalFormat("#.00");" m; }" G& q2 e! M
- String fileSizeString = "";' L4 e' F& l0 @1 E3 A' q
- if (fileS < 1024) {" V2 m4 i% a2 h& O) W
- fileSizeString = df.format((double) fileS) + "B";
; b* [" U7 E. Z1 r, X - } else if (fileS < 1048576) {
$ ~' M1 F7 v$ Q2 Z6 r) o - fileSizeString = df.format((double) fileS / 1024) + "KB";
' c# M. n) y5 S3 k - } else if (fileS < 1073741824) {
/ ]8 I7 T: G0 v5 T - fileSizeString = df.format((double) fileS / 1048576) + "M";
0 d5 E+ u& f2 |, ]6 z. D9 }" R - } else {3 z" G m8 U. R& F/ a7 A
- fileSizeString = df.format((double) fileS / 1073741824) + "G";% R* o1 W3 q7 q' O+ i
- }
' k/ e; Z: p6 l5 Z - return fileSizeString;7 \0 b5 p" J7 l
- }9 w1 j2 x0 }. |: F
-
2 ?% O; P; K2 ~& L6 E4 s - public static long getlist(File f){//递归求取目录文件个数
( C+ F( ^, `/ p9 I6 @7 l: I) }; m - long size = 0;
) L5 ` V8 H" z5 c# `: ^ - File flist[] = f.listFiles();
7 o6 ~3 q' `( ]' J9 D - size=flist.length;
3 G! }( l( t! C4 e - for (int i = 0; i < flist.length; i++) {
, t' o9 ]0 }6 e5 T - if (flist[i].isDirectory()) {- U/ g$ D2 N0 k
- size = size + getlist(flist[i]);
" I% x: X; h8 N/ ?! B* F+ U - size--;' ^& o h& Q9 G& Z1 B7 o
- }6 |, z+ O3 f; r; \
- }
7 s5 a* s; @) c% o: m - return size;
0 h, h( B/ p n2 S/ D/ a. y7 X4 ]7 P
6 z4 k6 @2 P8 q8 Z, Q I- }
: A* ]! p8 i; Y r. ?' y, H s - }
复制代码
3 I. A/ W6 N: W c: S3 ` hJavaWeb实现显示本地文件目录项目源码解压码:
8 A6 y8 S. q/ q. V: e# `0 x% O; D$ F
, j+ D- l7 t5 Y$ L1 E |
|