该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
5 v5 m! ?- c( J
1 N1 J# X: X5 I* F- y( k
4 ^0 G7 k9 R4 M2 l2 F 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;# K8 G" C9 X+ _' y/ `
- * L, F+ z( P) c3 g* U' C5 Q
- import java.io.File;
' W8 z( t8 n1 S k8 C) a5 V6 F - import java.io.FileInputStream;- W- A1 i4 m& C2 |3 O
- import java.text.DecimalFormat;
- T& k: Y2 _4 |) d9 Y$ }0 ]* l - import java.util.ArrayList;; _; P0 D; T. l3 M' d/ A$ Q
- import java.util.LinkedList;4 Y3 p0 i" A- u& L W
- import java.util.List;
) e3 l4 s! K4 `: b
3 J0 ~9 }) I7 l0 R- import com.uudisk.domain.DirBean;+ j5 d5 x [# [. z
- import com.uudisk.domain.FileBean;; m- l3 n% h& F
- import com.uudisk.domain.RootBean;4 h5 y) F7 O4 F' ~
- ; \5 n' `, O( F0 }
- public class IterateDir {
& {" w( t6 D3 J - /*
" y& d- W2 j& t3 |, ?6 Z - * 获取根目录信息- j: U0 ?0 B8 U$ Q/ M
- */
, S3 R" ^% ^' R9 U5 s% u9 Y - public static List<RootBean> getDiskInfo(){
% A/ Q& |: @* o+ i& { - //获取盘符- B' t% }$ ^/ @- g3 _! g! }
- File []files=File.listRoots();1 ~% ^+ v/ Q) e! K- x) `. o H
- List<RootBean>roots=new ArrayList<RootBean>();
5 N% r+ G! Q, u$ X3 N F, Z - for(File file:files){
5 _7 r* {$ n) g% i - if(file.getTotalSpace()!=0){
4 Z! G! R( s' J M - RootBean rootBean=new RootBean();
W: d' f+ m: r - rootBean.setDiskPath(file.getAbsolutePath());9 ^% k) @; F( ]& Y& ?' P
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");
+ A" A$ v. m$ a& t; O6 [7 P - rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));+ R) y: @( e0 F+ K0 I! K
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
5 s6 C" J. a4 l8 C4 b! J+ n - roots.add(rootBean);
1 F( @& p: J+ F* W1 S, k [( ] - }( N- E; u+ @( @. Q2 w
- }
) T% Z" b4 S# s' |9 J5 ~- Z - return roots;- A- `0 Z6 { p+ N! Z. K: M# Y) z
- }
' U" _3 w _% _6 J3 g( j- t - /*, i+ K2 F, Y$ c
- * 通过递归得到某一路径下所有的目录及其文件
0 Z7 E1 L7 k9 X: D3 m$ n - */
. K+ `4 D: {" A. b+ R - public static DirBean getFiles(String dirPath) throws Exception{) ]3 e. ]* }: ^
- File root = new File(dirPath);
0 s4 f' _$ _) v1 k4 b7 y - DirBean dirBean=null;0 _7 v6 X# x4 {) s) w
- if(root.exists()){
6 j2 n; ?/ P! [- _) B$ b: x: ]9 ~ - dirBean=new DirBean();
- `4 F2 ?0 K, n* S - String dirSize="";5 O) T3 p5 M: u. o4 g' Z4 n0 _
- int dirCount=0;
4 N( u s! o, H" m - List<FileBean> filelist=new LinkedList<FileBean>();
* B- c9 n+ |. G5 @ - if(root.isDirectory()){ y8 b9 \4 O7 o5 e$ j! L y
- File[] files = root.listFiles();
4 [: v8 A( |) |* u- J+ N - for (File file : files) {
" F& i% Y6 P! R - FileBean fileBean=new FileBean();
6 S/ Q( `' w0 f8 T - String realPath=file.getAbsolutePath();
8 b8 S: ^6 Z0 q3 T' ` - fileBean.setFilePath(realPath);
! {3 q" L! x0 D3 n9 Y( d - fileBean.setFileName(getFileName(realPath));: E8 b: F: ]7 P% j; t" t* P
- if (file.isDirectory()) {
4 [2 M# T" b; m, b - fileBean.setFileType("DIR");
$ m. T" N2 `% l4 S6 T' b - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));) R6 _( v" T7 a- E3 u
- fileBean.setFileSize("");* Q$ }. s7 q$ x7 z6 L
- }else{3 J) f- k2 `0 Z2 o- ?3 @" f* ^
- fileBean.setFileType(getFileType(getFileName(realPath)));. P( l. B! a% d. X1 J/ W4 Y
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));" V/ n' P+ g3 G8 r K9 \. @
- }+ @3 H- I" p- P- b6 K: n
- filelist.add(fileBean);
9 ^: O( s. e7 L& w - }
8 [7 P. q/ T" i9 N6 ]- X7 D3 ] - }else{4 x" r7 A9 p4 E# b
- dirSize=FormetFileSize(getFileSizes(root));
* ~' M# w8 G+ ^) F3 G" T g$ _ - }
, u% P; d3 c0 F+ A' b3 P9 c9 } - dirBean.setDirCount(dirCount);6 X8 _8 S5 `' u5 N1 }% F
- dirBean.setDirSize(dirSize);
- k# Y; ?- i7 w% i w - dirBean.setDirPath(dirPath);% l1 w; [! Z/ \" p3 t
- dirBean.setFiles(filelist);
4 x) i- P& w% G2 ~: c0 m: x - }else{
- k' u8 k3 i2 [ - System.out.println("文件或文件目录不存在");
" q) x* _: b0 G Z$ T. P) D - }
1 ]$ O1 W2 u& n; D8 w: N - return dirBean;
# _: K; R! s: s3 W `* x9 h. ^ - }
, p" t) ]; l! K. f; Y - private static String getFileType(String fileName) {% L: a8 {& {) j! P! a
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();9 j+ O: c( ~- ^! r$ ~0 U6 }9 y& S
- }+ M) `. M7 E5 y, Z4 A2 a# T
- //获取文件名' C5 ? T- d1 @# M% E
- static String getFileName(String filePath) {7 |3 g7 w6 y& w0 J
- String [] fileItems=filePath.split("\\\");
$ R" w) v' F1 e: E! M. O7 f3 }5 F - return fileItems[fileItems.length-1];- c4 r, {$ a4 T+ L) X6 i
- }. b F5 B( H5 }1 }; E5 E3 t- ` x
- //取得文件大小
+ c, s; F! z0 s% R2 y8 _ - public static long getFileSizes(File f) throws Exception{& A% A; ?% ^: Q2 Q5 k! b4 v2 C
- long s=0;+ }! u" _+ w/ a5 I4 c y
- if (f.exists()) {
# \1 M! q: `/ |. t - FileInputStream fis = null;- w1 `, b8 o) c+ ]& {5 C9 C
- fis = new FileInputStream(f);$ q4 ~7 F& W. z) h4 s( D+ M7 k
- s= fis.available();
; J p8 p4 _6 @, W - } else {! t6 g5 x/ U, Y* k( ?9 |
- System.out.println("文件不存在");9 g( G. H8 ]5 P
- }. f, K& t2 a# A$ k$ B/ O
- return s;
& n" t2 Q' E: K" E# q - }: B: E' r) G: g/ v0 U
- //取得文件夹大小: Z* g2 _; W: f/ W. v
- public static long getFileSize(File f)throws Exception
; V2 i8 L+ p( ` - {
9 ^& G: j' u& W: W3 t - long size = 0;
' @2 a- k) J9 G- O - File flist[] = f.listFiles();
$ v* X. ^% y U& H% z/ R. Q - for (int i = 0; i < flist.length; i++)* E% i9 x3 z |% L- O
- {: M9 B+ `% B) z9 ^) \: F6 }
- if (flist[i].isDirectory())
* x: S5 T, L& q: i" ~ - {( W4 \2 Q' o d D# ~5 _. v( l
- size = size + getFileSize(flist[i]);
3 P' k, e O1 Z! i# I: W - } else0 Z! S! r) i$ _
- {
& r A0 v8 r* h r0 x0 ?; ^ - size = size + flist[i].length();
0 _( s' J4 F5 I( u - }
. t/ T; _" r( u# {" o$ c" { - }
5 i- ]! U5 S# r' G" p: I - return size;9 ?- R, ^8 V* \/ [( G8 s/ z* G: @2 _
- }+ U/ j& l1 [- Q7 w
- public static String FormetFileSize(long fileS) {//转换文件大小
1 G, A* O# I) B- e2 A- R" D4 e6 x - DecimalFormat df = new DecimalFormat("#.00");
3 G" ]( b4 e8 B - String fileSizeString = "";
/ L3 I% b6 V8 o( M/ a1 n* v; S% f - if (fileS < 1024) {
% z. \' l z; l - fileSizeString = df.format((double) fileS) + "B";
5 o- I; J r" y - } else if (fileS < 1048576) {$ |' O' Q5 L7 t& n% k
- fileSizeString = df.format((double) fileS / 1024) + "KB";% m" }& }# J K
- } else if (fileS < 1073741824) {7 B# ]" f- ~$ g, D# u$ C
- fileSizeString = df.format((double) fileS / 1048576) + "M";
) j5 Z5 p1 W, t1 W' z8 z - } else {: I- `1 A7 u$ _* X
- fileSizeString = df.format((double) fileS / 1073741824) + "G";6 w* R; Z: x% p9 l2 U
- }
5 X! s+ J2 z" I5 N- c/ K! E F - return fileSizeString;
% |2 K! O3 F8 v - }
. H: l g) D" L M, u; N -
% E, \. G7 ]+ h" O - public static long getlist(File f){//递归求取目录文件个数
# m$ Y6 W2 s d/ X9 G - long size = 0;. W4 b9 c, A2 W* N
- File flist[] = f.listFiles();
; ]' ]. l# e1 { F5 g9 V - size=flist.length;
9 K4 y1 }6 c; _0 f0 C$ M F4 Z1 B/ O7 \" u - for (int i = 0; i < flist.length; i++) {+ @. L) _ Q$ l* {) Z0 Y* [
- if (flist[i].isDirectory()) {$ v+ v. l9 D8 D3 p
- size = size + getlist(flist[i]);
1 Y8 }' A" ^! d9 S# I/ P4 @) z - size--;8 v5 Q- i; ? Y8 X7 |- k
- }* ~* r6 J+ k9 n! x/ Z9 `
- }5 G! v: Z8 C0 N& ]
- return size;
/ }5 a4 P, v- ?& V
1 [4 E" o, V8 z6 t9 d, G# Y- }& y1 l2 p/ S6 l7 M& N- L$ j
- }
复制代码 4 ]; U* ]; m+ b8 ]( G' x3 z! |
JavaWeb实现显示本地文件目录项目源码解压码: 5 `( ] Y+ }. D: U
' X+ `8 K1 ?6 d2 ?. E/ e. E 4 V8 ~8 h2 b" D. O
|
|