该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 0 J8 L* H: u( u+ i8 e
1 |9 z4 v' A# F; d" B! ?/ v
" |) J3 a6 S# A! N
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
- X! x4 m) h, ^* x& B3 @1 w - ( |( t4 U+ c2 ?4 M- b( X0 ^: S
- import java.io.File;
' C6 o2 [% E6 |* h: F" u" r& q: L - import java.io.FileInputStream;
! E/ z( I' z' O: m8 i8 v U - import java.text.DecimalFormat;5 V4 W$ r& e9 p
- import java.util.ArrayList;
/ H; k6 E( ?" z6 @( b: b N* | - import java.util.LinkedList;
: v& ^! V- s' o; D" h- E, g- q - import java.util.List;
, U* _( ?. s: G% f$ S - ) h H+ q; s% [% e6 G R# t8 O/ Y
- import com.uudisk.domain.DirBean;- c# d1 w4 O- q' C9 N" E
- import com.uudisk.domain.FileBean;
% M# }" e' |1 A; J - import com.uudisk.domain.RootBean;7 V8 l. }% H$ |" s
- 9 x; x; l5 C5 U x- u/ [
- public class IterateDir {
/ ^* g Y! g3 ^/ j+ p7 P' y3 M - /*7 E U G0 H* m: v" h
- * 获取根目录信息
2 n. e' c9 ?8 h2 f - */! O8 N( U6 c4 ~
- public static List<RootBean> getDiskInfo(){' Z6 }- I% j; w' o. L
- //获取盘符" |6 ^$ g9 N$ c; N
- File []files=File.listRoots();
H, q( I' z9 c1 ^2 q6 x - List<RootBean>roots=new ArrayList<RootBean>();, L7 D( P, J" B1 v _# o0 g
- for(File file:files){
# ~1 V7 I9 r3 _7 b+ } - if(file.getTotalSpace()!=0){- ]. G* T0 s& t0 [& w
- RootBean rootBean=new RootBean();
, B0 h: \5 k- T$ z% ^ G - rootBean.setDiskPath(file.getAbsolutePath());
- H' [+ b; i" e% j+ U7 ` - rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");, ?0 U4 }, n! G- n) h7 c) {
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));7 A( D: t2 d, B5 u! a; r
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));1 k5 ]% ^- G# B* G7 K
- roots.add(rootBean);
) u( B' Y4 p3 F5 r1 A7 x - }
c6 j; o G( e8 d, X - }
, K* B! L1 }0 s, z1 ?, J - return roots;3 {. N& E1 g$ M
- }9 @$ N, g6 k) A3 o0 }$ d1 R
- /*( ?' {1 ^* z/ ~; x: W3 R
- * 通过递归得到某一路径下所有的目录及其文件. b) F9 S, F# M! S8 O7 U
- */
) d4 K7 q* b6 Z3 C% B - public static DirBean getFiles(String dirPath) throws Exception{
8 Y: L: \8 v& t - File root = new File(dirPath);6 z. B0 }: v1 d0 x9 v, P @
- DirBean dirBean=null;
. W2 z2 N: a+ z7 Y+ @& `: h - if(root.exists()){5 [/ A; F) C, V
- dirBean=new DirBean();
9 I, }7 n, M. ^+ X' s - String dirSize="";
9 q! f9 e) H: y1 h - int dirCount=0;( y0 v0 v% m+ Q a
- List<FileBean> filelist=new LinkedList<FileBean>();
- G( y* U. D3 k- \9 r4 [& n# _" e) E: | - if(root.isDirectory()){
% Z; o \1 b% B0 `! |( k8 Q; \4 p - File[] files = root.listFiles();( d8 `, W6 T" ]( h% l. x
- for (File file : files) {0 P( E3 b2 v& F b
- FileBean fileBean=new FileBean();
0 G: ~4 i% V5 g' b p& o; ?$ `& w - String realPath=file.getAbsolutePath();' a \; Z* O, A7 H
- fileBean.setFilePath(realPath);( Q1 t4 K& [5 b: s, ]- [6 m$ O' W% b) Y
- fileBean.setFileName(getFileName(realPath));1 a, ^3 m7 T1 [: s
- if (file.isDirectory()) {
7 [1 S0 _* n" ?9 N7 R - fileBean.setFileType("DIR");8 @& r1 o1 d. J7 p- P
- //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
& v7 @! E* [; H4 [ - fileBean.setFileSize("");
$ S0 r/ \9 V5 N- ]. K r6 [& E; I1 j - }else{
0 h- A+ C. h& t - fileBean.setFileType(getFileType(getFileName(realPath)));$ |/ ~* f' W. `5 l
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
6 h4 I3 H# Q S* `9 ` - }
}9 K; t9 [3 B$ o - filelist.add(fileBean);
8 m" Q" g6 A# Z; h; g3 u* D+ G$ t - }
$ S, F6 o# G5 D: G4 I - }else{9 K) V5 J2 ?3 Q" o' J; g
- dirSize=FormetFileSize(getFileSizes(root));
+ F0 q5 A" O8 q5 s6 J* @ - }
6 l3 W# ?& n2 Q1 b- X - dirBean.setDirCount(dirCount);* r1 [( j! r+ G1 A: X+ k
- dirBean.setDirSize(dirSize);) T q4 K& y( J# \2 @, Z' F
- dirBean.setDirPath(dirPath);
; b4 A* A# s% M - dirBean.setFiles(filelist);
5 ?% @5 n* l. g, C - }else{
1 k8 L2 |% N& x+ o$ v2 N- P) L - System.out.println("文件或文件目录不存在");8 G, l0 k* e# T# T: R$ X4 F3 j& B
- } ( z2 E" h2 \/ M
- return dirBean;. H8 I N6 h9 n+ _5 O
- }, {- P# [% p( i4 [
- private static String getFileType(String fileName) {. K" E8 N: t, ?4 \) l0 h/ O5 S
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
# t, b [0 |/ H$ n! n - }5 w. f' o8 s4 @ g5 j
- //获取文件名4 j' Q7 B. b$ z9 u* ]) l/ D
- static String getFileName(String filePath) {
, \# ~% L( C. x4 Y- ]# Q. t - String [] fileItems=filePath.split("\\\");
5 [+ O7 Y" e1 g3 w6 | - return fileItems[fileItems.length-1];9 v: j7 Y$ ~. c: |, N
- }, e: Y9 f6 u+ M9 X( j6 C
- //取得文件大小
2 i/ @0 a w. q1 f% ]2 j. I) Y% w - public static long getFileSizes(File f) throws Exception{+ h! Q7 M6 @( d: u, y% Y
- long s=0;" I# U6 A+ J7 X4 u; C
- if (f.exists()) {0 q4 G v c1 I, m* v
- FileInputStream fis = null;
) _- T1 h8 j7 c8 s - fis = new FileInputStream(f); E5 E+ |% k; C0 L. n3 x
- s= fis.available();( m+ V; n- r }0 t+ R- i+ V
- } else {# E5 q# Z' C) @+ T9 @- S# v
- System.out.println("文件不存在");
' C6 M" w' L6 j6 F- ] - }6 Q6 K# r6 h$ j- F$ i
- return s;' U7 O( `' A2 F2 A* r" W
- }- ]6 h3 c- v* K9 n" D3 ]" H" W
- //取得文件夹大小* s5 b7 p7 m9 S% G0 f
- public static long getFileSize(File f)throws Exception9 O; S2 L! W& M5 d2 `
- {
+ ?) I* N, k1 `$ X, v - long size = 0;
$ B7 m# L% F/ B, L8 X0 v: ` - File flist[] = f.listFiles();, x2 I6 E$ j2 D% Q; O3 X$ P
- for (int i = 0; i < flist.length; i++); I2 d6 u* ^5 u# N7 N8 r1 C
- {
0 f: y( \+ F/ t9 w- w - if (flist[i].isDirectory())
& {: [2 Z* h# C0 [5 @) m2 N - {
% i7 I) B q# ~" v/ T5 \ - size = size + getFileSize(flist[i]);1 Y) R$ S1 ^, |1 {' [
- } else
+ g; U' `5 Q# x0 f' Q) y - {! f! u2 u$ y" }
- size = size + flist[i].length();( n4 g$ O+ d* ~% x$ t3 t) v' s/ O
- }
3 l7 Y) K& p0 ^! {- a! @ - }
& l1 ~" X; J2 M1 t1 f" Y: Z+ W - return size;
( M* u% T5 D- q, m - }
3 v% N) j4 }4 \' c W# f - public static String FormetFileSize(long fileS) {//转换文件大小) w6 t* Y& g2 U3 ]! O* ]: j$ P' ^
- DecimalFormat df = new DecimalFormat("#.00");( q: H! G7 J$ e% U* }; B8 Q5 _
- String fileSizeString = "";0 ^" |7 Y- B% o
- if (fileS < 1024) {
- `0 A# v* H/ D Q* v! v - fileSizeString = df.format((double) fileS) + "B";
$ J: f6 y/ |. a. T% u - } else if (fileS < 1048576) {
3 J: I% \- ] w - fileSizeString = df.format((double) fileS / 1024) + "KB";
! |# e1 \& j& ?% p" @. A - } else if (fileS < 1073741824) {7 E$ w" Q2 w4 | L @( l- W
- fileSizeString = df.format((double) fileS / 1048576) + "M";
N$ p# {$ e8 y5 x3 [7 b- _2 ^! ` - } else {
; x) G k# g- {$ F; v( _ - fileSizeString = df.format((double) fileS / 1073741824) + "G";+ V/ z5 u" j1 v, J% a O
- }" s* {, F- e6 ^' U, P
- return fileSizeString;
2 K5 b$ y+ }7 V) R* X$ S - }
, K' ?# J! j! e# d& M, M3 D - 9 {* k+ H% i9 G3 f. c8 F/ X/ J* i
- public static long getlist(File f){//递归求取目录文件个数
0 ~( F$ U7 [1 J8 l4 }& |& P' ^ - long size = 0;# r7 N- _& q4 s0 o! w
- File flist[] = f.listFiles();9 B! u! U1 @6 W' D/ x d
- size=flist.length;
: T- S* {( T3 ]' [# [ - for (int i = 0; i < flist.length; i++) {
9 L, ?( Y7 @8 M- S$ p/ R, ? - if (flist[i].isDirectory()) {
! R* r; u6 I; h. w+ K2 b - size = size + getlist(flist[i]);
; [' Y5 H+ S) x( \$ F - size--;( Q1 k6 J3 z" L/ d2 W o
- }
& g1 v+ f; x: p - }
8 _3 u* w' ~& m9 Z1 Z4 W% c' p( `6 ~ - return size;; {* v. D! z U. r3 q
* `- f. S2 Z% `7 U% s7 M- }
. r% O, q5 L3 d, \1 b" P - }
复制代码 & b ^/ z5 a( q
JavaWeb实现显示本地文件目录项目源码解压码:
% w- |# Q- m7 v( p
5 t5 ^- u% T) S6 [ 3 ]5 Z8 {. W5 h7 H! ?% I/ e
|
|