该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
; |3 F3 g. v p$ j% B
6 v9 K6 N9 D+ H9 ~ Z 4 K- o. i" r$ i6 t
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;2 S; [3 ^1 X1 d1 {& _
! }3 ~% p1 |& Y1 D h" a- import java.io.File;
# N2 \4 a0 h# I9 g. R0 p1 r- T - import java.io.FileInputStream;
2 a# {" E* e; p( ]1 G - import java.text.DecimalFormat;
- q% u- n' S+ A! [" x! O - import java.util.ArrayList;
S8 p' b* V6 r6 D# ] - import java.util.LinkedList;- W# i, p, R) `2 E
- import java.util.List;
* c; d$ b8 k, b& p2 @
& g7 Y9 s. P$ ?9 X3 u- import com.uudisk.domain.DirBean;
% R5 {* ^" F' s" p8 q; H' h - import com.uudisk.domain.FileBean;
# i0 a0 I: u* E" x w - import com.uudisk.domain.RootBean;" N9 e) W1 [( M2 x! K' n
6 N6 ^; ]6 F2 X0 g/ _) D- public class IterateDir {5 }4 Y' }% D9 Z' o( D8 I
- /* N! w' h2 j$ }' F& V. g- \; n' H" H
- * 获取根目录信息% o5 C0 o4 U% S- ]4 K" ~# G
- */2 ^/ y6 w. o$ ^6 L: C/ m: O4 x( J& G; O
- public static List<RootBean> getDiskInfo(){+ m2 u. b; {$ K! C
- //获取盘符
/ _" O+ M/ h4 r' X; k - File []files=File.listRoots();" h4 m% p0 O/ g: c* `% D8 P
- List<RootBean>roots=new ArrayList<RootBean>();
' u, T% |8 I3 L2 z% K. ? - for(File file:files){ m2 ]" P- D1 n" K" k
- if(file.getTotalSpace()!=0){
4 g# H- ~& w- Z G - RootBean rootBean=new RootBean();2 F7 p, c4 R, ?. ?! a% m S1 Y
- rootBean.setDiskPath(file.getAbsolutePath());5 x! V* F3 y0 J
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");) O( J, W' ]$ g# N! e+ K
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
0 X2 D }* t- x% H- Z& @* W( | - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
' D# w; E% P) O5 t3 Y - roots.add(rootBean);
, _6 o0 a" M4 ] \: P* U: ] - }3 b5 B. B7 F$ Q9 O& z
- }
) b9 l7 X/ ]0 ^: }$ A - return roots;9 y& {/ E% D3 U9 ]8 W; `! o; |1 w
- }
: q d1 ?9 U% Y1 G9 l! t4 w; b6 O - /*% |1 {, g2 w5 R W
- * 通过递归得到某一路径下所有的目录及其文件( {' U* O! P$ x0 N$ @
- */
/ Z$ i! y# G5 c/ c$ a - public static DirBean getFiles(String dirPath) throws Exception{
# D# d) s* U- H$ S' d s0 P - File root = new File(dirPath);% W0 u5 x1 G& W' d; ~
- DirBean dirBean=null;. U& s$ P" ]' E a; z# |
- if(root.exists()){
5 v5 L" x& d6 X - dirBean=new DirBean();$ T- E9 K- Z! Z7 l+ R
- String dirSize="";
3 }% X8 b1 B. w: p+ m - int dirCount=0;7 ^; R1 {) U; O3 c: u
- List<FileBean> filelist=new LinkedList<FileBean>();) n) T$ k) J+ z1 T& C. ?; F) r) q
- if(root.isDirectory()){# j* J$ E- c* l0 |% e5 K
- File[] files = root.listFiles();- T1 e% Y8 Y6 S2 a# G
- for (File file : files) {3 O2 i( F' C" J. R4 d5 ~
- FileBean fileBean=new FileBean();0 U7 T' j( `/ i) t n) E1 Q4 F
- String realPath=file.getAbsolutePath();+ O* G7 d( K) x
- fileBean.setFilePath(realPath);
* K+ z: }6 A9 k& y - fileBean.setFileName(getFileName(realPath));
) E# E& N$ O: { S" K2 s - if (file.isDirectory()) {
) ]( @* a: z- I6 {* l) F% d. ` - fileBean.setFileType("DIR");+ t3 @" r- B: }# }+ v
- //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
! `0 U9 P" F, M; Q# T - fileBean.setFileSize("");) s4 w, E( e" l2 ~2 V+ h4 i
- }else{
& C* h% f, y1 Y3 e) o - fileBean.setFileType(getFileType(getFileName(realPath)));' P/ v) C1 x1 k" [. O W
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));9 O/ ` i9 X% e" M: N5 V
- }+ B$ l+ s* P) s5 F
- filelist.add(fileBean);1 E9 |6 Z5 ~7 S5 y, w) B
- }0 b* `/ s: F' n: L3 X; p" ?
- }else{
* T E- K& O, E4 k) H+ P. ? - dirSize=FormetFileSize(getFileSizes(root));
3 @8 Q: g/ i- T, s3 R6 l - }" u% }( ~4 i5 @' e( Y5 D4 ^/ m% F
- dirBean.setDirCount(dirCount);- Y5 S4 i; M& D4 Q' z" X
- dirBean.setDirSize(dirSize);. F0 o+ M" |$ H9 H% y4 q M
- dirBean.setDirPath(dirPath);+ S# A! w) f" l
- dirBean.setFiles(filelist);- l. L* T' n/ g
- }else{$ A. a3 O" u: i- C
- System.out.println("文件或文件目录不存在");" ]9 x8 g( L) y, _8 b3 o, _
- } , T( a& i# A+ I
- return dirBean;6 R0 r7 @! p$ x" _- o- B( |" D" p
- }2 Z0 Y: U+ e, d6 D& G; S4 }
- private static String getFileType(String fileName) {$ ~7 [9 N* H% t- _
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();( d5 Q8 _( \# ^, I/ W4 R
- }- I. n' Y: u9 Q Q4 x
- //获取文件名
0 g4 ?' H) S& l/ ~1 J - static String getFileName(String filePath) {
; j _) y' D1 h, k U2 j - String [] fileItems=filePath.split("\\\");- }: ? Y, ~0 n# m, i5 N) P
- return fileItems[fileItems.length-1];7 E) \7 l# S& D- }/ |( F
- }
; e3 ^- K3 \) r8 m$ Z) y( s6 c - //取得文件大小; e* G, x0 J2 ?: |, o
- public static long getFileSizes(File f) throws Exception{
9 E' E+ i/ F( _0 y - long s=0;
' l9 c' B+ x4 d9 w - if (f.exists()) {2 D8 h9 K- c8 ~) f! |5 | r S
- FileInputStream fis = null;
1 P" |1 Q5 ?( {1 m9 j - fis = new FileInputStream(f);
$ I' s5 K5 n. N' r% U# T - s= fis.available();
4 \, z1 @6 h4 D/ ` - } else {
: E! l- ?) A- A% y - System.out.println("文件不存在");
' N# d* K: F+ v$ f8 O% q - }/ T9 p3 b% A1 z! z
- return s;2 n0 G) a" ]+ O- c- _5 H, K
- }
% t8 N9 p$ a3 E! _, j8 f6 p9 C! ] - //取得文件夹大小
9 `! X: a* ?8 c# B- ] - public static long getFileSize(File f)throws Exception
( E: Q5 b- t2 V1 ^1 f; b' d+ @; ` - {
! B! `+ t5 w( d* {4 L - long size = 0;
2 H4 C4 p: f( G2 }. V - File flist[] = f.listFiles();4 a" a M2 z; }8 P
- for (int i = 0; i < flist.length; i++)
( N5 R, I& s4 f- n' X - {
# [. ]) \% E2 k" F0 w) B( A2 v - if (flist[i].isDirectory())
: O/ K7 Y6 h1 r* R3 L7 X - {& F7 j( d+ O c# |# |6 @
- size = size + getFileSize(flist[i]);
# H) `( B+ H K5 v- P7 s- @, I' J - } else0 L/ t+ _: m: N/ G+ B+ J! f
- {# u& Q" N" D! l$ W
- size = size + flist[i].length();
0 D" |8 K# V8 p; E - }
) t0 m! y- B! l - }. l1 r6 u T! }9 U
- return size;$ I! n* N \! I
- }
* o, _' r: W$ T* R - public static String FormetFileSize(long fileS) {//转换文件大小 n$ K9 ~) c8 Q/ n7 m: s0 h
- DecimalFormat df = new DecimalFormat("#.00");' k! H: k2 ]# z8 y! i2 O* @5 X
- String fileSizeString = "";' V. p! [2 h2 p8 U* _
- if (fileS < 1024) {
+ X" t0 Y9 ^* Y# F; l1 k - fileSizeString = df.format((double) fileS) + "B";
. `( {' p6 G3 O4 _* C+ H* v - } else if (fileS < 1048576) {
8 i( `( B- v' A$ a5 p - fileSizeString = df.format((double) fileS / 1024) + "KB";7 U: A9 i+ n! J8 x& @0 T
- } else if (fileS < 1073741824) {; |- D2 c# X2 v" A+ G0 L( ~
- fileSizeString = df.format((double) fileS / 1048576) + "M";( e& B* x& f( X
- } else {& B9 X& v9 V m
- fileSizeString = df.format((double) fileS / 1073741824) + "G";0 ^4 }' Y9 ^' L& W* n: B9 |/ G9 ?
- }
2 Y; v" ~# c% A4 M1 j a9 {) T - return fileSizeString;& O0 b. f( _+ ^
- }
+ b# g" t# G8 p& o4 J - 3 p3 X0 k8 Z5 D- R: q
- public static long getlist(File f){//递归求取目录文件个数
' m- h6 Y7 c- }( x - long size = 0;
2 m3 ]# F$ o9 o7 z) U3 j - File flist[] = f.listFiles();+ s% m W8 I& j, G# @
- size=flist.length;
4 P/ z0 @; u1 R/ R5 z+ P - for (int i = 0; i < flist.length; i++) {4 Y% m4 w. v. F
- if (flist[i].isDirectory()) {
# [2 R0 t, n r, ]( f; Z) M - size = size + getlist(flist[i]);
, {" I, Y3 o& C: _# ? - size--;
: G1 t9 d0 x9 F8 ^, ]2 O8 @% t: O& P* d - }
+ e) i& i4 s) ^& C/ b - }: v" a# w; [# I: {* ^0 h: M
- return size;/ t9 o. x* Q7 p, z8 Y
- $ C3 p) p8 U; U3 d* G. b
- }( }, Y8 W4 A K# }* l5 o
- }
复制代码
9 @! p6 c/ n+ w$ ~) d0 G& R2 T6 ZJavaWeb实现显示本地文件目录项目源码解压码: 8 f; V+ _) d' q, Y) h, q G
7 r- U, `' R" a* ~, J8 e6 j, O
& o- s8 v7 F( p R' I
|
|