该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 - R/ l6 C d$ f) o# E- i( f
% A: ?( o, m/ u: n. t3 O
_7 G" s D6 W$ Q$ R) W) E 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
* G \; P2 G3 E; j/ j4 C* a% A9 U$ b
& q) ]7 e& G! e2 }/ S5 ]# J- import java.io.File;. H0 j# ~3 _3 L' E6 x
- import java.io.FileInputStream;' Z! V p3 P, _$ `- J
- import java.text.DecimalFormat;
% b6 H' ?, i3 }/ n2 w9 s4 b - import java.util.ArrayList;. ~. [5 |* _$ P! {- a- A6 h
- import java.util.LinkedList;
& d/ i% Z. z" W! I - import java.util.List;
0 o) x6 |6 V2 D/ R) ^ - % R2 j& ~' T+ B) S/ r' S! W/ [
- import com.uudisk.domain.DirBean;
( _4 g( [% w" I - import com.uudisk.domain.FileBean;8 t; x6 t1 j% v+ @, W% u
- import com.uudisk.domain.RootBean;3 |. b8 ]# n; e+ o1 \5 f- {
+ h0 A$ d: ~* t3 a9 F- public class IterateDir {
# R1 a$ F: l% p6 a - /*5 _! b6 c5 u' ^7 i
- * 获取根目录信息; j& Y7 \1 _: s# _8 R7 V1 a6 D7 |7 X/ |
- */" P+ [) ^: Y3 B f R
- public static List<RootBean> getDiskInfo(){
2 |8 R- F% h" u f - //获取盘符
% j6 O$ D5 h8 P/ v - File []files=File.listRoots();0 |6 o" R4 X$ A5 F9 M' l
- List<RootBean>roots=new ArrayList<RootBean>();9 G3 N; U. Y2 ]
- for(File file:files){
: P4 {9 O1 {" a5 J# [" T' r - if(file.getTotalSpace()!=0){
# s) k8 h9 A! [' n. s. `8 Q - RootBean rootBean=new RootBean();7 [- R1 y4 A2 w: v- K. m+ O5 y* r
- rootBean.setDiskPath(file.getAbsolutePath());* [6 H* a0 v: Z1 b( D7 u% y) C
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");9 q8 l. w! v* ^. E" T3 I% O, }- H
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
; \* g9 e2 l' r, m - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));: L' y# l5 A+ K) o' N4 q! f9 b* ?
- roots.add(rootBean);! A. e, y4 g3 @3 P/ t n8 |
- }' s7 \, u9 e# j! B/ ~3 H( F0 e
- }# T1 d3 e" _7 j2 E0 S9 s
- return roots;9 L% M8 t* B4 S# R
- }4 i% H% _' Z% i/ ~% R. @
- /*+ L, f- r. v+ P8 ] \ K
- * 通过递归得到某一路径下所有的目录及其文件+ S! L2 H: [5 I' q' E
- */
" N9 o% k; Z# a! ] - public static DirBean getFiles(String dirPath) throws Exception{! w I% Y# }; n5 Q# @& Y; r5 r
- File root = new File(dirPath);
" `* b- p* P8 u- S1 |4 j - DirBean dirBean=null;8 z, i1 \" G/ }# ^6 ]; u" L1 x
- if(root.exists()){
9 U3 W( r5 q, j% ` - dirBean=new DirBean();& ?' B9 Y6 Q4 y: b5 M; I! _! W
- String dirSize="";/ f. S$ `3 ^0 k6 v2 C; \$ S
- int dirCount=0;
) y- P+ J7 S. ~- E& J9 p/ G - List<FileBean> filelist=new LinkedList<FileBean>();
0 a; E. f/ r) q( g D - if(root.isDirectory()){
6 N; C8 ?0 p0 U: X: d - File[] files = root.listFiles();0 e/ w) d l2 N1 D3 z6 ] v5 M
- for (File file : files) {2 b& A1 Z5 z$ M% [7 H7 T. N; J
- FileBean fileBean=new FileBean();
% j! L: B9 Z3 z - String realPath=file.getAbsolutePath();$ q9 G( z: R- }# K
- fileBean.setFilePath(realPath);
* L9 P9 r2 L4 j) } - fileBean.setFileName(getFileName(realPath));6 }1 L. X/ l( H
- if (file.isDirectory()) {! J; O7 X* o- U" d+ w
- fileBean.setFileType("DIR");; f L6 [# C: ~1 d% P1 Q' Q2 {
- //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
3 L/ k! T) g' x `' G) U$ P; u - fileBean.setFileSize("");$ D; z7 j1 |7 r; K. \; C
- }else{
; P% @# c9 B# n9 ? - fileBean.setFileType(getFileType(getFileName(realPath)));
2 k' f7 }) Q* E @3 [! L - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
; w( y1 V8 N1 ?: l6 A5 @ - }
& E; J7 c% q7 B) y1 n# q - filelist.add(fileBean);
$ m0 J* u( z) }2 @0 B$ p - }2 [0 Z" _/ N2 m, V5 \, v0 j
- }else{
, \5 [6 R6 H `. o - dirSize=FormetFileSize(getFileSizes(root));
8 s1 u: V9 c1 R" w" _ - }
& \2 p+ F1 a6 X* d$ \9 x% F - dirBean.setDirCount(dirCount);: E. e; w: U. `# {" G- Z0 }. u
- dirBean.setDirSize(dirSize);0 q) [& ?- M& h7 q
- dirBean.setDirPath(dirPath);
5 d1 Z8 D) G. |& j1 u, k U - dirBean.setFiles(filelist);2 Y7 g/ ?8 @: X1 x7 s
- }else{
9 j+ \/ @3 {8 e4 z2 I# c - System.out.println("文件或文件目录不存在");, y9 `% \; r! u, w m0 r6 v
- } 4 p# i+ W7 b% X Z" g t0 E
- return dirBean;/ U( m! e& l4 i5 K3 r) M
- }
1 ^7 N1 w# ~: x8 z- l+ K( _ - private static String getFileType(String fileName) {
2 z& J1 e) F, t - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
% U; ^% W2 @- w( s t6 k1 q9 |! l3 T - }
) g) C- z, }$ ]- L8 I3 t3 V$ I - //获取文件名& V; N+ _' r g o
- static String getFileName(String filePath) {
/ O( N$ u' v- \0 K( l - String [] fileItems=filePath.split("\\\");
' A d; E2 g) J8 L2 {8 J - return fileItems[fileItems.length-1];
/ @) l- M2 `) h {' `3 v1 D( r" ~6 w6 T - }* P& c$ X5 Y+ V
- //取得文件大小
+ h, R8 w7 j; o - public static long getFileSizes(File f) throws Exception{8 B6 A2 _8 z5 b2 [6 [$ s5 a4 R
- long s=0;5 |8 R- x. Y, S. f
- if (f.exists()) {5 e0 a( {: I. v
- FileInputStream fis = null;
* l3 w( L1 @8 X! J; O" y - fis = new FileInputStream(f);7 V# d$ J9 i/ [: D$ u1 ^
- s= fis.available();% }) l% u" |5 c! H0 M
- } else {
% E, M% y$ }, l! E O+ g5 H - System.out.println("文件不存在");$ f$ P9 v y% G8 @0 z T
- }
$ h% B7 {& A+ W9 a1 G1 [' m - return s;) m! A' y9 v7 c: _
- }
: x3 h: z8 m: G6 c" S - //取得文件夹大小
% J# O7 X5 I$ b. ~( \ - public static long getFileSize(File f)throws Exception
) m- |: l- c& { - {
0 A% P( N* h7 g. i - long size = 0;0 k, j$ L) E! E: U/ P5 F
- File flist[] = f.listFiles();
5 x1 D+ b7 l, ^2 I - for (int i = 0; i < flist.length; i++)
1 I2 N! {, @& O { - {
/ e+ V3 T( b+ a( ~" }7 N0 z% N - if (flist[i].isDirectory())
- U% \# n% S' H( A0 w - {7 L7 y' m8 Y& w; }6 T/ T
- size = size + getFileSize(flist[i]);
, x4 U+ p* l9 n - } else
' B8 W. O) I% c - {
" O$ i$ U1 a6 C5 q3 R2 E - size = size + flist[i].length();
/ f' F, ]0 a) S+ V# [ - } Q& E( ~$ x% R3 H8 C# Q
- }
7 j h5 {9 `! Q6 ? - return size;) v1 J/ D" D- S& J6 V
- }) v6 Y% a7 ^; q; R3 U$ U: H
- public static String FormetFileSize(long fileS) {//转换文件大小
* n/ k& x. @ i4 \+ ^$ Z ^1 e - DecimalFormat df = new DecimalFormat("#.00");- u" z5 D+ O1 v5 r; X$ ?
- String fileSizeString = "";& R& h, |1 L% t. g7 N w
- if (fileS < 1024) {/ i4 ~" k7 ?+ O- S. M& q4 ^; C
- fileSizeString = df.format((double) fileS) + "B";
+ a! x8 J( `3 A' r' T/ ^1 \; P$ x - } else if (fileS < 1048576) {- |. n( Q7 R. S5 u5 r! D4 o3 s
- fileSizeString = df.format((double) fileS / 1024) + "KB";2 U0 ?1 j0 U1 x; i+ [' l; ]( F& i
- } else if (fileS < 1073741824) {- t/ F- k' L/ i% z) W4 I2 W
- fileSizeString = df.format((double) fileS / 1048576) + "M";
/ ] Y4 P* k# Z4 }8 L( {; C - } else {
7 Z) n, s, j$ S% Z. H* { - fileSizeString = df.format((double) fileS / 1073741824) + "G";: C8 C* B& ^4 @: ?3 ]
- }9 S6 y7 e3 c* ~/ N: S
- return fileSizeString;
2 X1 D% A" I! X3 _. s% a - }
: L- T+ i6 {/ B, c, N$ }7 x6 _: Z -
- I# z/ G, h, @: }% d - public static long getlist(File f){//递归求取目录文件个数. U- M1 T* B0 e
- long size = 0;
' A, w$ x6 K" Q7 g4 Q: v - File flist[] = f.listFiles();$ k! Q6 I! z8 P3 j
- size=flist.length;
6 @# \: O$ f( A6 X4 c. J: N, f - for (int i = 0; i < flist.length; i++) {+ ]& z: d3 |3 U
- if (flist[i].isDirectory()) { E8 F9 t2 n* r0 W( K
- size = size + getlist(flist[i]);
% o& O! \8 b, G1 x! Z - size--;
( W' X* a$ l: N, v" k* s" D - }
2 o" [ U- |& X5 o4 F9 w8 O - }
* y0 l$ r( A, Y0 F. E6 m - return size;9 F2 t/ G7 m) m2 S
- 0 o( m1 h, [$ {$ Y- I0 |* u
- }
# B0 |( G( D2 Z& G6 C - }
复制代码 % X2 n1 `% M* d# R9 \! y( N) [/ \
JavaWeb实现显示本地文件目录项目源码解压码:
' P4 {4 ^9 K6 J3 D# {4 Z3 E" ^4 d7 P* e2 g) l" ?
% @; S5 G- k) w$ y/ `2 e: {7 r$ P
|
|