该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
6 `9 X. w( W# ?+ j* p
6 m0 c- Z8 a' M8 M- ~8 |: {0 G5 C
. W/ ~* ~+ s, r- U, P6 M4 A
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;2 }/ c9 W8 q# n( u; V
) ?' p( M& k7 w+ A6 I/ X3 @- import java.io.File; t/ B1 G$ r. v. O! o: C! l
- import java.io.FileInputStream;
( W* s5 w+ @5 A+ A6 _ - import java.text.DecimalFormat;8 u$ \8 C: Y6 d+ N! s9 D
- import java.util.ArrayList;" o# {% D3 L" Q% _+ \) l
- import java.util.LinkedList;' g$ t& P k5 l* y: t
- import java.util.List;
# ^1 j6 A) y5 q( |7 c
9 ~ D. a. G. z: s# |+ x- import com.uudisk.domain.DirBean;/ m v) S0 Q: O$ l
- import com.uudisk.domain.FileBean;
. T( B+ I' `0 h ~* p - import com.uudisk.domain.RootBean;
/ b) I+ N8 X4 i I6 a3 T
( d0 f7 s m8 X& S4 W- public class IterateDir {
" t: H h6 `! I2 Q7 ? - /*' A. I: ]& |$ E+ e% \7 N
- * 获取根目录信息9 \0 n* b" A( a* A5 u' U5 b* {
- */; R: T0 w+ m3 [+ G/ r* o
- public static List<RootBean> getDiskInfo(){* c) L) D5 X# H/ H
- //获取盘符4 s+ K. {9 j, ^6 R3 g, o
- File []files=File.listRoots();
( k j1 {2 }, y5 s4 o% Q - List<RootBean>roots=new ArrayList<RootBean>();
. F, |& G0 Y6 h( ~% s- p+ L& O - for(File file:files){
" p+ V1 `2 Y0 h k) e; V' K1 N x7 o# t - if(file.getTotalSpace()!=0){6 R3 _! ]; d# n) L4 B
- RootBean rootBean=new RootBean();* j# }2 Z" v! @* m" J
- rootBean.setDiskPath(file.getAbsolutePath());
# b/ r9 J: @6 Y9 ] - rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");/ a6 O7 E# }# C8 T
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
- Z" t5 ]1 l# r) T6 T. b+ h - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
; g$ u2 A6 |' ]7 O! b' v - roots.add(rootBean);+ x5 ^( w o- K# l2 ]) M
- }; }9 [5 i) O% X' T0 b+ i4 B
- }
0 b0 W$ [5 L/ _6 W ]* E I - return roots;
2 ]$ E6 a+ x2 C, P/ T7 ] - }
1 R; u) Z# D! J! ]( ?& R - /*
4 Q1 H; L$ n u1 |' k% d6 U - * 通过递归得到某一路径下所有的目录及其文件! F& `- Q" v, X( V' ~
- */
9 I% { f; d$ O' P; _' |( ^ - public static DirBean getFiles(String dirPath) throws Exception{
, Q7 H C7 ^1 ^ - File root = new File(dirPath);
( n$ @" v+ V% O \0 k8 `/ w8 c5 r - DirBean dirBean=null;: P9 |8 E4 {# I! B& s% _& A, k; V* X' L
- if(root.exists()){. [! m2 s' M6 Y4 t
- dirBean=new DirBean();4 M7 V9 O) ?" n: V' \
- String dirSize="";
' A: Z7 d# N' g- C; m9 \ - int dirCount=0;
3 H2 K! V7 c2 I2 }9 v% V - List<FileBean> filelist=new LinkedList<FileBean>();" B9 z, f7 k/ D
- if(root.isDirectory()){
9 H0 ]0 F8 s3 p" L3 Q - File[] files = root.listFiles();
% `1 q8 c, X, G. A - for (File file : files) {( `" P0 Z( o" t, e
- FileBean fileBean=new FileBean();4 C" n, w8 d. O7 G8 y
- String realPath=file.getAbsolutePath();8 C( z3 }' \0 U6 [7 }1 `1 |+ [
- fileBean.setFilePath(realPath);
/ Q# _9 v5 D& U# k - fileBean.setFileName(getFileName(realPath));
8 `4 E0 n2 a6 [# E) b: i& S2 Q - if (file.isDirectory()) {
% \" U# \# k7 l - fileBean.setFileType("DIR");* k7 \$ E* K% |( E2 e7 |7 ?0 Y
- //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
$ c" w* i0 O7 S1 b" n - fileBean.setFileSize("");/ o9 x% Z* n) }* w) K3 ?" }! E
- }else{4 i# N1 j; ?: ]) b0 M3 ]1 h7 ]- H
- fileBean.setFileType(getFileType(getFileName(realPath)));
# M' N$ W; t7 x. w! [0 L% Z' C' _ - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));! b v, W0 ^5 }5 U% k# O
- }/ o4 k+ y( f% M1 p/ K- R
- filelist.add(fileBean);
6 X# y8 {; _) Q4 I - }
1 l: q6 E) U2 z - }else{
9 j- h1 L& S3 V/ g; w' W+ U - dirSize=FormetFileSize(getFileSizes(root));. s/ }: G% [: E
- }
1 ^" x: [( X- V2 j - dirBean.setDirCount(dirCount);
0 ?9 W1 ]* c$ `( e- J S - dirBean.setDirSize(dirSize);
& g5 A: }$ z, B5 J9 u - dirBean.setDirPath(dirPath);, }/ j5 {5 h7 p- d. Z0 H. ]
- dirBean.setFiles(filelist);( n# H& ]# K+ G" b. V7 N0 h+ S. j7 u
- }else{
# K( j0 T# _; j2 B r& Y - System.out.println("文件或文件目录不存在");4 ]' n# M8 e* x3 [9 U
- } # ]3 ~1 M3 {& ^, e2 C5 F5 l s' H! l
- return dirBean;% `) v, F6 |5 E9 ^/ w5 G
- }" K7 d) ~, b3 t& m8 f4 T
- private static String getFileType(String fileName) {" _: |& A* i E5 g" f/ B+ W8 n
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
9 L$ l3 S% ?9 c6 V/ @8 c - }
. D6 d. U7 T- t/ X, a* m$ q3 z - //获取文件名0 W! O" ?+ y9 P, ` b; V @" c' b
- static String getFileName(String filePath) {3 c% ]% y, r" \0 P
- String [] fileItems=filePath.split("\\\");
( J3 V4 B+ I/ a+ `, ^8 D* L; F - return fileItems[fileItems.length-1];
! U1 [0 B; X2 s# K& y5 j - }
" T9 a8 f# d4 c4 Z& N - //取得文件大小7 c" q1 b. E0 _7 R* f# B
- public static long getFileSizes(File f) throws Exception{
3 [* U' g8 f% n; Q9 @& U - long s=0;3 t6 a6 P% }7 j, I! r1 F
- if (f.exists()) {
: E6 ^0 Y, z3 Z; }. w - FileInputStream fis = null;
* F7 o& c7 i! l3 A: F - fis = new FileInputStream(f);- l0 N' p5 S: ^. E' |1 Y
- s= fis.available();
/ u7 l0 _) H9 u - } else {
{- j1 T; S( x: k1 u2 n# r - System.out.println("文件不存在");* G7 Y8 D& D% W
- }
! c, I, `; |, \- N! R. q- s* F5 e/ ` - return s;1 w. Q% |) L9 o6 A4 w+ V+ W/ r, P/ A
- }
L9 M! r* W: B4 R$ \ - //取得文件夹大小
5 H v; P6 K+ h) a+ s7 M1 L - public static long getFileSize(File f)throws Exception
( w4 H& z# G3 ~/ E' O - {( P) f; y% F9 H1 Y
- long size = 0;0 L9 p9 \2 V: j B" K) t" u" k
- File flist[] = f.listFiles();
: `) u0 S& {: J- l6 D' |8 q! ~- N - for (int i = 0; i < flist.length; i++)
- l1 V' A& Z0 A! y - {# I# }# l: A/ p$ h9 \2 q
- if (flist[i].isDirectory())
% K( r3 @* [1 r9 l) j& x - {
5 h% q. } O# B" c4 o1 J - size = size + getFileSize(flist[i]);
0 O+ \4 s" P4 R2 @, I& }4 ~ - } else
/ O+ q4 S. B( @2 f# [ - {
9 ?8 n2 @, D2 c; g' z2 V - size = size + flist[i].length();- {: S. r, k/ z; F% A1 F5 F
- }- r3 a. D, c" ^2 Z8 _$ r* m0 o3 f
- }
3 m# G/ \; S8 G+ M" X - return size;- }5 V5 {2 \' K
- }
7 }+ V/ K: m. J& {' h' k - public static String FormetFileSize(long fileS) {//转换文件大小
! y5 M# X+ [6 G+ `9 p% f6 b& a; p& g - DecimalFormat df = new DecimalFormat("#.00");7 R3 k& c, y; p$ |! _* G$ \
- String fileSizeString = "";
) d4 D0 M s, B( _ - if (fileS < 1024) {
2 f, t# v- @) {( c - fileSizeString = df.format((double) fileS) + "B";
2 W3 B$ R. t/ X; x8 Y( k- \ - } else if (fileS < 1048576) {
+ E8 ]7 {8 R8 T) b) j; ] - fileSizeString = df.format((double) fileS / 1024) + "KB";
1 r8 V! V1 c" [' V2 {* c1 g# X+ J9 J - } else if (fileS < 1073741824) {
/ K0 I. s2 o4 c8 V6 p" v, K - fileSizeString = df.format((double) fileS / 1048576) + "M";
2 g9 { H( D1 }. N4 ]2 @; C - } else {
* D4 F' _% J. T" Y - fileSizeString = df.format((double) fileS / 1073741824) + "G";
8 B, b& F% X" }$ f - }
# K# \% {4 K! S' L4 ]. M - return fileSizeString;/ R& T6 Q; b* n) E
- }8 e( i7 Y+ I8 R; G* `) c8 K
- 8 c& D3 o1 r6 h5 j
- public static long getlist(File f){//递归求取目录文件个数
. p G" n1 X! y2 J - long size = 0;
8 Y- t+ N7 o9 N! l* z5 s: }' D - File flist[] = f.listFiles();) z2 E4 o+ {% ?, D6 ]0 x
- size=flist.length;0 p- @2 v: [+ Q% ~2 f, ]( X1 l2 v
- for (int i = 0; i < flist.length; i++) {
' P8 y4 [/ Y6 r2 P0 o - if (flist[i].isDirectory()) {
$ N- |# X- r4 M9 ]4 a4 v! C - size = size + getlist(flist[i]);1 [4 A2 E, a l; | Y8 g1 Y
- size--;
+ f- A r* b% L6 {6 G$ }9 O - }5 r) z( o ^( R. _) P. O% S
- }% r( @6 s& ^$ a4 o. `
- return size;+ z$ v# U- }; b4 H: P. \
- , i: ]0 W/ {8 D7 R
- }
, x( c: `0 {/ O7 [ - }
复制代码 ( g! P1 @/ y) h, i/ C
JavaWeb实现显示本地文件目录项目源码解压码:
2 o6 c2 m/ y) d) o2 G8 P) ~+ h4 R; T2 s6 {
, C$ s# ?' Y4 }/ j- X- z7 d |
|