|
该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 ! S/ J8 E6 Q3 p0 U
1 w2 x: V" n8 L. v; H+ ^/ ]/ V# L
0 ~, z4 O, H: E* S/ }0 K
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;7 \9 [. r1 _2 W1 X6 u
+ ~+ [: f0 ]4 @3 H% Q9 |- import java.io.File;/ ?9 U0 M( {$ v% Q% d1 U8 p
- import java.io.FileInputStream;
& s/ V5 C' t) l* @4 _; V7 x: z - import java.text.DecimalFormat;
+ Q, p" g1 i- |) Y/ d1 h9 N - import java.util.ArrayList;3 i8 ^2 e8 b `4 Z# j
- import java.util.LinkedList;) [0 t8 w) N% o5 s
- import java.util.List; ~: _' e9 d: c K: {! P/ s3 [+ T
- * D/ [- k4 S! T* t( G% M- P
- import com.uudisk.domain.DirBean;" x1 ^5 o3 ?" \$ Q5 g( n* ~! W, t
- import com.uudisk.domain.FileBean;# K$ C' `6 A! @* [, q, ^
- import com.uudisk.domain.RootBean;
8 c0 I. F4 P- n - * n2 A: j/ H* ^) c1 J
- public class IterateDir {
- i7 v$ ]8 I9 I2 O% d N( h: y0 |- K - /*9 |, y6 H' W( E% | ]! E* @
- * 获取根目录信息0 m' \$ z! Q2 t
- */
. {, g% u7 U* z- Z - public static List<RootBean> getDiskInfo(){
a+ `! s! ~6 U6 W' ]1 H - //获取盘符
' r+ P1 ^, F- M) d- p+ e# E6 ^ - File []files=File.listRoots();
a- i0 {! i P - List<RootBean>roots=new ArrayList<RootBean>();
# y. s# _% t( h8 |( _0 E - for(File file:files){( P) Y5 a x8 {( W/ \/ d
- if(file.getTotalSpace()!=0){ G4 m4 S$ O! c' c
- RootBean rootBean=new RootBean();) m* U7 P: d3 M0 T' T
- rootBean.setDiskPath(file.getAbsolutePath());7 M: M+ A; h1 ]/ S! B7 I& J
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");/ A' b1 s5 ~7 x0 C5 l* M- g1 y9 f
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));& x: Z! W3 g- U- e$ e6 e2 l
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
) V5 i$ y; X" L - roots.add(rootBean);
! j2 a& ]" q( b# ?! X; t - }
4 j, n- W+ r0 ]* V' [* K6 V - }
. v, C- E0 q: ^$ i9 m5 q2 e - return roots;0 z; T9 m2 E T) q
- }9 n# ] s/ N+ R/ L6 V$ Z& X# f
- /*
) H, f+ H3 i) J/ I8 K4 ~1 | - * 通过递归得到某一路径下所有的目录及其文件
2 Y9 J" n( ^: a/ J7 A8 w8 x* | - */$ a: f% F9 u/ W
- public static DirBean getFiles(String dirPath) throws Exception{
3 X& H) y# T$ i W$ O - File root = new File(dirPath);8 M9 _; \' m; T' i5 v: V
- DirBean dirBean=null;
% \! W$ ?3 ^0 ^$ L1 L0 \" D - if(root.exists()){( j/ h3 y: E: k! @0 c1 j
- dirBean=new DirBean();; f+ [- T( c: g
- String dirSize="";
' [" L7 h! o# O - int dirCount=0;
3 X+ C, M+ u1 L) z3 ?- M - List<FileBean> filelist=new LinkedList<FileBean>();: z# Z) m7 s- N* E) P
- if(root.isDirectory()){ f9 C7 t. H6 e0 u: `; ~; H
- File[] files = root.listFiles();
, ^% |7 h% @6 m# c4 r - for (File file : files) {
2 ^% s# c5 n6 y8 S" W, S/ {$ } - FileBean fileBean=new FileBean();3 }; c2 w' c+ |; s2 ?4 q+ ~
- String realPath=file.getAbsolutePath();
6 D* A) V& s- s. o9 ? - fileBean.setFilePath(realPath);5 F0 i3 t% P& j% d# `
- fileBean.setFileName(getFileName(realPath));
$ A5 `1 W6 {7 @9 ~9 J7 \4 v7 W - if (file.isDirectory()) {
9 k' z, S' B% n, P, u - fileBean.setFileType("DIR");* C7 ` G% b7 U T
- //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
* p4 `/ k* m+ A" x0 | - fileBean.setFileSize("");) {& U$ S$ N* R* \, u9 U
- }else{; V" o$ j0 {. U( j
- fileBean.setFileType(getFileType(getFileName(realPath)));% J$ A% }! E- ~: n0 U
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
2 x- A3 z; C% R& | - }
f4 n* V( W1 u& h2 p- k - filelist.add(fileBean);
( z) @8 ?6 r" z5 L- v' u2 A3 U - }
5 v+ X' j8 }" ~ - }else{
7 D5 E, ^, F- ~8 Y# H8 i - dirSize=FormetFileSize(getFileSizes(root));; E$ M+ X* u; y0 P! l& }8 \
- }9 V! y5 {- s0 C3 H2 a
- dirBean.setDirCount(dirCount);
" ?3 p) k% t/ w0 z - dirBean.setDirSize(dirSize);
9 X: y1 q5 F& C0 M: b+ {# @: J) u - dirBean.setDirPath(dirPath);. z6 z9 ]# t: R3 O& i4 U. U# b) V5 n
- dirBean.setFiles(filelist);$ P% K1 L4 ^7 Q+ Q4 |
- }else{: z* \3 y! H9 A& k$ C
- System.out.println("文件或文件目录不存在");
3 R+ `% h7 B3 L - }
$ V" X# ^. b$ \ - return dirBean;
! C4 o1 q2 W1 e- k: o$ M2 b* l - }$ m' q) `. U( t, ^/ W( g
- private static String getFileType(String fileName) {
( S3 K7 `3 Q* F v: B# E2 l" K - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
: r& x! n( m8 H/ b2 P - }& x, [' M* P8 ] ?* C8 q5 ~
- //获取文件名
: {* a3 O: m# l) D" N - static String getFileName(String filePath) {2 g) N& v3 l- f
- String [] fileItems=filePath.split("\\\");
; e- [+ Q" B& }9 U7 j) n - return fileItems[fileItems.length-1]; t1 g. m1 o' m% A+ c7 y6 e) f2 I
- }
: |/ ~* ~& B3 w - //取得文件大小6 K, b' f, F$ `
- public static long getFileSizes(File f) throws Exception{+ W- u) p. ~- ]1 @( Y. n) D6 a: w
- long s=0;; m$ C+ o+ }8 M0 H7 R0 y
- if (f.exists()) {; N9 K/ O0 | a- ?2 U
- FileInputStream fis = null;
! y; ^# o2 h* p$ g+ d( [ - fis = new FileInputStream(f);, ^7 z7 f' W" d% c. e2 m' a
- s= fis.available();/ B# g A7 J8 j2 w( Z
- } else {
' Q7 j3 l J6 w9 ?7 q4 ^ - System.out.println("文件不存在");
1 t- |$ J {+ z - }
, i6 ~7 K; f% U! y y9 a+ A4 W. y { - return s;: |, J3 ?# S, t4 k# K; B) q$ Q
- }) n2 S7 Z- L! J
- //取得文件夹大小
1 g* J3 q# l0 w4 ~ - public static long getFileSize(File f)throws Exception
# w$ P# l- R( q; i3 f4 D% C - {5 {1 C( m& X5 T
- long size = 0;, x8 a) G5 z* t6 X5 P* M
- File flist[] = f.listFiles();
' O; C+ F1 ^ {+ u- Q1 f5 a - for (int i = 0; i < flist.length; i++)' o* c0 w- f! b$ L
- {, y2 `! N9 D9 {5 i. G/ ~( U% t6 J
- if (flist[i].isDirectory())6 h" q. ]; t6 s5 l7 ]4 }) P; Z5 D
- {
6 ^) u! V# i/ [; z9 M t5 g- z6 s6 M! m - size = size + getFileSize(flist[i]);
" M9 l/ J- u4 a5 W - } else6 z N* |! U. m, o2 g
- {
2 j' b# y3 T: h; n6 W - size = size + flist[i].length();
) b: t* X2 j2 ?7 L - }4 z1 t ?3 C' u6 w: Q4 f
- }3 o7 x: a) n3 j4 e$ m# b4 A. \
- return size;8 H2 p+ \( F' Z- P4 {2 X2 I
- }
- y6 y2 K, V, L5 {7 v - public static String FormetFileSize(long fileS) {//转换文件大小
( w" g5 {; a8 }1 {: _+ N/ ]. n- ~8 C - DecimalFormat df = new DecimalFormat("#.00");
R$ k5 p" x6 p - String fileSizeString = "";
O- B0 j* y0 n! N# g - if (fileS < 1024) {" H& Q: l1 k) ~8 D. }% _1 J' c- Y
- fileSizeString = df.format((double) fileS) + "B";
; T! s0 N- j( n( R3 Q0 l - } else if (fileS < 1048576) {
; G. |0 k- s' z O! E0 L+ x4 G - fileSizeString = df.format((double) fileS / 1024) + "KB";
8 e- D- B5 x% a: V- w+ n: F - } else if (fileS < 1073741824) {- h9 o; l, A0 B3 [0 o
- fileSizeString = df.format((double) fileS / 1048576) + "M";
8 J7 ?: g( P! Q) n- ]1 S - } else {
/ i% `. a4 k, ?7 |: o# X - fileSizeString = df.format((double) fileS / 1073741824) + "G";
. h" Q% v* } K6 E1 Y# S; d% v - }+ k% O1 |5 k" M! b0 @
- return fileSizeString;6 L" Q }+ }$ B/ g/ E' P
- }
! q K% d7 P0 G9 a( n; ]0 z, w0 S$ g -
# X" O) @, ^; _0 s' ?. H - public static long getlist(File f){//递归求取目录文件个数3 {6 [, X( ]( f
- long size = 0;: _* v9 }, D& X% m$ A
- File flist[] = f.listFiles();7 P$ {: ?4 \. f- @9 v
- size=flist.length;
* Z. C, C# T' O8 l - for (int i = 0; i < flist.length; i++) {8 N1 n5 x* O" J0 S8 `
- if (flist[i].isDirectory()) {7 n5 q6 x0 ~2 V0 g# J$ [
- size = size + getlist(flist[i]);& S" Z- p% o q5 F0 r- \
- size--; |9 ~/ G/ K& ?* B( E$ T' a6 q
- }
1 q: `$ j: v4 j' C+ { b - }
! m9 {; W8 c. a: a8 {/ D3 f0 W. j; \ - return size;
5 _0 E: Q! D0 z: |9 |8 M( F& l - ' d% T) \: ^9 o3 v/ |
- }
/ J: l0 m+ q' L) W - }
复制代码
! y3 c) u7 s0 ?+ `1 Y6 J% J4 y+ JJavaWeb实现显示本地文件目录项目源码解压码:
1 P2 s5 D! |2 o
0 ~$ B% X5 _/ J6 @" x ( r/ k+ ~% E0 m* _2 X
|
|