该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 2 Z" I2 Q N5 h
) ^1 Z( k% |! b: B' m) s, e0 @3 z4 N
. z% `' }2 R. l8 t) j# x, k
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
9 |) k" h. a0 W( h( \. F - 5 @0 s" V, E; i! n( ^
- import java.io.File;
8 U2 N9 q2 P/ C7 K* j+ L - import java.io.FileInputStream;% s. g. Q3 L( k4 r' c5 f; p7 J
- import java.text.DecimalFormat;, `4 K N' H {0 j! r' F
- import java.util.ArrayList;
7 q7 ]0 w N# B/ |0 z- L - import java.util.LinkedList;
7 v J+ z( P# f- r& m$ { - import java.util.List;1 f# q, y* |/ M: k( y7 |! e
7 O1 a5 [( R5 \- import com.uudisk.domain.DirBean;
: X2 b6 B- u; @, x n - import com.uudisk.domain.FileBean;
5 t7 z, \$ K6 [2 A0 C - import com.uudisk.domain.RootBean;& ?: y7 h) @: ]3 }2 }1 Q
: m4 R8 @/ C& h% w# ]- public class IterateDir {% O7 I4 y& x) g$ x$ u: b. G& m
- /*
" P: \! S+ L. \ - * 获取根目录信息8 i9 x8 k, Q; L0 G
- */ Y+ Z/ N) |. p, Z
- public static List<RootBean> getDiskInfo(){9 Y4 C2 ]) f9 [+ j
- //获取盘符
5 n. `5 R7 G2 D! P- D% Y - File []files=File.listRoots();+ ]* y( J9 T4 a6 L2 A4 C- L9 C
- List<RootBean>roots=new ArrayList<RootBean>();$ U0 n3 L/ E4 I# }' ]( ]
- for(File file:files){
; T. A: k& O1 L& d) o - if(file.getTotalSpace()!=0){0 e3 u1 u! v# f& G
- RootBean rootBean=new RootBean();
! p! o; T# T3 q& g T - rootBean.setDiskPath(file.getAbsolutePath());1 s) n4 [1 q, X+ H1 z" L
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");4 F0 K' ~' M7 X1 t) E( J
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace())); Y9 j3 u X7 y5 ]; v9 U6 \
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
: |3 S5 ^6 ^6 K7 O$ U. Q/ s+ t - roots.add(rootBean);
4 p# ~9 U# b5 m2 b7 X) ^ - }2 `& b- ?. ~, _* Q; D
- }
. E8 [: i) Z* L# a$ ]5 D - return roots;
! y; i. ~5 \( B; n9 O' ^% D - }
6 ~- O8 `* t- N - /*
3 n8 w4 V! ?2 c0 D0 Z% f( Q - * 通过递归得到某一路径下所有的目录及其文件
% `* @9 G+ p7 Y: W* {) j: [# U - */9 z( a/ I4 y) Y9 f6 M* @2 V; X
- public static DirBean getFiles(String dirPath) throws Exception{
, P; Y o4 @! K/ a0 G- ^ - File root = new File(dirPath);; I: Q9 J: h, c3 l/ K
- DirBean dirBean=null;
0 V4 b: _' \2 {" {6 R U- p- T - if(root.exists()){
8 g- ~% r0 ?, H3 T/ j" L" B; e2 D - dirBean=new DirBean();
. B7 k5 B9 N( ?' @0 Q9 @ _ - String dirSize="";
5 a; C2 [$ W$ C9 s" k - int dirCount=0;
6 ^2 C; L* K$ S0 c8 [# v) G* F; C5 l - List<FileBean> filelist=new LinkedList<FileBean>();: I+ h$ c& I2 @2 H+ ]
- if(root.isDirectory()){
@& p0 o. y( e% s - File[] files = root.listFiles();
4 l$ \7 Q% u9 e0 N W - for (File file : files) {
8 U4 \, E! S" d+ P8 f8 z - FileBean fileBean=new FileBean();
$ }% @+ G/ l4 \8 ~- F# p3 W - String realPath=file.getAbsolutePath();
2 d+ X+ E' g8 b8 [- a8 f$ E, d - fileBean.setFilePath(realPath);
0 Z) j) T. G" O- E - fileBean.setFileName(getFileName(realPath));* {4 M( p& r9 h6 O, S
- if (file.isDirectory()) {% C& `* \9 c9 q) b. u& x6 O
- fileBean.setFileType("DIR");
* ?* J. b5 R ~3 W6 B4 B( n& h8 O - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));4 {' u5 h; b9 n6 @
- fileBean.setFileSize("");
8 `. z" c" @ T2 u z - }else{$ J. `1 {4 D) I" z
- fileBean.setFileType(getFileType(getFileName(realPath)));
2 `/ ]; `8 D" `* @8 S2 R - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
" m1 Z/ h# Z8 L @9 M1 P N& z+ [ - }5 c* Y. m. E* R
- filelist.add(fileBean);- P, d: I4 B. A1 Q
- }
) p# N6 O! z6 U$ \' H# H - }else{
2 V$ X0 v8 t( v d% o- ~ L - dirSize=FormetFileSize(getFileSizes(root));
1 K- R0 v, K9 C3 Q) S - }
1 d& e: a5 a$ |4 H7 N, Y' H3 P - dirBean.setDirCount(dirCount);
0 [/ @/ h. X5 { - dirBean.setDirSize(dirSize);" p+ w/ J( v8 X" G% k) ?8 p$ e% p
- dirBean.setDirPath(dirPath);
X& r+ ?/ K( h' b. v. X0 V! M4 M - dirBean.setFiles(filelist);
C: x( a' e" W - }else{
( M! j. X2 z0 {- d - System.out.println("文件或文件目录不存在");/ W- j! x& l; F4 V8 E
- } 8 }& Y. }* M- i. }; ^2 M
- return dirBean;4 J" L0 {1 I( v6 h+ [
- }
c# X9 E' [8 d4 E - private static String getFileType(String fileName) {
6 I Q$ ^8 q; c5 A0 Q: H! o0 _! d. e - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();/ D# |% B" m: J# T
- }3 M# K% o$ r5 J# Q
- //获取文件名
) u, H% H8 @7 b - static String getFileName(String filePath) {
; g% N7 ^) a" w - String [] fileItems=filePath.split("\\\");, s+ I p, T, G! t
- return fileItems[fileItems.length-1];% U3 ~. N2 I5 [& o+ X) S
- }
7 x+ f5 u. a7 k* S4 ^0 T6 g6 R - //取得文件大小0 f) x! P2 k; \1 ^$ p
- public static long getFileSizes(File f) throws Exception{( J4 Y' x7 J" ]9 t* F' i* x( n+ W& N
- long s=0;7 b& J& W+ f: ~! q
- if (f.exists()) {
; Q7 o7 n$ R" h - FileInputStream fis = null;! a ]+ d5 @6 I8 O5 S
- fis = new FileInputStream(f);
! ]: ]. N) h, {( B' V4 ? ] - s= fis.available();8 o! }& [" W2 q1 u
- } else {
" `, |' G. Z- l8 h$ Y5 q8 e - System.out.println("文件不存在");
5 q; }. M. v' D/ n9 m - }
4 j" @3 I' }# T: Q. V7 ~1 T& e - return s;
9 h; k0 L. H- o$ ]3 ~ - }
7 d Y! M6 u( f - //取得文件夹大小! V( ?2 ^5 k' B# `) e7 o
- public static long getFileSize(File f)throws Exception1 b l6 Y: t) `
- {
; G0 \2 Q+ r8 @( q - long size = 0;/ M9 w, |# N: Q7 ^1 b- K# w6 P0 D; t
- File flist[] = f.listFiles();
5 M# U' w5 O7 C7 g4 j - for (int i = 0; i < flist.length; i++)
& R7 p }/ t' q! V. {8 `9 I. i - {
4 T; S" B& o6 f7 n( w - if (flist[i].isDirectory())& ]+ \7 E ~% w4 n
- {
/ v' I7 a v t7 b1 I8 { - size = size + getFileSize(flist[i]);
" t# P, {7 }7 g0 s- z - } else: {+ ]) e: J! Z% u
- {
4 G( ?) \0 N2 s; l$ b# f4 g" b' S - size = size + flist[i].length();, U2 D) o) I# G+ l" j7 N; @
- }" Z, r- I# [8 W* n& Q6 ?4 L
- }: E/ o' _, s# x6 Y+ E( J
- return size;- T3 ~1 j- z$ ]1 T' C- j
- }$ k3 x+ j) Y, x s
- public static String FormetFileSize(long fileS) {//转换文件大小* U7 U- ~% ^) m6 L; l
- DecimalFormat df = new DecimalFormat("#.00");
$ v1 X2 t: p" N: B; H. C - String fileSizeString = "";
" K }, V6 y, }# D! Z - if (fileS < 1024) {# X8 x0 Z' |4 y5 Z* @
- fileSizeString = df.format((double) fileS) + "B";
]% k4 q2 D$ H. \) G - } else if (fileS < 1048576) {
& L& M6 ]9 @7 Q5 a4 y: u - fileSizeString = df.format((double) fileS / 1024) + "KB";
4 y e% m, \& V - } else if (fileS < 1073741824) {
% }3 \7 G; @* u W4 I( h5 Q6 m/ U - fileSizeString = df.format((double) fileS / 1048576) + "M";9 X: Z3 a3 D) m7 u( z
- } else {
+ C, n" x) P. S8 J( ?9 u - fileSizeString = df.format((double) fileS / 1073741824) + "G";
# ]5 g9 D. o7 Z- e D - }
- X3 |' {) Y% s% E7 M$ {' P - return fileSizeString;
8 B& E* }7 v$ F0 e+ {: Y - }
K" |, L7 X8 U9 ?5 d- r9 d9 G -
" `9 C5 n2 }# a5 [+ W F8 Q4 | - public static long getlist(File f){//递归求取目录文件个数
* f" ~8 h' J$ E. H( J- G1 c N) U8 ~ - long size = 0;0 e/ G5 \; }0 m2 S8 S
- File flist[] = f.listFiles();+ z5 n% n; [4 k" t. A
- size=flist.length;
s( H" t: O: B8 a7 w7 d - for (int i = 0; i < flist.length; i++) {
5 ]$ ?. ?; o+ n9 ~ - if (flist[i].isDirectory()) {
% F, Y* b. i8 i6 N& y4 z, C5 o - size = size + getlist(flist[i]);
1 f+ u7 N3 m' n - size--;" N5 p5 p+ l$ l! M
- }
! O+ @! q" L7 b8 o9 T# M5 o5 Y - }) j& D2 W+ K2 h2 R
- return size;
* U# @! O" O: l$ q - $ j' ^* P! U6 d8 C2 f4 U
- }
/ k/ m" V) |1 [) R4 z+ } - }
复制代码
* k3 Z* v8 r0 R$ BJavaWeb实现显示本地文件目录项目源码解压码: / x8 D5 Z, n' c
. ?; ?% _ K/ W W
, f. F- T; u* F& i# h |
|