该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 2 u! A/ q$ I2 l; {. P/ P( y! j
+ `3 ~0 l$ W5 C' H
7 P0 g0 K2 m T ~- b1 K 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
2 J3 c' {! M1 D! V
! B$ |$ U- u- n+ G1 n- import java.io.File;
7 q1 ?% o! B8 X: Q3 V7 I - import java.io.FileInputStream;
# A# t6 t5 {" p- H - import java.text.DecimalFormat;
9 B8 @; K$ w- q& e5 f! Z - import java.util.ArrayList;
& x* x! R( w1 ^ k# s - import java.util.LinkedList;
! ?8 Q9 _' c& q$ \" h - import java.util.List;
. {$ U) Y6 h5 p8 X3 U' [8 @* m5 ~0 o
* s% C5 n, ^5 m- import com.uudisk.domain.DirBean; m( e, h: K, V c' U2 T
- import com.uudisk.domain.FileBean;
& z. s& S+ V! i3 |+ n4 ]7 @ - import com.uudisk.domain.RootBean;
: l2 I/ |: C5 s9 N W
& G, H* f( |$ [8 \7 U+ p1 \/ A- public class IterateDir {
* D. Q v3 O$ P: x. b - /*
! Q& V. S2 g) I3 Q5 ^1 O. I - * 获取根目录信息
+ `% Q! t+ d# o6 O, D; A - *// T9 X) N1 B% B, m$ T' c, I
- public static List<RootBean> getDiskInfo(){2 r4 t/ c. S3 l- z& w3 S
- //获取盘符
9 i) g) Y& [3 e) V% ^ - File []files=File.listRoots();
# d" f$ T ] E. Z$ S - List<RootBean>roots=new ArrayList<RootBean>();" n& Y* p9 W1 d3 K
- for(File file:files){
: c- z: j: T! _: x# S - if(file.getTotalSpace()!=0){1 L0 ^9 m1 i' h: j6 G
- RootBean rootBean=new RootBean();/ P. b- d7 _3 @3 u7 \
- rootBean.setDiskPath(file.getAbsolutePath());
( f% V: _) `: [% i - rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");! Y* I! M U9 Q1 y1 z; G* b1 N
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));( F! e1 h; Z, i6 ^7 [! _. U
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
/ s# h9 {: k" x( k+ @ - roots.add(rootBean);
& q) P @4 _. J) [( b/ i2 p - }6 @; g* ?4 D* I+ w9 Q }$ L) @
- }
# N* W5 z" Q8 _6 Q5 I5 z. a! F+ x - return roots;' z2 m+ Y6 @- @* n" w/ Z
- }
& g* f/ M; L7 Z- S0 f. `0 O( | - /*
+ @+ `: V( D" m5 O - * 通过递归得到某一路径下所有的目录及其文件
7 j! |1 p2 _6 G5 \/ \8 j4 A - */
# V) N3 e) V+ e3 o6 w - public static DirBean getFiles(String dirPath) throws Exception{# U6 m( p" n+ M& H0 {
- File root = new File(dirPath);8 P$ }9 c" `& m
- DirBean dirBean=null;
0 k4 F! m( q% Z - if(root.exists()){9 b4 w% ?+ B" j% p
- dirBean=new DirBean();
+ O( x& _7 ]0 @5 D: m - String dirSize="";7 `6 W/ D' l7 [1 [
- int dirCount=0;- |3 m' F0 P' O. P6 }
- List<FileBean> filelist=new LinkedList<FileBean>();
# S) q- s2 } [/ ` m - if(root.isDirectory()){" t+ @9 v& a8 t* m) `: r c# U4 _
- File[] files = root.listFiles();
- r0 D- ]; S" t$ A* l - for (File file : files) {& p t3 z) s1 X1 i; M
- FileBean fileBean=new FileBean();( |- l( N* B( R! n' t4 d
- String realPath=file.getAbsolutePath();4 M5 i: N0 I( @1 _
- fileBean.setFilePath(realPath);
3 b/ Z9 ` h# @. c4 H1 k, ` - fileBean.setFileName(getFileName(realPath));
$ U8 G, S3 j' F: w - if (file.isDirectory()) {( J# d6 U( k2 D% x4 D$ I! R
- fileBean.setFileType("DIR");
" u" \0 x) T) c6 @3 _ - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
4 G- h/ r! C/ g1 V - fileBean.setFileSize("");
& n ?& |( X" z, O% V2 Q1 _ - }else{
I3 j3 s$ C$ r r - fileBean.setFileType(getFileType(getFileName(realPath)));
, x' N2 s0 W% K9 S0 U, I - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
! A4 R) c: E; J - }. u' [- _, o2 z) W# z
- filelist.add(fileBean);
3 y8 }6 B8 ] t1 I; v2 E4 I1 T N - }- x: e) _: ~( ?4 D2 b9 h
- }else{) x- ?" t* S4 v3 t1 B3 }( W3 k
- dirSize=FormetFileSize(getFileSizes(root));
$ Q z2 H0 ~. ]- T' n \' w - }
: |, V3 u( ^( Q0 { - dirBean.setDirCount(dirCount);5 i1 t! t. u* X& g( j4 U5 }" B9 l( _! O
- dirBean.setDirSize(dirSize);& k" C& t4 g0 t, N
- dirBean.setDirPath(dirPath);, ]# k7 `! K% \2 S' U
- dirBean.setFiles(filelist);
/ i& K8 d" r H3 K6 u - }else{/ N4 d1 _% t8 e6 V
- System.out.println("文件或文件目录不存在");, w9 ~8 G% ^3 _2 V# P0 P
- } ( X6 v8 o+ ]/ m5 b: m: p
- return dirBean;
0 {* j2 {, N% T - }& |- T4 X7 V/ z8 f
- private static String getFileType(String fileName) {
% e: E" r& \4 U* l7 P- R- m+ D! L - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
' H( d8 t& `6 c9 P) w. @ - }
0 t* \4 t5 t& ?4 _) ` - //获取文件名
7 ? r1 `/ @1 B& x: [) | - static String getFileName(String filePath) {2 G; v+ i( l* p* \
- String [] fileItems=filePath.split("\\\");
- {5 N/ y- {% L" w; k7 u - return fileItems[fileItems.length-1];
, V. T% R$ [2 }2 Q! { - }
* ]0 W% \8 N. F! c. B E - //取得文件大小( N2 ?' ^( C' J) L; r; {
- public static long getFileSizes(File f) throws Exception{
0 a l |; b" z; X [& y6 M3 r - long s=0;
$ l3 F- i8 Z" G% r( u - if (f.exists()) { O1 F/ Z: d! V5 `" b, ~6 B
- FileInputStream fis = null;9 o+ Q. `& g$ s! h; ~! c6 B% L5 T+ b
- fis = new FileInputStream(f);
: J0 {6 z% T9 }5 f. [ o - s= fis.available();3 d/ T+ T' O- Z" _5 F1 q# }: X
- } else {
% L) k8 c0 B' a- P* E) t - System.out.println("文件不存在");
) f+ E* a& ~ M9 e7 Y3 b - }
( Y$ H5 R2 w4 {$ K5 s- S7 {, _8 x - return s;5 J' g# n) b( O- u
- }
8 p6 I9 a2 ?3 }% }, } - //取得文件夹大小
' L! J( w; D: n. ^/ A4 N5 e" { - public static long getFileSize(File f)throws Exception& m% K# v* `) q
- { {( @1 g0 U Z7 _) L5 X( r+ x# `3 W
- long size = 0;
& V, c' ?2 l3 f0 [6 \9 I* w - File flist[] = f.listFiles();
: ? x: }0 v, A; G4 J( ~ - for (int i = 0; i < flist.length; i++)
% R0 @/ y z% B8 Z4 W. v9 c - {
( a* R0 s4 d0 a- b( o) P - if (flist[i].isDirectory())" S( R7 [- ^* i* U# Y9 y
- {
" D# L V8 J9 H$ X. |( K0 r3 `) c - size = size + getFileSize(flist[i]);4 P: w; Q0 U. l# G
- } else7 g% B2 O2 Y. p1 p7 ?" C
- {
3 |/ C3 `& q; W7 b - size = size + flist[i].length();% E- U' L$ [5 x+ ~- [
- }
" H7 G/ V& G+ D - }5 I+ H7 f9 p, b' _( }
- return size;
# V% Z0 u8 b/ g- S - }
, O+ J5 I6 V: L - public static String FormetFileSize(long fileS) {//转换文件大小9 ]* j/ I' [* B, f* e! W
- DecimalFormat df = new DecimalFormat("#.00");
4 S4 R3 G9 M4 ] - String fileSizeString = "";
( z$ k i/ A1 l - if (fileS < 1024) {, B7 A$ A% y$ k4 a0 i/ D
- fileSizeString = df.format((double) fileS) + "B";
5 q7 B2 F! ?# j, C - } else if (fileS < 1048576) {
( O5 ]/ |3 p/ }4 P f0 n - fileSizeString = df.format((double) fileS / 1024) + "KB";% w7 v' C( }* A9 a
- } else if (fileS < 1073741824) {
5 G+ C( ?/ t6 t6 g) b* S3 s - fileSizeString = df.format((double) fileS / 1048576) + "M";
& T3 `+ R. U6 d0 k! | - } else {5 @) ?& b& x v, i3 R- s9 b% B
- fileSizeString = df.format((double) fileS / 1073741824) + "G";
$ b& ^& ~) I* H# t8 a4 h+ b - }1 ~1 S. H' H$ Y1 O8 t
- return fileSizeString;. S- o' X) K, k* d$ x
- }6 o5 k$ K6 J/ M+ s8 I, X
-
5 q$ e6 I6 ~6 I! v% w* _( D - public static long getlist(File f){//递归求取目录文件个数
& r9 [4 h& w0 ]* J2 L) ~ - long size = 0;0 `, y% U' ]$ a; e" ]5 j5 ~
- File flist[] = f.listFiles();+ J3 k* Y2 a* I( o
- size=flist.length;
: s3 m, i. n) C0 V1 g3 z+ r - for (int i = 0; i < flist.length; i++) {
; Z! \5 ~6 @4 x4 o W9 z9 }3 p) C: ] - if (flist[i].isDirectory()) {# d3 G! b5 F; S, \- u! d6 R
- size = size + getlist(flist[i]);
5 R! P( Z- A, e8 @! N: Y% H" O - size--;
% s4 w9 I# h* X! m2 L - }9 | t% I) A3 v2 V. Z2 I
- }: \5 U# x3 V! L+ D
- return size;& F+ q& i( c3 C( Z5 j
. Q' d: Q# ~6 o- e6 k: f0 n1 M. q0 X- }7 _3 c' w1 F5 q+ S) C# E! \; x: a0 p$ J
- }
复制代码 3 S: l ~3 x% o V7 h
JavaWeb实现显示本地文件目录项目源码解压码:
5 W* p" e# ~7 j: \& ]3 u0 J* X4 ~+ L, n) \9 W
, Y7 X) l2 P( @" q1 e8 E0 n
|
|