|
该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
J8 w7 Z0 r+ E
: D2 i1 I. C% \ o, ~
$ z8 J' Q% B* ?) _' g
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
2 y0 d& y; D' u# x* S" q/ f9 H+ Z - " T+ s" v" u# G5 ~5 H! h) y" D1 i0 l
- import java.io.File;
& G. V) ?$ H0 A - import java.io.FileInputStream;1 Z6 ~3 ^4 @' P& X! U% u% Z
- import java.text.DecimalFormat;
% ?% H5 O2 j* ~0 G. r - import java.util.ArrayList;) Z9 w5 i* l b9 X& r9 l: {
- import java.util.LinkedList;
m; V5 C) ?# A) J z" m/ B - import java.util.List;
5 |( T) ^# |: E' j( `, d
^6 f6 ?* I! X6 ^8 R* V: v& T6 ~* ?& i- import com.uudisk.domain.DirBean;( B) X3 C' V3 r- K( n+ P0 Q' A9 D; u
- import com.uudisk.domain.FileBean;
1 N0 N, Y$ P9 A' h# y7 s* q3 w - import com.uudisk.domain.RootBean;
/ m! b/ m' j0 I* n - / c# W* \5 L/ T, Z5 \
- public class IterateDir {7 F, \9 _' Y% M c
- /*
/ @( [, ^$ n! l - * 获取根目录信息
. \/ R2 T/ _0 `+ G2 m - */
" v, K( m2 V* ] W9 }$ ]" Y - public static List<RootBean> getDiskInfo(){% p4 I* w" g; y$ f, s6 @( p( o4 ?3 z
- //获取盘符
6 E2 P7 D7 N+ q9 w/ u+ ^ - File []files=File.listRoots();
; G; C5 B# Y6 c4 d: c( y - List<RootBean>roots=new ArrayList<RootBean>();
- |3 k5 S$ ^1 C# ]0 Y7 y - for(File file:files){
# J( ^+ Q5 x9 N0 c - if(file.getTotalSpace()!=0){
: M Q( o; |& G" m - RootBean rootBean=new RootBean();; W# E, S0 M0 _9 M) |" X
- rootBean.setDiskPath(file.getAbsolutePath());8 C2 q8 k0 h0 N
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");/ t3 d- R# j9 T
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
' b1 M5 e) t5 [, ~( u( y - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));' }, A9 ~8 t$ i
- roots.add(rootBean);
! z- i n4 g2 j; x, f- m3 N2 U' W7 z - }
. [$ Q% X3 B. T - }: r) ^* l9 D! W1 P
- return roots;" g- ^! z% Z* b( ]9 m3 F: U( f
- }
) G( h) @& q" I% @. i/ h& j - /*( w2 e: S& B( u h* j; ]
- * 通过递归得到某一路径下所有的目录及其文件; y: u1 `$ X C' U
- */- d' j' y% \8 m. X4 \' E/ G
- public static DirBean getFiles(String dirPath) throws Exception{
9 f1 ?/ Y" |. ^1 b- | - File root = new File(dirPath);
8 M2 M5 Q: V1 [# U5 S" [ - DirBean dirBean=null;( G6 p. O8 L' x# d/ V
- if(root.exists()){$ U* V1 A0 C& O, ?1 F# N
- dirBean=new DirBean();$ }' Y4 v2 m* W5 R
- String dirSize="";
: @" w; H# R2 h - int dirCount=0;
3 A% w0 D( `$ W0 |- Z P - List<FileBean> filelist=new LinkedList<FileBean>();* ^7 Z, `: Z3 v1 m( w/ i
- if(root.isDirectory()){, _& e8 h4 n& Z, l6 L3 h9 P# ]
- File[] files = root.listFiles(); G9 H& j* h3 E9 I$ {, }: f( P. k
- for (File file : files) {) r) W7 V/ ~# S. `- a. |6 n) p
- FileBean fileBean=new FileBean();
4 y# G9 _$ x3 e" D/ L - String realPath=file.getAbsolutePath();
& R: v6 L( H& K. s3 @+ H6 I; M# F - fileBean.setFilePath(realPath);
3 S- q8 M% L5 \' ], M - fileBean.setFileName(getFileName(realPath));. p* j; c7 a% b
- if (file.isDirectory()) {
' b( [; x7 p+ }, O4 [/ r4 R( N b - fileBean.setFileType("DIR");, a* P3 o) S* ~2 Q5 z9 U* C
- //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
% W: ]' W2 W2 n' X8 } - fileBean.setFileSize("");9 Q! f5 [% }- ]3 d! S; e
- }else{
4 N9 f; b d s& X) |; v - fileBean.setFileType(getFileType(getFileName(realPath)));0 T' I1 c: B: M- r5 R! q3 [! Q
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
2 E" d) q* W3 Z% M9 I - }/ x) R' K( m$ D) e
- filelist.add(fileBean);' T, p ^2 a9 W
- }
0 d/ {# m- F, P( n7 p- l* J5 { - }else{" a: Y8 I" T4 A: _6 A3 S
- dirSize=FormetFileSize(getFileSizes(root));
- j3 W5 O8 Y( ~6 R - }
% c0 s: E* K' F- w: F4 @' w - dirBean.setDirCount(dirCount);6 A0 f+ s2 m( z/ b) i8 n- P# N
- dirBean.setDirSize(dirSize);* T# n& U' I$ w' r
- dirBean.setDirPath(dirPath);
. [7 d* Y; Y( u! { - dirBean.setFiles(filelist);: w5 `9 `: ^+ |/ [$ ^
- }else{, g) ?. ~/ l) }" }3 B* {3 ?
- System.out.println("文件或文件目录不存在");
9 ]/ W- ~8 ]1 \' Y' V9 w# u - } ; Q/ U+ N6 p6 e4 ?; r* |5 v. c
- return dirBean;( h/ d: H2 X6 A9 E
- }: ]+ r5 |" M. ?8 J+ q( z5 }1 g
- private static String getFileType(String fileName) {
/ [6 J" G6 w1 D: ?, W) \8 w - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();6 r" N2 L4 B4 [$ r) T! B. G
- }
. N0 w1 C( h: x6 |2 V$ V - //获取文件名
8 }+ s' G7 K7 d - static String getFileName(String filePath) {* E0 L* b ~( h; Q5 T
- String [] fileItems=filePath.split("\\\");3 S# J4 ?, M) {1 Y1 [+ k( S
- return fileItems[fileItems.length-1];
4 G b+ l7 B: y - }1 @# h, E2 `0 D/ p, v# P! o# r
- //取得文件大小& B2 d9 v9 T' Z: V& j( ^* h
- public static long getFileSizes(File f) throws Exception{: t3 @9 Y& U8 ]5 Q% m4 H
- long s=0;* S6 F6 u( o! v7 `2 W( N7 y7 g Q+ W
- if (f.exists()) {
) f2 T$ t$ ?* Y, c- v - FileInputStream fis = null;
1 p( e3 P+ Q' e3 {4 l - fis = new FileInputStream(f);
: s% W+ p+ U1 b1 p5 S) e9 y - s= fis.available();
% t# B% P6 S! b, Y - } else {
! Q0 X0 ~8 a/ F9 \0 _ - System.out.println("文件不存在");; y! K+ x5 A6 u E) Y8 T
- }
& s' n. {# |2 ]# k( ~" ?, S - return s;
+ s+ W0 l1 w( E! @ |, Y - }8 I& G. u; B: w; e$ G
- //取得文件夹大小% a) l1 m$ I5 ]6 Y* J7 p
- public static long getFileSize(File f)throws Exception8 I. P- t! G$ J* ?$ B) h/ M3 {/ ^
- {
* c* ~8 y+ x. ]5 R- e - long size = 0;
" a& I7 ~& o' \; ` - File flist[] = f.listFiles(); r4 a7 J/ D( u$ h% m% \5 E
- for (int i = 0; i < flist.length; i++)/ }) O7 C! N, X2 B, i" k
- {
" A0 V- p$ [8 _! j - if (flist[i].isDirectory())
5 y# t! w. l, B! {" w) h - {, j/ V7 R. [4 t6 Y% D
- size = size + getFileSize(flist[i]);
) }( p+ U6 X4 ^9 \$ r4 Y - } else
, H* o* i& n/ l; z - {7 k1 d7 j' X w5 [$ a7 D
- size = size + flist[i].length();* |" b8 A+ H0 s( w6 B) P/ W! u
- }
) L$ @, g3 ~9 `) G8 i6 {( m - }
9 z) R1 c _+ v0 A% y0 A' X - return size;! W: Q' j6 W0 M6 E+ Q4 Z
- }2 k5 t8 M L" s6 w
- public static String FormetFileSize(long fileS) {//转换文件大小
* l, a& {: a- Z - DecimalFormat df = new DecimalFormat("#.00");, K2 v: S, O7 ]
- String fileSizeString = "";
+ s& B: ?% U3 R& q% _: Y" K/ r - if (fileS < 1024) {- J6 ?6 ?" B! G( v/ w& Z, ^ b
- fileSizeString = df.format((double) fileS) + "B";
$ @9 Q! D! O3 q0 d& O3 ~$ z - } else if (fileS < 1048576) {9 P7 n6 F: B' J5 I) B) @
- fileSizeString = df.format((double) fileS / 1024) + "KB";% C' t" v; z3 [- a0 w' t2 f
- } else if (fileS < 1073741824) {: j1 E$ Y) [0 w3 T/ N
- fileSizeString = df.format((double) fileS / 1048576) + "M";
$ y! Q9 X1 i Z2 x, v - } else {
# u# S, A* O) o" S+ i - fileSizeString = df.format((double) fileS / 1073741824) + "G";) h8 k/ D2 E E4 l" d6 J4 S0 n b
- }
) r' l. _5 I! H0 ^3 ?! F - return fileSizeString;2 r) @; u1 q2 X
- }: L$ u' K$ e1 s/ j9 Q
-
5 ?* g9 @3 d: I8 n2 [" f L - public static long getlist(File f){//递归求取目录文件个数
% H( ^) [7 W; l, n# g - long size = 0;3 Z- B! r( L( b6 K3 h, k
- File flist[] = f.listFiles();+ I+ S1 J. @7 a) d
- size=flist.length;& _# x }2 Q7 N
- for (int i = 0; i < flist.length; i++) {5 F7 Z# M6 Z3 {: l5 {, g7 F3 O- q
- if (flist[i].isDirectory()) {
7 v0 ~ G: R# a4 U) |. }- T - size = size + getlist(flist[i]);3 Z) V$ m3 z$ k2 y
- size--;
_$ j% ~' q+ U, z$ A5 O- B - }
8 l+ s+ J! I4 c# O - }! E6 E5 l+ ?: J: ^" U
- return size;
' d: \1 r) t4 s- m0 a4 O% E2 p; |
5 F" V( W9 \" W/ I: [ a( K4 b9 i( u- }& y" P! t: J3 g2 F( @
- }
复制代码
) l# q. E' d, `; f, iJavaWeb实现显示本地文件目录项目源码解压码:
8 G2 X* q8 O% {% }! x0 ]3 k5 g/ X. q2 ^$ e
& C! L- H5 h6 I' l" B. H- C1 k
|
|