该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 5 U7 d0 j$ b8 G( b( y7 d+ u
# ~4 v8 I8 H) x6 H1 A
/ M1 R! S Y. Q, F 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
# _+ Y7 w3 Z% T$ P+ ~# W
6 j# J+ h5 b% `% n: L& @0 b- import java.io.File;3 C# g4 J8 F, V$ u J# [5 r/ {
- import java.io.FileInputStream;* g: C: I" E0 H6 l8 f7 n" i" y0 w* V
- import java.text.DecimalFormat;) W" G8 i3 W/ A3 o1 F2 [& V2 Y
- import java.util.ArrayList;
: q) A: _# F# @2 E: Y& m - import java.util.LinkedList;
: `3 [( E0 D: l# F3 j( K - import java.util.List;
: H8 I8 p$ a7 V# C- P
. y$ Y; H0 H5 s+ B9 J' a- import com.uudisk.domain.DirBean;
7 t5 |8 k0 q) l - import com.uudisk.domain.FileBean;
D9 o) M' \9 b2 l. h. D5 a - import com.uudisk.domain.RootBean;* z0 p# |2 Y# w/ ~* F; {
! \: L X3 o6 s1 t- public class IterateDir {
3 x3 b8 F: I1 a) P: V - /*
! j1 ~1 P! A0 Y4 Z6 E4 V! X - * 获取根目录信息" j5 x$ \+ m# p! n/ _, ]
- */
( e" p+ d9 o: u3 `0 J$ p - public static List<RootBean> getDiskInfo(){
* ? n a9 `6 C8 Q) X* m9 U! c | - //获取盘符+ ?& h) i) j& y% A' y
- File []files=File.listRoots();
9 ~; M1 u; t8 a, W2 e, q" H - List<RootBean>roots=new ArrayList<RootBean>();
; z6 s; D; y$ c' k1 ? f - for(File file:files){
+ o8 [% k/ V Y N6 b - if(file.getTotalSpace()!=0){1 Y6 E4 g! X" t4 j& O% b; L h
- RootBean rootBean=new RootBean();- C8 R* n C- r0 L5 B9 p/ c
- rootBean.setDiskPath(file.getAbsolutePath());5 h1 b! L' }% n2 |4 s
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");' c) u; }/ I4 G
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));9 u+ p- }+ w4 F: F+ W
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
& X1 P% q3 Z& k+ F" C/ j; y& ` - roots.add(rootBean);
+ u% R) z0 q- W+ p* g - }
. m( o; J: g* z7 r2 n2 ~6 A - }9 s0 p& e# B& r( E( A& g( F- g. N8 M
- return roots;
! x; v! n0 d h - }5 @7 H3 m, n! ]5 O. v
- /*
, T$ m) P d! w# q% `, i( T - * 通过递归得到某一路径下所有的目录及其文件
) C1 O4 y1 q8 T( A7 [2 d \ - */, h! v9 f+ l) E" _: h9 ]3 }$ G+ |
- public static DirBean getFiles(String dirPath) throws Exception{4 W+ d1 g0 Y6 ^- L
- File root = new File(dirPath);2 F2 X7 a2 n. ?) x4 \: O
- DirBean dirBean=null;9 h0 [* i! p, |" {# L
- if(root.exists()){
; M& f. s" Z, q, C0 I9 B - dirBean=new DirBean();
# B* T& X/ j. d0 C) h" ^9 L$ o - String dirSize="";
& ~8 A0 [3 e. m! r" Y: ~ - int dirCount=0;1 c3 Y# o6 C4 }* y2 `( l2 c) k, k% H3 a
- List<FileBean> filelist=new LinkedList<FileBean>();
* B6 Z7 Z/ ~( x( {; Q - if(root.isDirectory()){
7 H6 B( b; F' ?6 r - File[] files = root.listFiles();
1 @% @6 Z( x* {% l" @+ F! W - for (File file : files) {
) U5 @. d- i3 \/ r+ `6 J - FileBean fileBean=new FileBean();
+ \, M m6 D+ ]" |* [ - String realPath=file.getAbsolutePath();
$ b4 Q4 o; p$ P# r$ n1 ?4 @ - fileBean.setFilePath(realPath);
9 l! M) m4 g6 G - fileBean.setFileName(getFileName(realPath));
1 R* K, _/ R, k# h& P; C+ s - if (file.isDirectory()) {0 V3 U+ X& B8 P+ V: f4 J
- fileBean.setFileType("DIR");$ d" l/ t. z) H! q5 _' @4 Y
- //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
( y1 ?3 F7 M, p) g+ c, P& d2 _ - fileBean.setFileSize("");! }( Y" {9 ]3 F5 H
- }else{* y# G1 ^ R: a# U9 E5 V% {/ @( \
- fileBean.setFileType(getFileType(getFileName(realPath)));
# {; v [4 d. X4 L, Z8 x8 H4 j - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
$ M [1 U' k, T# v" F W7 q - }
8 j. L$ l/ l) W - filelist.add(fileBean);9 z8 }, j: n" S
- }
% j( I6 g% i, e% E* w# \ - }else{
1 T# f$ |; ]) H& C- D; T; L - dirSize=FormetFileSize(getFileSizes(root));/ G" }% V+ b, z6 w" o
- }
0 U( y& c2 @" p1 A2 x. Z - dirBean.setDirCount(dirCount);
# F: ]7 v' K; H- c' g4 k - dirBean.setDirSize(dirSize);& V( `6 a/ |) ?% U8 N* {$ [
- dirBean.setDirPath(dirPath);
% I2 s- `, Y# B9 p$ `( X8 J - dirBean.setFiles(filelist);! i x% c! U R' U, d, u
- }else{, X' f+ L# ~( Z
- System.out.println("文件或文件目录不存在");
# {4 ^+ g* a8 N- _5 J - }
" G! b( m2 p- _# ^; h+ b - return dirBean;
4 w4 U( D* K1 H/ Z1 k# o - }: q* z2 N. f; O; Q+ m
- private static String getFileType(String fileName) {
! R! J3 l- h0 `6 J - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
, e5 |/ K+ e/ Z. p - }3 W( l6 ]4 k; ^- c3 \& J
- //获取文件名" u8 J! p6 l6 \! [* |8 V
- static String getFileName(String filePath) {1 }; a# T3 q+ a. ?3 S
- String [] fileItems=filePath.split("\\\");
/ ^- B! ^/ B! _+ ^1 K- K - return fileItems[fileItems.length-1];
2 F& s7 v" _% P3 n0 \# X* f7 O2 W - }
. t0 b% F2 n) v0 g+ A - //取得文件大小
; a: y' K/ ?6 o5 y* [& s - public static long getFileSizes(File f) throws Exception{* V$ h3 }" D4 B" A k
- long s=0; m% y S" i7 _0 G
- if (f.exists()) {
% M& I: @- R0 x: Z: [ - FileInputStream fis = null;
/ x6 [5 R! o P5 q) h5 b - fis = new FileInputStream(f);
; Y* X+ D9 {* b7 F - s= fis.available();/ a. T+ F" ~/ \0 Y1 }
- } else {( e U- Z9 S) j5 a! u
- System.out.println("文件不存在");7 b, |% T" M& d9 y
- }- M P/ ?) W _3 \
- return s;
! e+ w, s0 y: N - }
6 t# i' t* R& v, U0 k - //取得文件夹大小
6 c& b% A) ? X% _, T - public static long getFileSize(File f)throws Exception
7 c$ o9 O7 V: V - {
; {8 `5 s v9 C9 @; o$ f" S - long size = 0;
1 W5 n+ p; {- e - File flist[] = f.listFiles();
9 e: N0 o% B' o2 F - for (int i = 0; i < flist.length; i++)1 `$ B" j/ U! W3 M8 v
- {& i; w/ K3 F% {7 O
- if (flist[i].isDirectory())
3 G& @* I! p" Q9 p4 A5 n- H' C* O5 g - {0 R3 Q) ~5 Z2 [& J% ]
- size = size + getFileSize(flist[i]);; Z! U3 L5 F+ K- R- N9 h* m1 C8 {
- } else
9 p6 [4 R) N- C - {
7 ~$ ]* K. d: z# ^0 Y - size = size + flist[i].length();
) C+ f* g% }' U9 Z+ z) z - }
2 Y5 K5 g0 u+ l4 H+ f) D( Q8 [5 t - }
$ H% x1 F* N9 ?! z/ B$ W4 r5 y) ` - return size;
( L, }9 z% k& O9 Y - } `4 e0 ?2 K1 c
- public static String FormetFileSize(long fileS) {//转换文件大小+ {7 F& _$ y/ f
- DecimalFormat df = new DecimalFormat("#.00");
7 T2 `) T$ o9 B, t9 ` - String fileSizeString = "";* v4 e4 v# K( K# u! V# E- Y/ Z
- if (fileS < 1024) {
# M8 t8 g! h# _0 h3 k7 R - fileSizeString = df.format((double) fileS) + "B";
' w, @3 J5 x4 J9 q, W - } else if (fileS < 1048576) {% m2 ^, [# F* z6 ^+ `5 i, H
- fileSizeString = df.format((double) fileS / 1024) + "KB";2 I4 J2 [+ B/ l+ U( O h
- } else if (fileS < 1073741824) {$ ` n, r8 ^( ^
- fileSizeString = df.format((double) fileS / 1048576) + "M";) s# n, z% Q% K/ _- {- c- ~( F# `9 G
- } else {
* d0 B# L* g( y z - fileSizeString = df.format((double) fileS / 1073741824) + "G";
( `( C! D2 n0 Q9 m, t* \ - }
+ m" N+ I* v, I, {8 D, [ - return fileSizeString;% b7 _. S1 D& G/ F- N
- }- ^" R" U! [3 b1 m4 o5 F+ P( |1 o
- |8 T+ J `; _2 A& r
- public static long getlist(File f){//递归求取目录文件个数+ E# `3 H0 f. s2 L$ ^, _
- long size = 0;5 w9 k0 d' }6 v8 p% Q6 `
- File flist[] = f.listFiles();
# i8 |( l" e7 w0 x8 C/ W( I! l! G% c5 o - size=flist.length;. d& x' }& e- b* d# T8 |! D7 u
- for (int i = 0; i < flist.length; i++) {
4 U# F2 b5 a1 m) ` - if (flist[i].isDirectory()) {! v2 y- _& Y' ~; }1 a; H9 l
- size = size + getlist(flist[i]);; B) B2 G- [: g
- size--;
m1 T& D2 W5 o( R# V _ - }
, ]9 A, l5 P; K# Z4 c% I - }$ Q `+ ~% c+ Y. W
- return size;+ y' Y X2 b7 ^# |- N$ r
- # I; s0 D1 q2 Z* x# r/ k: ?
- }. b* r$ h8 B9 z$ d5 s" X, V
- }
复制代码
2 N$ o# T5 o* S, i! R$ U* ^) N7 S6 Q: HJavaWeb实现显示本地文件目录项目源码解压码:
5 [. m2 }3 n' \4 j- Y* F0 {# W" |+ z6 O0 l
: ]; v% L0 b" A% H! O' l
|
|