该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 0 l( \9 X0 O8 j4 Z: y7 R5 a- n
; R) m6 T6 e2 {% z5 h; N9 q
* b# r/ `5 U) D" e7 T 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;: ]) r0 u8 J; x/ o3 n
; R; g5 p- a, p+ w9 S: R2 h* `- import java.io.File;6 [( }! x/ Y, p8 Z O1 j
- import java.io.FileInputStream;
2 Z2 X- c% E/ M! B9 B9 b - import java.text.DecimalFormat; }& i% p3 P2 h7 ~2 m
- import java.util.ArrayList;. \4 \5 h' M1 Y* F7 k! C; M
- import java.util.LinkedList;
: L9 l6 u1 _ x' f: B+ k0 C - import java.util.List;
% d) m' S$ \0 C& Y+ W' S+ Q+ O& I
K" _& h y1 E' R* V! d$ A- ]- import com.uudisk.domain.DirBean;
6 E0 v; J9 c u; v- b" L - import com.uudisk.domain.FileBean; |8 K6 I4 ~0 Z' g
- import com.uudisk.domain.RootBean; X6 y+ P% w! F) J4 h3 M- n
- ) j& u' h2 g! Q2 {, _* z$ @
- public class IterateDir {, g) @; `0 N# {% c Y8 ?% x8 o/ T
- /*
# [# ?8 N% t' n - * 获取根目录信息3 E' F* l7 \! o4 O+ _
- */7 b6 ^: m c& F+ p$ H+ z. F. \
- public static List<RootBean> getDiskInfo(){
. }! _6 ?! K5 j# x - //获取盘符
% C- b% a; T' S, p2 p9 Q1 t, [ - File []files=File.listRoots();
, I# S: ], r: I/ K/ m9 u - List<RootBean>roots=new ArrayList<RootBean>();; p& D( o$ s. g9 Z; R& i5 m
- for(File file:files){
2 O4 Y: [- u$ J7 r J - if(file.getTotalSpace()!=0){4 ] f+ [/ r/ ~
- RootBean rootBean=new RootBean();8 D% @1 m9 \: ^& o/ J
- rootBean.setDiskPath(file.getAbsolutePath());
: B! b% ?9 I' k& |) J6 p* A, A - rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");
1 n6 `9 K6 O% j; q - rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));2 q# m9 m) @( M' u2 s
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));. }- ]) h! }: J# C, _ C8 M& u
- roots.add(rootBean);
" ?! ?! p( S0 ^8 k - }
; e% i r/ i6 T2 B% k3 d6 Z- B# n - }& J8 ^ r4 m" I3 h. G
- return roots;# w6 F* O7 i2 Y$ c
- }
0 O4 l( G9 {* ^+ l" _ - /*! E7 l9 Y' s1 h4 q
- * 通过递归得到某一路径下所有的目录及其文件: d8 k& w% K! n
- */6 A; J9 q: f* a( y
- public static DirBean getFiles(String dirPath) throws Exception{ I$ G1 A4 ^, ?- N; Y/ p# m, ] g
- File root = new File(dirPath);/ z& |# V! f# z6 S9 {" G+ F
- DirBean dirBean=null;+ e! u1 Q4 d1 j L& }% h
- if(root.exists()){
6 G Q! G; n$ D+ K' } - dirBean=new DirBean();; v; p/ z6 U3 G; s# {6 H& A8 V" z2 z
- String dirSize="";5 m: Z1 r0 ?4 ]' w1 b, m( @
- int dirCount=0;
8 k. g; [; r. W* ] - List<FileBean> filelist=new LinkedList<FileBean>();- u5 i" [0 e/ p6 u
- if(root.isDirectory()){
^- v \2 } z& N - File[] files = root.listFiles();
/ X" [% i9 G. r7 e. S - for (File file : files) {
/ l2 W0 V& o7 t% \$ I& P2 K+ S - FileBean fileBean=new FileBean();
! }) a+ x0 O4 Y' e+ `- } - String realPath=file.getAbsolutePath();( Z% O- X$ K- G4 G3 m" R
- fileBean.setFilePath(realPath);
# t1 w4 w; ~0 F0 {! V - fileBean.setFileName(getFileName(realPath));
. E' h! }. _- w: n5 _) O+ C% O - if (file.isDirectory()) { v: [- L/ T8 E& Z
- fileBean.setFileType("DIR");
2 P# B, L( U' z0 o. l- y; T- [& a - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));* z' h4 V# X0 U) p* N
- fileBean.setFileSize("");8 s3 U% Q! J: H- D4 v
- }else{
1 Y$ h, s% e. T+ V- s. }) T+ j - fileBean.setFileType(getFileType(getFileName(realPath)));
5 P# J. W* m7 h6 C( O b8 J8 Y. G1 P - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
2 S9 U9 z1 \! y1 {* R, F - }8 h, }, d7 x# T/ u+ O0 W
- filelist.add(fileBean);: X/ ^' Q- B! m; X/ O$ ]) H
- }
; k2 x% h7 k) n. w: ]- U - }else{
+ p# \6 W( g1 G% z) N% ] - dirSize=FormetFileSize(getFileSizes(root));
2 [( N( I5 b- p7 T$ ^* _ N - }7 e( [8 T7 K2 B, Y. u* ?' J- i
- dirBean.setDirCount(dirCount);
( \( b% _: k8 V - dirBean.setDirSize(dirSize);
/ H6 ^3 o0 p. c3 X - dirBean.setDirPath(dirPath);* k, U& s" l0 o, z8 ]
- dirBean.setFiles(filelist);
& D6 \& Z4 {9 p$ `7 r7 y. N9 Q8 P6 V - }else{
* _& t/ R" Q4 t8 r N3 d F0 a - System.out.println("文件或文件目录不存在");
" c4 {" J* H* Z# d1 |7 E - } ' m ^. |5 K# N% E1 |1 q, `
- return dirBean;0 X% @- e( o- Y8 I1 w* r. J& r V" [
- }* _/ p0 |/ }& u" l
- private static String getFileType(String fileName) {7 I5 z1 P/ N9 `" z3 i0 r. ^
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();, R ^' Z% t5 o9 y+ y9 y: _
- }
9 i3 l6 W2 c- u - //获取文件名+ X6 G/ o1 Z* Z- x
- static String getFileName(String filePath) {
3 L# E q. w0 L" \) e/ Z5 m - String [] fileItems=filePath.split("\\\");
# j$ `, @9 D4 C3 Z! k - return fileItems[fileItems.length-1];5 x/ V# `( C4 a ]: d7 L5 x
- }" H! ~9 J# N. ~! d% |3 I+ T
- //取得文件大小
7 b i+ b7 f$ {' ?6 z - public static long getFileSizes(File f) throws Exception{
/ n+ v7 k' U2 i - long s=0;; S& M7 O) N$ w, S( f2 |
- if (f.exists()) {( L" e7 f0 Y R8 Q
- FileInputStream fis = null;
- k1 f5 {# |3 A2 s5 Q: I3 A - fis = new FileInputStream(f);; ]2 ~* R$ f( y' P! t- s5 _% N
- s= fis.available();
; F( U: i7 [- E, U/ s p3 B - } else {
4 R6 ^9 T9 k4 L+ { J7 D - System.out.println("文件不存在");
9 ~1 u, c: F4 N: M* l# w - }- W3 [/ R% U6 E6 Z' ~ e8 y
- return s;
N3 I5 i2 X0 f - }6 p4 }0 P! o D' I
- //取得文件夹大小' e& ~8 S1 y, U) _( g. u8 D& V4 H
- public static long getFileSize(File f)throws Exception
! b+ s( M. u! f! u/ A' ` - {: B* R2 ^ l9 Z8 o7 J" A
- long size = 0;8 E# C( g. G7 A6 N; a# S
- File flist[] = f.listFiles();
) `8 y, }/ V7 f6 n - for (int i = 0; i < flist.length; i++)
, ~% T Q0 L! S9 Z0 s, \; A/ @" B - {
8 U2 H! ?" J& o0 p; L. ? - if (flist[i].isDirectory())
" X+ r$ |/ S# i2 R8 r - {
8 u# M ?1 }/ z- S - size = size + getFileSize(flist[i]);5 Y7 o9 J- ^% e. {
- } else
0 L/ A% @' Q6 S) Y0 {0 R4 h - {
1 k+ [' B( k, U8 k* @ - size = size + flist[i].length();: P/ X) n. o: ]
- }! W" P. v. @+ ]) y$ k; G
- }3 q7 f1 ~& d; a. A% V' D/ k
- return size;2 o0 A/ y0 z3 |6 s$ P$ h" F
- }
# \. a0 h0 ~# z: Z3 M9 E( g! B - public static String FormetFileSize(long fileS) {//转换文件大小
/ ]/ o8 G1 ?$ L6 R+ H& Q - DecimalFormat df = new DecimalFormat("#.00");3 S* K5 k+ ^6 v8 R2 {% \
- String fileSizeString = "";
8 C9 h/ ^( i2 y; w. l - if (fileS < 1024) {) x3 P- `$ ~% W5 q" c0 u
- fileSizeString = df.format((double) fileS) + "B";% ^4 |/ q4 x4 O, ^9 c
- } else if (fileS < 1048576) {
8 ~: K/ ~" |) r5 Y, a: p0 m - fileSizeString = df.format((double) fileS / 1024) + "KB";
, a! k/ g4 b/ q9 A7 m. S - } else if (fileS < 1073741824) {: O* B* n# c8 j$ b
- fileSizeString = df.format((double) fileS / 1048576) + "M";
$ R5 D |; q, j2 l' E - } else {% t. l0 k+ {% p+ z
- fileSizeString = df.format((double) fileS / 1073741824) + "G";
: x/ h5 w( y& J E - } v/ A) I9 p8 p8 f) Z
- return fileSizeString;6 g. x& \" x8 I) S( \; @# q0 l
- }. b Z" _2 b! }$ i" }3 m# N
- ) A- M5 m7 d6 p- X
- public static long getlist(File f){//递归求取目录文件个数9 j, q" _% w* o/ I0 v
- long size = 0;% v- X2 O4 f/ F! a. E
- File flist[] = f.listFiles();# N0 V0 k: t# U0 ^
- size=flist.length;
! o" c% E3 `$ O$ L - for (int i = 0; i < flist.length; i++) {, f" e. v& A" \6 {( L8 h4 u; a! d" R
- if (flist[i].isDirectory()) {2 @! R2 H0 m5 U# l
- size = size + getlist(flist[i]);
! N! K3 D; ^( O - size--;
/ b0 y6 O1 T8 Z* {! u0 p - }
; S+ J' t; I. d3 d - }* Y3 h4 _+ v; U. I6 A2 O% v
- return size;
9 _8 \# i B" S4 \! E. d
- w9 {/ h: F7 e" e0 Y' {- }
: @( F7 B( A6 G8 Y - }
复制代码 ( P f# O* O5 _+ z+ Q* L
JavaWeb实现显示本地文件目录项目源码解压码:
) I) Z* S3 A- y6 i; u
, Q' N+ M/ K" f
z& k9 q3 x4 i1 a) } |
|