该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
% r& q3 r" n; d7 T
% t3 E% ^, M7 Y/ g
' n" H2 f0 v. d+ ~" g" V& g2 i 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
2 a& s& _6 ]9 L+ i, d - ; t5 ~5 j$ [% O) Q% Q
- import java.io.File;
6 d0 R4 ~0 J3 O* r% ` - import java.io.FileInputStream;' U* O V; W3 |+ W( k2 _4 j
- import java.text.DecimalFormat;
6 C7 r) |: Q2 P6 b5 t1 C7 E7 R - import java.util.ArrayList;, l+ t# @7 D! o6 q. |
- import java.util.LinkedList;# r0 V! s# R+ G: j# g& Y
- import java.util.List;. Y9 E/ M9 }7 w- k( I! E. |
- - R; n; Z* E! b, V3 t6 v7 ]
- import com.uudisk.domain.DirBean;
7 \7 {; ?; v/ M - import com.uudisk.domain.FileBean;
8 E% d9 k1 o2 J" f - import com.uudisk.domain.RootBean;
* Z* l: K4 m9 g; H - S% \8 D* x+ W
- public class IterateDir {& o: i+ I0 L) `& U x M) x
- /*
8 W( x6 } B% J# I- \8 e7 V' _ - * 获取根目录信息( `9 c J7 w/ ]
- */
6 p( k1 x' ^6 E" T1 N) E2 ~ - public static List<RootBean> getDiskInfo(){
' A+ B- Z. M+ `# f6 t - //获取盘符1 r9 X: c7 e( k& c) E% [4 y0 _
- File []files=File.listRoots();
7 E% X6 @/ |* Q! Y( R - List<RootBean>roots=new ArrayList<RootBean>();
% n* Z d0 G& f' G8 H - for(File file:files){4 r' T% }2 T. z. |% m
- if(file.getTotalSpace()!=0){( [$ j) H0 G2 y7 o! e6 X4 a& }
- RootBean rootBean=new RootBean();
: O( n1 j& z0 @& Q+ T. o+ Z - rootBean.setDiskPath(file.getAbsolutePath());0 ^7 p9 Z2 Q3 X( s% Q& _9 p
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");
$ l# T l: o \+ N/ e - rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));4 Y. ^9 F% s: o- c- g3 M' I1 g
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
4 D; u) [5 P [" d2 e - roots.add(rootBean);
. P. V$ z1 L* Z1 v7 N - }1 q: }( X0 r8 i/ G
- }6 x5 P; Z& a, U6 e9 j9 ^
- return roots;
, _' e0 V: B) w3 r& G$ g$ W - }
- h$ E4 i1 t9 {' E G3 ~ - /*
, ]# R, G( l4 v' @7 J1 S" M - * 通过递归得到某一路径下所有的目录及其文件
8 j% u3 S- `% t! I* }4 h& Z - */( r7 a8 a1 n4 h+ a: W, W
- public static DirBean getFiles(String dirPath) throws Exception{ h( M; O( o. Y# T k8 B+ s
- File root = new File(dirPath);9 S) n6 `3 ^$ t8 @9 Z
- DirBean dirBean=null;
. r, K( W; T" U s - if(root.exists()){
1 r' m D4 b. {" G# v8 R( l - dirBean=new DirBean();
) a/ N/ I0 \1 b; j" ]: e! n5 B - String dirSize="";9 a1 k3 s% A' t( c! P. p
- int dirCount=0;/ I. J6 h. G$ o, F6 F! D( g
- List<FileBean> filelist=new LinkedList<FileBean>();
0 w0 \! W( y( o- t( M8 {/ k5 Y - if(root.isDirectory()){, \+ Z1 Z5 {1 g% r6 [: X& e
- File[] files = root.listFiles();
$ y) S! ^& V l+ |$ x - for (File file : files) { m6 X0 }- x( K0 I
- FileBean fileBean=new FileBean();0 `) j$ L$ P! G$ L& p7 k9 {
- String realPath=file.getAbsolutePath();! n$ r7 _! s5 n8 S/ H6 g+ G+ p" V! w
- fileBean.setFilePath(realPath);
% H+ A$ K$ e% f* y9 h1 F - fileBean.setFileName(getFileName(realPath));" u* C' G" y: Z9 U- C. G G' P! ]
- if (file.isDirectory()) {
i5 _; G2 [2 c# E - fileBean.setFileType("DIR");
# Q) H/ Y3 t L( I, X1 n; L - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
& [! ^4 ]1 o) C' V - fileBean.setFileSize("");6 W) ]3 n+ I5 U7 H K
- }else{0 k$ r2 @: L# E0 W9 b. `
- fileBean.setFileType(getFileType(getFileName(realPath)));2 y8 n" F/ K$ T& B. i' m" b1 k+ f' h& U
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
: Y7 R/ a6 ^; H' r3 p. f' j, r - }
. J- S2 q# { _3 s - filelist.add(fileBean);% n2 u7 ]8 k9 v0 k N7 i
- }
% a% _; g- N9 x% O- h - }else{+ |6 k( j2 G* V' c' a7 ]
- dirSize=FormetFileSize(getFileSizes(root));
. l" n; i, [( l8 Q" A - }& O# S7 _1 E, R' Z' j
- dirBean.setDirCount(dirCount);
! \: u# O, H) K9 Y" _- k7 p+ X( L$ j - dirBean.setDirSize(dirSize);) R- O! e6 I! R$ h& i
- dirBean.setDirPath(dirPath);" J* W+ I5 q% f7 t
- dirBean.setFiles(filelist);
% v! n4 G6 M, o8 U - }else{. b/ m* V. j8 ?
- System.out.println("文件或文件目录不存在");
7 \ t8 Q. w" `+ C! Z7 j - } ! f, k l6 g2 h( R
- return dirBean;4 v. X# g9 S. X; b7 b2 q
- }& N! R0 @- D2 Q. j/ D- l! S+ F* h4 d
- private static String getFileType(String fileName) {* U1 z9 p& o) Q
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
3 k4 b% s2 e2 P/ m6 u: V* X - }; {7 R7 `0 Z9 Q2 E/ s' X
- //获取文件名
) D8 c& ^' m$ v7 t2 ` - static String getFileName(String filePath) {5 X! {. r' G# U# c# }3 Z8 t% f
- String [] fileItems=filePath.split("\\\");
% z2 `1 {$ r5 w* j - return fileItems[fileItems.length-1];
9 u5 U/ Y# f3 a4 G+ e - }
5 }3 j6 y2 J8 N3 B+ V1 m - //取得文件大小+ C2 t- P9 Q9 @8 r* [" M4 k! J E
- public static long getFileSizes(File f) throws Exception{7 ^$ o. A4 I- w Q
- long s=0;
+ Q/ [, E6 N0 d1 f, p3 L6 {: F# i+ f - if (f.exists()) {
9 [) y( e2 |3 [' A! ?. M - FileInputStream fis = null;. R# Z$ C5 m$ ^: C# T- S
- fis = new FileInputStream(f);
9 A3 ~- x, i/ {4 _1 }' d' V& } - s= fis.available();
- L. G" N( L/ {& G. k! c - } else {) b5 h5 a# C5 j2 n: w- D
- System.out.println("文件不存在");
2 Q6 [' J9 p0 x- [. Y - }
$ f3 M" A2 y7 V9 W2 s - return s;$ Z0 Z, }1 ~0 L2 y4 Z- \
- }
5 D) k; u% @ M( x* }8 Z - //取得文件夹大小
9 L! V# M7 C, G* w1 l4 n, a% ? - public static long getFileSize(File f)throws Exception+ ]0 r! \2 A- s# m$ f& _* L6 i
- {
" _7 R `# x# A( [. H8 j# p4 \6 @ - long size = 0;
- Q1 K# I9 m4 d) ]2 |8 K* E8 M, G, m - File flist[] = f.listFiles();
3 c3 I" k1 {2 L( g- s. A7 ` - for (int i = 0; i < flist.length; i++)) G/ @. ~6 d+ p1 y: A2 B
- {- ]2 b; ~% U M! V
- if (flist[i].isDirectory())
" M4 ~; T( O c2 O$ @ - {
' I/ N( a9 ?1 Y - size = size + getFileSize(flist[i]);% L/ n$ k& X0 v" Q$ \9 X
- } else0 D6 ~, s- _6 e
- {
& v4 g9 ]* c. L( v, { - size = size + flist[i].length();
: ^7 b2 l5 r$ P+ m6 P% a - }
) b* i o: ^% [3 P - }
- `! G" M; P! t0 p( c$ m# l5 i2 r - return size;
2 _* R$ a/ [! A- Z% R& ~ - }3 \; H( F7 |: ~# D' v( n3 c
- public static String FormetFileSize(long fileS) {//转换文件大小, [6 C1 ^3 G. ]+ q) P( W% S* r
- DecimalFormat df = new DecimalFormat("#.00");; ]7 P, }; p6 d
- String fileSizeString = "";( y0 |( H# n4 O6 h" d' q
- if (fileS < 1024) {
1 j9 |( p0 p8 o: Q" x. ^: v2 S2 D - fileSizeString = df.format((double) fileS) + "B";
/ n1 ^# o9 s0 N' J - } else if (fileS < 1048576) {
( o! M5 Z2 m) B. ] - fileSizeString = df.format((double) fileS / 1024) + "KB";/ r$ O, K/ Z$ [+ {# O8 L8 |
- } else if (fileS < 1073741824) {
' O' {8 ]/ p9 K - fileSizeString = df.format((double) fileS / 1048576) + "M";# ~5 R, z) \/ ]( B/ ]/ j
- } else {
# U3 c# A4 g6 s" F+ L8 U+ }) F8 P8 e - fileSizeString = df.format((double) fileS / 1073741824) + "G";, K1 ^* t. Y1 T; j" q
- }
6 q9 L0 x$ C! D6 }2 t0 _( F# d) e - return fileSizeString;
1 L) V9 J# {- u$ Y7 L: E: n+ c - }8 w' J/ X. T" W6 P4 M& j: h
-
5 B7 l; G* @4 a" T! }0 X - public static long getlist(File f){//递归求取目录文件个数
/ r- T2 `: l6 G - long size = 0;
2 v( Z8 T/ `) c r0 |- A3 Q - File flist[] = f.listFiles();6 }" Q6 A) }+ a1 K* w) j
- size=flist.length;
# g! @5 R* ?- U3 s/ e& G ] - for (int i = 0; i < flist.length; i++) {
2 j! x, F7 K* [1 ]8 u - if (flist[i].isDirectory()) {
5 S2 Q) g8 g$ d3 h - size = size + getlist(flist[i]);
R" U' |# y5 ` - size--;3 H% q: H) a4 z; d9 y( N
- }
; q9 u7 |' N0 L7 `% [, N/ _9 p - }
. j: |, i; x8 O! a1 Q - return size;
+ }& C/ L4 v' h2 B# W - 6 D; K( X" f( w" |$ t
- }( H0 _# N! h- r. \- n
- }
复制代码
5 A+ M h$ [# q6 E# X$ }; UJavaWeb实现显示本地文件目录项目源码解压码: 7 c0 W/ Z! q$ V; W
$ ~% r3 U/ m1 V
3 r( B _; y1 n' j& y |
|