该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 ; P& J* L& J. W# k; W0 u
) d2 F( f5 a1 ]9 \
3 C% s! H9 g/ p. E 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;6 U3 w+ W% f6 F& v& F" x# B) p
- $ _, e; B" Q: |+ S
- import java.io.File;
7 i- p3 ]* n# V( k - import java.io.FileInputStream;3 V5 F$ F) B2 B B( n
- import java.text.DecimalFormat;7 _* Q$ i. N" z5 @, a, T4 G! W( v
- import java.util.ArrayList;: o0 q ~+ y" t( O) X
- import java.util.LinkedList;
! z4 N# N$ Z; X/ L- _/ @ - import java.util.List;0 B0 n3 }" w1 X6 @4 F. E& U
- X+ ^& w& q4 T' T! p- import com.uudisk.domain.DirBean;/ o$ s$ J9 v$ Q3 R
- import com.uudisk.domain.FileBean;4 a, W) W1 E7 Y: s
- import com.uudisk.domain.RootBean;& X, Q. y* |3 Z2 K
- 5 M, N, n& ?) P1 [" \% R7 N% C% G
- public class IterateDir {4 W( {1 ]4 ~ V- o+ s6 r
- /*) u! j' @ n8 _
- * 获取根目录信息
5 J/ X3 q& j( g7 w! i0 k - */1 ^ U6 L% y9 y+ I7 \2 k4 D
- public static List<RootBean> getDiskInfo(){
|, m3 X3 H: ~7 `( g6 Z - //获取盘符, N+ \# s* Z9 ^
- File []files=File.listRoots();2 r. ?, ~' c5 Q+ z1 r
- List<RootBean>roots=new ArrayList<RootBean>();" p! ~; ^* ]' M1 H2 P
- for(File file:files){, J3 [0 S- n( `2 I9 p
- if(file.getTotalSpace()!=0){
3 g8 n' ^4 g7 |, O& P - RootBean rootBean=new RootBean();* }% t5 X3 o- i" `, I
- rootBean.setDiskPath(file.getAbsolutePath());
8 v! Y* m" F7 v6 f% [. A - rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");2 P* G0 n( c! \
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
8 v7 Q) D# \* P8 L/ r - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
! }2 F f4 P/ s* s2 p% p/ w - roots.add(rootBean);4 Q/ _, |* S% a% K" |) z! v
- }& a: u9 r8 l# B D- l
- }
6 f8 Y+ ^ _9 }/ G% ~# ~3 C - return roots;
7 C9 \+ M6 [, d( _1 X$ S# Y4 J: t - }
! i$ J/ ]( m* x- Y7 T - /*
$ V. J" f& a8 O3 U* w0 P - * 通过递归得到某一路径下所有的目录及其文件
. F3 h: E) H# r1 q* g& x, F - */. E P- v& U5 f. m7 } _8 C
- public static DirBean getFiles(String dirPath) throws Exception{3 p, f) @# @6 w! L" P" R
- File root = new File(dirPath);" `6 a A: @' Y! f$ c
- DirBean dirBean=null;
! n/ o5 |3 u" S1 A - if(root.exists()){8 @/ z8 Q5 {3 V: O1 c) p% V
- dirBean=new DirBean();% w2 Y# i" Q U u& _
- String dirSize="";
0 H( r/ n' [$ k' x9 L - int dirCount=0;" Y# z6 R7 f% p
- List<FileBean> filelist=new LinkedList<FileBean>();9 _5 |( Q2 U& g
- if(root.isDirectory()){7 P- k7 ?! e7 S
- File[] files = root.listFiles();+ |+ e8 x' o( R# @ ^( k5 A, ?
- for (File file : files) {
% T+ I2 `+ ]' A9 `' Q - FileBean fileBean=new FileBean();" G3 }' [2 q, \4 z
- String realPath=file.getAbsolutePath();
8 \% t: H6 s9 E0 M - fileBean.setFilePath(realPath);( H7 t2 q# p" c6 Q$ z
- fileBean.setFileName(getFileName(realPath));
& a, k- o; O9 | I - if (file.isDirectory()) {$ a; I8 g1 w2 V; r* @6 s
- fileBean.setFileType("DIR");
; f- I* ^8 Y, h - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));9 K9 _' Y9 `5 X- h
- fileBean.setFileSize("");
/ \, L: S% O t$ R9 I4 I1 h6 [ - }else{4 Y: w* |9 \! B, x0 ?* t' G
- fileBean.setFileType(getFileType(getFileName(realPath)));
/ }# b3 l$ M0 F$ {0 L - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
" Q/ }, y2 q8 H H% B - }+ R" F+ L, O) }3 q' J
- filelist.add(fileBean);
3 K$ v% @: P: \4 @* Y, _ - }* k0 i" A- \9 i' \$ @4 W# O
- }else{" ?: N, u! I2 D0 M) q
- dirSize=FormetFileSize(getFileSizes(root));
. V1 d; o$ Q( \% P. f t - }& p# o" z4 \2 P0 \
- dirBean.setDirCount(dirCount);
4 N ~3 g3 M+ e1 K/ \* w - dirBean.setDirSize(dirSize);
" Z/ @1 K, J. d o8 E. x - dirBean.setDirPath(dirPath);
, [* [1 ~! [# \+ v& f7 W - dirBean.setFiles(filelist);
4 H2 W2 b2 p7 B/ |2 t0 g. X* q - }else{ p. S5 u5 c/ o& [0 S: P
- System.out.println("文件或文件目录不存在");
/ ~) j# k6 S9 K8 v7 l - }
9 p. \7 \; M1 ~/ I& p2 ]0 a - return dirBean;- F2 J2 N3 g9 ?& m, S& w" C# c
- }4 J0 ~% x- b, y( o5 i5 X4 B6 |
- private static String getFileType(String fileName) {5 J! G Q# S0 h9 F( |1 n& {
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
& i3 G. W, X, E' x - }
$ U6 {7 v6 t" t# w9 [# d - //获取文件名
8 J3 Q4 r* X9 H3 w$ E+ r - static String getFileName(String filePath) {
2 q" y, _2 e$ F4 l' `" |1 v, O - String [] fileItems=filePath.split("\\\");: r* F; ~6 n! [. V* e% ~/ C& Z$ I. i
- return fileItems[fileItems.length-1];
1 b1 o. k" T4 m* g! P [ i: F - }
" |; ^. ^# J6 {: }6 h3 O - //取得文件大小
% b% C( `, e, I, d7 N: z1 C; S( s - public static long getFileSizes(File f) throws Exception{% `! l) g5 M( o" N
- long s=0;
5 W( ^# _/ l6 `/ y5 Z1 ^) v& M- {* v - if (f.exists()) {9 g! _' R- u0 d' W* ]/ {
- FileInputStream fis = null;% r0 g" A) i$ R& i7 N( _+ {6 I/ p
- fis = new FileInputStream(f);, d$ [* U# D0 ?+ G! J V# P
- s= fis.available();( T! X G- ]' `0 N) y( }* m) e
- } else {! P0 w% T% d* d. H0 y% {
- System.out.println("文件不存在");
2 O) u% u, k# @& S - }3 r( R0 {, ~; ~ V" h0 M& M0 o
- return s;
) P( Y% A( B- V4 E% Z5 _4 n - }6 Q: T- Z: C# E
- //取得文件夹大小# I( q* l6 Q# W+ x) }; i0 R
- public static long getFileSize(File f)throws Exception# c* x- E4 k1 x) I9 Z) w
- {
/ A3 a- h# ^5 G$ g5 |7 d/ ? - long size = 0;% q) O) N6 C9 ^" C2 ?
- File flist[] = f.listFiles();1 {; j( F1 z2 @ T3 n) j
- for (int i = 0; i < flist.length; i++)
8 x m6 f( w( r& h5 k+ v - {( x5 m" Y# G' n/ X
- if (flist[i].isDirectory())
9 s* Z9 |* j: Q% l5 s; d+ O( ]) g - {
0 T) _6 t+ ]4 @8 I; Q. r- j. x - size = size + getFileSize(flist[i]);
, l h& O$ ?4 L; V - } else0 d& x! \" `' @) X& n4 Y, H
- {
( c9 v4 g1 z Y5 k2 ] - size = size + flist[i].length();: v' j- J9 W/ \8 \
- }
6 K, ?: J0 P8 R4 F/ b1 j - }
8 k% b' Q- i3 G - return size;
& W1 j- b9 a4 G% @# s% E* h - }# {; w5 y2 ?& S' D# u% h5 G1 w
- public static String FormetFileSize(long fileS) {//转换文件大小5 k+ C' Q9 Z0 Z. I
- DecimalFormat df = new DecimalFormat("#.00");% p8 @+ ^5 @, u& f7 F0 z
- String fileSizeString = "";
0 o( J9 a( D& S& h! s - if (fileS < 1024) {
1 p4 b* f$ e' n* \5 q4 z8 o - fileSizeString = df.format((double) fileS) + "B";8 }. Y' M% k+ h# C& U
- } else if (fileS < 1048576) {- h+ [! u Q/ B; T/ g$ ^# l
- fileSizeString = df.format((double) fileS / 1024) + "KB";
+ J& f# W* e' P9 O) I" w. M - } else if (fileS < 1073741824) {
, r# U* A9 ]+ O" k - fileSizeString = df.format((double) fileS / 1048576) + "M";$ e- Z- c. ?' w4 H$ N' }9 t
- } else {6 W5 p( ]- ?4 b( a, J T
- fileSizeString = df.format((double) fileS / 1073741824) + "G";# H5 S7 `# z4 G" {
- }# [8 j8 ~7 H8 ^" ^
- return fileSizeString;
( k0 h4 u( n$ {& H) _3 [; P - }" ^4 b* }% b7 Z; d. C
- 2 s. n& N$ m: E5 _8 [
- public static long getlist(File f){//递归求取目录文件个数6 b; X9 C _3 r. o
- long size = 0;
$ u: L( z3 o$ l$ L - File flist[] = f.listFiles();
' z2 Z$ F1 d& m0 M) m - size=flist.length;/ D7 q" P2 N- V3 a
- for (int i = 0; i < flist.length; i++) {
) }) U" G2 A" @# V \6 t4 G4 M - if (flist[i].isDirectory()) {# `6 E7 R- R% W- c
- size = size + getlist(flist[i]);
1 B9 ?- [6 D) ^/ |- A - size--;; J, C8 {- V( e0 I c
- }
% V2 D( Q+ n+ @7 t Q - }
1 V2 W& E4 X' J: W - return size;- U1 l% Q$ ~. j4 F3 b! C% k
- 2 [. ~9 L, e' p( _0 D9 G
- }. E' }( s# `9 n
- }
复制代码 & }! ?- S+ U" {$ o0 z1 B
JavaWeb实现显示本地文件目录项目源码解压码: 8 U6 M, o1 Y. r8 a! G& K
/ S8 U# r- R) E5 k& m; ?
6 b; D. Q; r/ `6 a |
|