|
该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
4 I4 f x' I' s0 R0 x6 t
+ L; N. ]5 G2 E G2 z
" T3 z0 _: l1 \- N* e 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;; x5 |) o* G& t' ?) y
- $ Y" _5 Z- @2 A3 s$ q0 {) H
- import java.io.File;# b* q4 \/ i9 T7 D% V
- import java.io.FileInputStream;3 q2 p4 x: d! H2 F
- import java.text.DecimalFormat;( B6 M* }9 l" K3 k# d
- import java.util.ArrayList;
( y7 q0 S( F" h# L( w# H+ n - import java.util.LinkedList;
' T W; b% t" H/ p# A - import java.util.List;
2 o0 u/ u8 l. W1 k8 c. `# @ - 0 x/ [4 ~ B0 q: W
- import com.uudisk.domain.DirBean;
7 V( ~* y. K, H2 E - import com.uudisk.domain.FileBean;
D! \, Z( H5 Y - import com.uudisk.domain.RootBean;
' E/ o$ m( C0 X1 J, v
5 I! v! X0 l0 w: \- public class IterateDir {
4 }0 W8 J% d) ^9 V1 j( i9 ? - /*
% ?2 ]! j% M8 ~0 ` - * 获取根目录信息
3 Q( `) L+ L! P5 b' W8 b - */2 L K t/ i' F/ W/ N- z
- public static List<RootBean> getDiskInfo(){
( O6 P: {1 l# d2 V - //获取盘符0 w7 [1 }+ K) D3 [; P( d# u
- File []files=File.listRoots();$ b; w$ N! U! y2 R& E* S
- List<RootBean>roots=new ArrayList<RootBean>();% ~2 E% C7 j8 x8 T$ k' P% Y9 C- W
- for(File file:files){* \# I) z2 P) ]9 o" t
- if(file.getTotalSpace()!=0){% x; c$ G& b) p5 }+ C+ j( x a
- RootBean rootBean=new RootBean();
$ B5 M3 s3 j7 X% v% t; Y i - rootBean.setDiskPath(file.getAbsolutePath());
7 Y: D2 S5 y2 o8 K% W) d* q, n/ ` - rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");
; Z; A- {6 \/ D0 s1 _6 v ~ - rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));# m2 K% X- H; u$ D/ a/ P" r* \
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));9 o. U( m* Y# c+ Q% O
- roots.add(rootBean);
0 s: }% B& C2 e7 V* P+ ^ - }
E4 n" N; N4 I: o& v - }- {: i# ?2 p P" _, J! B5 Z( q
- return roots;6 v1 @: w0 z" Q" Z; P* e) e
- }6 W% E/ q& d! h4 J" }+ r
- /*
1 r) z* }2 X- i4 ~% g) }7 }: Q - * 通过递归得到某一路径下所有的目录及其文件
$ h M8 C: Y+ m, s, j - */
+ `3 ^4 n# o" ]; x# C' m - public static DirBean getFiles(String dirPath) throws Exception{7 t2 m9 ~4 t7 ]2 L5 H' x0 u0 ^
- File root = new File(dirPath);. _, ~, l9 w) F3 s- S
- DirBean dirBean=null;7 T: e \- Z( |, x) `. j7 k2 `
- if(root.exists()){" ~% f3 _# _' s# q& ?7 [$ Q- q
- dirBean=new DirBean();' i8 \% ~: `) f1 m7 Q- u0 V
- String dirSize="";
+ G* c' L' _5 t: D0 m3 U, C - int dirCount=0;
" x/ m! w; P, c2 G0 P( G - List<FileBean> filelist=new LinkedList<FileBean>();9 S8 Q i9 H* j. e% Q
- if(root.isDirectory()){
& I; r5 r; A- l6 t) J; D - File[] files = root.listFiles();% T" @. [7 T, g, K$ z
- for (File file : files) {
, Y6 B2 ]. Y0 d - FileBean fileBean=new FileBean();
0 P5 y) F5 F. {# }+ u) n - String realPath=file.getAbsolutePath();; F2 X( V6 w; Y B
- fileBean.setFilePath(realPath);! k( a: L0 j H
- fileBean.setFileName(getFileName(realPath));
! _4 Y) C% q2 Z0 e' E5 G, I - if (file.isDirectory()) {& Q6 H) `8 E& J/ Y/ _; T. E
- fileBean.setFileType("DIR");
2 w) E0 T. V% V0 V5 w - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));/ G5 K/ v7 ?( h3 I! J. `1 K
- fileBean.setFileSize("");7 c5 h4 m- u* `: @ B- k0 j0 s
- }else{, k+ M' e" k- n* J; T+ p
- fileBean.setFileType(getFileType(getFileName(realPath)));
. P; q( r; E4 q5 o: l. ] C1 H9 v - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
* D1 a9 [ R. H+ y* } - }
/ _ R: `- r3 `- w; K - filelist.add(fileBean);1 m, \& j1 {6 ~5 `0 K) n
- }$ K# w2 r" Z! x3 b: o" Z6 d$ a
- }else{
) n, a, w7 Y+ d0 z2 j# s: a - dirSize=FormetFileSize(getFileSizes(root));
7 m; h, U4 }. j9 m - }* Q7 X: M- g- ?; W
- dirBean.setDirCount(dirCount);
: c/ i* y- @1 c( h5 ? - dirBean.setDirSize(dirSize);; u* c" E3 f; v
- dirBean.setDirPath(dirPath);" W( b, b2 v8 X1 t8 X2 K! K: }
- dirBean.setFiles(filelist);- u1 F( L( y, x I
- }else{# E* \7 E. ~$ f) B
- System.out.println("文件或文件目录不存在");& x3 y# q" v' u
- }
' h! ~7 e" j* i9 s - return dirBean;
$ W! O" h8 r' s! i6 d5 S - }
7 g8 S& T! q- m2 n& H: Y3 X4 B/ ` - private static String getFileType(String fileName) {
% c- b3 |2 z" e7 m' F - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
3 S. g; r8 I; y4 E f5 I8 [1 h: e! j - }9 j. _* T# M. W, Q2 y" q5 T
- //获取文件名
' @% w, |/ o6 z7 a7 t; M - static String getFileName(String filePath) {, b$ E9 M ~/ E8 |, @
- String [] fileItems=filePath.split("\\\");! n$ q. H* s5 c# X
- return fileItems[fileItems.length-1];
! V% y& x- J; ]- d - }
# {5 }7 j$ G( \" q% W - //取得文件大小
+ ^% c4 C A5 y - public static long getFileSizes(File f) throws Exception{5 \7 i8 D4 ]+ T' m) C
- long s=0;5 |- x: e8 p: M2 p- p" Z) |& L2 M
- if (f.exists()) {! k/ U/ H4 L& a
- FileInputStream fis = null;& p" E% h. D, O2 z
- fis = new FileInputStream(f);
9 ~6 l+ v5 O# U0 M7 |+ @' Z* | - s= fis.available();
" p4 U5 [* e# j3 w - } else {
/ H8 k% z2 ^: P) A" z - System.out.println("文件不存在"); }, L" y7 b) z$ v" ]$ y
- }' j" o4 | j! |% O! r! O8 ~
- return s;
0 D' U) ]5 M2 |( Y - }" `. N6 l1 r; x/ C5 F O& I, E
- //取得文件夹大小
, @- h$ `2 W* `" t - public static long getFileSize(File f)throws Exception
, \6 r d2 t( P/ n - {) ^2 F; ^2 m% \/ a
- long size = 0;
+ J- [9 W" K! |) C- U8 a - File flist[] = f.listFiles();
' K7 J, p* q& y; [6 D$ \: | - for (int i = 0; i < flist.length; i++): V, p# e1 Q% q1 [& V
- {& C$ ?! @" b: c; i# P B) K# p2 q
- if (flist[i].isDirectory())
3 K9 A" k9 ^$ e6 e% p3 a - {' | p4 z, [+ W0 S* Y' X6 u
- size = size + getFileSize(flist[i]);) j4 E2 J8 Q% U: J, R8 K% |
- } else7 b8 C( B/ E% I, n/ x! v
- {
/ T4 l! b! b' z' E- s v( E: ^$ S, I2 l - size = size + flist[i].length();& x. Z# {8 I. ]2 z+ ?
- }( N) m2 M" L$ C
- }. |" _* a6 C# v. u8 Q! q/ \3 v
- return size;. \. ~2 [' _( e8 J% N
- }# Y5 P4 _: S* v# T8 }9 m4 a
- public static String FormetFileSize(long fileS) {//转换文件大小& X0 [. C0 ~- I& `# ?* \
- DecimalFormat df = new DecimalFormat("#.00");
R( A' w# |7 x8 v) f+ s' X4 x& l* y - String fileSizeString = "";+ _8 l3 _! z8 b& {' D! w
- if (fileS < 1024) {! n7 J) U: a' }1 q4 B' `$ @/ Q
- fileSizeString = df.format((double) fileS) + "B";, ?1 x5 ^& M/ D) t* f7 A
- } else if (fileS < 1048576) {
4 n/ v+ _; E6 O$ _9 ` - fileSizeString = df.format((double) fileS / 1024) + "KB";' P& S( |) c4 Q1 B
- } else if (fileS < 1073741824) {( O2 z4 y C6 w! n' }
- fileSizeString = df.format((double) fileS / 1048576) + "M";
* k3 O p5 d: A* [0 b - } else {$ v$ K& m$ s, v0 S4 b& u1 ]: m& y
- fileSizeString = df.format((double) fileS / 1073741824) + "G";
3 w/ U$ m4 y. v0 X) M- B - }
" j0 q( L4 e/ T! R - return fileSizeString;$ v' {5 `" |$ [3 Y$ l4 V8 r- d
- }) k1 ~: C! R+ i
- 4 ^; w e6 g6 P6 ]9 _* ~
- public static long getlist(File f){//递归求取目录文件个数
" l* ]+ R. S; D9 a9 U) X% \ - long size = 0;
! ~- j* R r3 V9 x - File flist[] = f.listFiles();
5 V' O4 h; {, k) a; D5 q6 c9 w" I - size=flist.length;6 m" X. x0 ?# S4 [4 Z5 H' l0 e
- for (int i = 0; i < flist.length; i++) {. G$ B% ` Y( @1 N4 c& D
- if (flist[i].isDirectory()) {
$ M" T; w9 n' X3 a2 v( p8 f - size = size + getlist(flist[i]);; V! R6 r' w4 k
- size--;
" o; {# j3 M9 B- O; f9 f O% \ - }
* z& l' f( v) s1 j5 h4 Z( } - }) D4 r$ B3 o# D6 ?) T. N: [/ E
- return size;$ v+ H+ F5 ^# Y$ z" n8 ~
- 4 B9 H$ u& c6 M& p! F- h/ p. m
- }
5 U1 q$ Q* F% ?; W, @2 Y2 h - }
复制代码
) `) l, G" h6 _; g h3 CJavaWeb实现显示本地文件目录项目源码解压码:
# H; Z' P. V7 R. M% C! ~3 @+ ]
5 l4 p/ i% ]6 G& X X5 ? ! T& z1 ]3 b" @ g% u: w1 ~" \
|
|