该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
; t2 @$ Q/ `! }" _. \8 q( {# O3 `
4 _$ i: O; q9 ?! Q8 I% ], v ! L$ r. S" E) c' R* p( C+ ^' e4 A
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
+ ]$ M# e! j- D+ \3 m, l - X$ E0 K2 h, N g' |
- import java.io.File;' E8 T* |; P, `6 _$ K, ?2 \) j( x
- import java.io.FileInputStream;
7 P) P7 D& ^9 R1 s% H& H/ L - import java.text.DecimalFormat;. \, U, m& l3 J1 L; j2 e( \; m: W
- import java.util.ArrayList;
* E% Q! |, }' A+ {" p1 w f - import java.util.LinkedList;6 w9 I+ S1 b J/ ?( Y* I
- import java.util.List;
9 |; a/ h+ w5 p/ z8 d
6 P7 d3 Y8 E$ O M- import com.uudisk.domain.DirBean;
3 E3 l9 ]( e0 k+ {0 ^8 Z; ^4 X& c - import com.uudisk.domain.FileBean;4 M& d! B0 i1 _: w/ [( t; _) h
- import com.uudisk.domain.RootBean;) X# m7 i. o9 d+ M3 }, h
+ w2 L$ n& H/ a4 ]- public class IterateDir {# D3 G' N- I' S u% Y
- /*
$ h0 a4 a9 I0 D5 D7 M - * 获取根目录信息
# d/ U" M& ^0 W5 w7 v5 F& _ - */& t$ Z; C9 X) f+ F3 t0 N2 f( ]
- public static List<RootBean> getDiskInfo(){
{# Z' d9 R$ L- }. U' o( w - //获取盘符0 }; { A" ~( Q5 z G# V
- File []files=File.listRoots();
( b! k# _( a' { - List<RootBean>roots=new ArrayList<RootBean>();# {3 u$ P! O9 U2 Y' [5 n* X
- for(File file:files){. N: n8 b* e# V( _2 Z
- if(file.getTotalSpace()!=0){5 |: l- T, a/ p
- RootBean rootBean=new RootBean();
3 S" A& w2 x$ H- N: O - rootBean.setDiskPath(file.getAbsolutePath());
) N/ n" m9 G7 e: I d - rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");' _% D4 Y1 X# U9 C
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
8 e8 K9 j, M; H& } - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
5 Y! W9 N. q( u% L/ t* s - roots.add(rootBean);
: d* \& Q9 @- V - }5 J% i3 [/ y8 @# }6 }+ I6 Y
- }8 _5 x/ R5 [" e4 s8 k
- return roots;. S; `2 X1 s1 _# k4 U# _ q
- }
# f9 C8 b J) m% N! P - /*" C2 j% F- w% {- i% {; @ X# |% ^6 p
- * 通过递归得到某一路径下所有的目录及其文件
6 N$ g3 O( I5 ~7 H% ^ - */
0 j+ ?' E! o$ \2 R; ] - public static DirBean getFiles(String dirPath) throws Exception{$ w6 R+ X9 R* U5 a2 `1 ~
- File root = new File(dirPath);
9 y7 L1 W! Z8 C n0 | - DirBean dirBean=null;. Q9 O* m& L" C! \- p* j/ M
- if(root.exists()){
. i7 @3 j/ Q! q: k" z, t* B3 g8 X, D - dirBean=new DirBean();4 X& D" I) e) t. Q. X0 ^$ v
- String dirSize="";' L( e1 i9 W+ w
- int dirCount=0;
" e: F' h5 a- v( h7 {; X$ a - List<FileBean> filelist=new LinkedList<FileBean>();
; {9 w: Z- E- s& i/ O# F5 g - if(root.isDirectory()){
1 W4 @6 X$ ?) L - File[] files = root.listFiles();
7 b: T; _( _, y, A7 n - for (File file : files) {7 e$ c9 T- N4 \% q) [# W
- FileBean fileBean=new FileBean();7 X/ h3 J& Q1 o3 C$ K+ X
- String realPath=file.getAbsolutePath();
7 _6 S/ c' p9 i# Z- v/ Q: O - fileBean.setFilePath(realPath); l) _" a( H" G3 g2 i
- fileBean.setFileName(getFileName(realPath));& B8 ^' }( ], E( P
- if (file.isDirectory()) {
2 M9 V8 R0 K* ?$ O - fileBean.setFileType("DIR");
/ Q5 T" t- W( B, v! I' R. W) l - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
1 O# H1 a% A$ w" O) m1 K - fileBean.setFileSize("");& {# D+ W1 G F3 j, L
- }else{& _ v. s6 U) O* |% E
- fileBean.setFileType(getFileType(getFileName(realPath)));& f: V8 t0 b8 f) l& Z0 g+ n
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));6 Z, `1 O, G0 P5 _) ^ k5 T
- }
K7 U; p1 D% T - filelist.add(fileBean);9 g8 `+ L, U+ J4 S( z' C! D
- }
3 C. b& n& i( D* l" H9 J3 ^9 q9 w - }else{
" _5 |) _0 E+ [ - dirSize=FormetFileSize(getFileSizes(root));
+ E2 E/ ?- A& @. y3 x3 C - }
6 `4 c) f7 x% W7 C; R& l, a7 [ n - dirBean.setDirCount(dirCount);4 S: b# ^" Z" H4 q( z
- dirBean.setDirSize(dirSize);; z2 f$ t: P( p! r- h2 f+ w9 H
- dirBean.setDirPath(dirPath);
; @. J! _; S/ n9 G& s - dirBean.setFiles(filelist);
% o# s' G% e/ F9 N! f - }else{
3 i' }/ n& q: ]+ ] - System.out.println("文件或文件目录不存在");7 s3 {% V. x# g$ _# N k, |* I
- }
- g1 _+ Z9 h" o - return dirBean;
$ N) s3 w0 ?# b3 u+ D) E1 \- J - }
, l, q# q9 H& I' z- y0 F( j$ c - private static String getFileType(String fileName) {& }3 s) N2 A5 _3 T$ M, o; D8 n' t) H @
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();- V @8 P: X, F1 B/ H* W$ S& y
- }" d) Z6 X/ Q' b0 t0 n
- //获取文件名
( Y) Y1 ]8 v5 f2 e1 X! ]. ?2 F - static String getFileName(String filePath) {4 z; z4 Q9 ], x: z7 a% b2 {$ q
- String [] fileItems=filePath.split("\\\");
7 d, T0 x4 n. @! f+ X2 ^9 b - return fileItems[fileItems.length-1];8 i5 S. M8 [+ s3 v/ Y) Z
- }
+ k# p9 j8 e3 m i# D' V6 Q - //取得文件大小. \; I7 J& ~( L) w; X
- public static long getFileSizes(File f) throws Exception{1 r5 x4 Z0 q/ D3 v0 q( m3 _3 m
- long s=0;
% a# G5 X! W3 l, K5 k$ \9 J - if (f.exists()) {
# `8 _, ?/ o( K* g" X2 P% a! H - FileInputStream fis = null;8 a" c$ Z9 _0 _% I
- fis = new FileInputStream(f);7 l' \3 V. e, ^; h U9 Y
- s= fis.available();
6 J& _; u5 v* ?. D2 c# s" s - } else {
7 n1 r4 K$ V/ A - System.out.println("文件不存在");( l n, H4 w y2 R) T/ V
- }8 s8 b2 C) s6 {) E5 U$ Y. [
- return s;
- @6 O( |3 ?) H; c* y% [3 A5 ? - }% ~7 L9 z7 s$ N8 `% g# N9 m, q
- //取得文件夹大小
+ C' m$ p. f7 s9 Q: h2 t v' I' q) `6 o+ M - public static long getFileSize(File f)throws Exception) l, x w/ i7 Q1 z$ N, p! o
- {
7 A& h1 V* G; p# Q5 k - long size = 0;2 X$ o0 |+ V7 g3 H8 [+ w
- File flist[] = f.listFiles();8 W. j; _5 u i/ n1 d5 u
- for (int i = 0; i < flist.length; i++)' a( a! I/ I! a2 Z, ^ U5 W2 i5 {5 M
- {" F1 G3 P8 l5 w, s
- if (flist[i].isDirectory())
0 {! l& T0 c6 a0 ?5 v2 b; B - {
6 \! S3 y. g* K% p/ J - size = size + getFileSize(flist[i]);
: ^& ^$ F: l( v6 g# D \ u - } else* i5 P$ X; Y& d% A& q
- {7 N7 |4 y' a# V" R+ r$ j4 N- r7 _9 M
- size = size + flist[i].length();
M( K& P% d. m' Q4 e" j9 { - }
' ]% p9 \' C5 w( x5 c1 [% t8 i, G - }7 r- J6 H8 T( s% n
- return size;
7 [- K8 l3 I' U" p5 h# G - }; w. D+ i7 c1 r4 F$ r, I. w
- public static String FormetFileSize(long fileS) {//转换文件大小
% a( x8 y, L2 D4 {. M5 q% H - DecimalFormat df = new DecimalFormat("#.00");0 b3 |6 T4 c s
- String fileSizeString = "";
, d/ a: g7 A$ t# M$ O - if (fileS < 1024) {. M/ C# Q* {' c+ l4 ?
- fileSizeString = df.format((double) fileS) + "B";
, M$ G3 } K# ?, @: q' J - } else if (fileS < 1048576) {
, u# _0 E! [- Q0 |3 ~ - fileSizeString = df.format((double) fileS / 1024) + "KB";
7 `( O7 i7 n9 X3 s, y# o/ J - } else if (fileS < 1073741824) {
- t- r) q% ?4 I - fileSizeString = df.format((double) fileS / 1048576) + "M";. E, Q$ T3 B5 s3 \
- } else {
1 ?8 A" z8 n8 U- p" ?& Y: u$ v* _ - fileSizeString = df.format((double) fileS / 1073741824) + "G";
: Q! \. W8 N9 t f( S2 g' E - }( F7 h* ^* A& A
- return fileSizeString;/ }; i2 U0 B D: U" o6 e/ o
- }7 I: y Z5 m8 P0 e
- ) U1 f4 e) ^; i3 k7 V
- public static long getlist(File f){//递归求取目录文件个数
& o4 y+ N) ]9 S+ \. I, Z - long size = 0;
$ q7 E, l* r8 V1 V - File flist[] = f.listFiles();' [ r. B- E* Q( n8 R- X
- size=flist.length;
3 N i" f9 u) w2 n c. { - for (int i = 0; i < flist.length; i++) {
9 o' H4 ?6 ?9 I/ I1 O# Q c - if (flist[i].isDirectory()) {
9 N6 Z4 p& ^1 O, F# b$ ? - size = size + getlist(flist[i]);+ U# L7 p8 F0 |6 S
- size--;
2 P; U$ c) y* o8 z3 C- [ _) P - }% c+ v! Z8 b0 h* d
- }
+ j- ~6 p# _1 \# R& h - return size;
0 E3 d4 G) z% t - ! M: w5 J6 b; x( z. Y* I- @9 w
- }. U, ?4 D6 \" Z0 J' M' A
- }
复制代码 3 \6 ]/ B ]0 v- Z
JavaWeb实现显示本地文件目录项目源码解压码:
/ H& o5 r6 q; o, a+ V8 p! F0 z ^& u( [
6 s0 {; ?- {! a5 u
|
|