该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
* H. ~8 _ H; M4 z p
4 V* E) H3 w5 |: }8 z" q) X
( N. \5 p( d% m0 r
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
+ y A: ]) X' p3 ~2 c. R4 |, \
) j) N6 \# q% M2 E/ Q+ I+ P- import java.io.File;1 t! S/ S, v- b% J, P' j% F
- import java.io.FileInputStream;
4 v- b1 N: h2 Z% ?) W - import java.text.DecimalFormat;6 e* i0 v6 y8 r( G0 _ X c
- import java.util.ArrayList;
7 O' U3 o5 S1 J( d' L ?1 u2 h- y - import java.util.LinkedList;
* ]" t: A( W ?( E9 ?* x) V2 a- u - import java.util.List;! j* O0 K& x" U, ]9 C
9 O+ F) D8 r! x- import com.uudisk.domain.DirBean;
; H+ G1 d% \- [" m D0 ^ - import com.uudisk.domain.FileBean;3 j, p- `( \5 c5 a
- import com.uudisk.domain.RootBean;3 I$ u, Q0 U- C& t6 m
- 0 r7 e/ u% b8 ]) m( J3 T# }: `& }
- public class IterateDir {: K9 t1 m, N( S
- /*1 q# V: e( j- H" c# N7 r( J
- * 获取根目录信息
# _9 A, `; h" A. n" B0 k+ F4 L/ J - */
) J5 r$ S$ G, J4 I - public static List<RootBean> getDiskInfo(){
3 M4 K1 l; e) x7 n/ j - //获取盘符
3 f" ^0 ^* O% c) k) Q' g - File []files=File.listRoots();
# [- C* R, z& W# } - List<RootBean>roots=new ArrayList<RootBean>();4 D& @) [( z8 M* L& N f: [
- for(File file:files){
3 a& X7 F2 z' y" K) L - if(file.getTotalSpace()!=0){1 }9 g% }3 W" i% E$ j) i
- RootBean rootBean=new RootBean();
) }1 M6 K0 i v8 B9 ^- m, w - rootBean.setDiskPath(file.getAbsolutePath());, B1 T+ e# J; W9 @7 M
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");3 r& I2 t* P+ y) o5 R
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
& q- S- w- t6 G, o0 Z9 k - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));! ]; Q! L, C9 M& Z; [# V5 ~
- roots.add(rootBean);
' O% j1 e. k8 t$ a5 n - }. U+ u F: \" u" t" s8 ?
- }
; b( o9 z" a# P) S4 l( c - return roots;$ w$ W1 ~/ R3 |; U5 U, `
- }
1 R% g# _! W j& l7 D- o - /*
+ A. p: e) R. r4 z - * 通过递归得到某一路径下所有的目录及其文件$ K( I$ P$ B& O" q7 R Z; G3 Q
- */
/ ^6 J% E" p% @2 X7 N/ \ - public static DirBean getFiles(String dirPath) throws Exception{; u& j2 [6 |7 L# q( ?. P
- File root = new File(dirPath);
7 N6 s, r9 s; G6 X3 { - DirBean dirBean=null;
, C! D+ F% T9 {( P - if(root.exists()){
/ o% i7 @8 | S3 Y - dirBean=new DirBean(); u: {5 |" X, E; l! v4 o2 [3 l; }7 H+ T
- String dirSize="";
- X# T. \" r# _! @; W2 b7 A - int dirCount=0;. G3 `( g8 w+ O
- List<FileBean> filelist=new LinkedList<FileBean>();
6 V K6 u8 K/ K$ F - if(root.isDirectory()){
) M, j. q+ F3 R7 X) \8 X$ ^7 V. O, K - File[] files = root.listFiles();
: F: e; k, ]* m8 |% S$ { - for (File file : files) {
- g9 d( @9 K/ Y" g$ h. F5 q - FileBean fileBean=new FileBean();( }. h3 d2 c0 _5 S
- String realPath=file.getAbsolutePath();
: K3 M# D0 H1 e/ A' V# `9 X - fileBean.setFilePath(realPath);
/ k( j3 G K4 x7 i$ g$ v8 J& _ - fileBean.setFileName(getFileName(realPath));- ]. @$ `, m4 _3 T; }# O9 [0 c
- if (file.isDirectory()) {+ b6 S. V; q3 V; ^/ |& J7 i% w
- fileBean.setFileType("DIR");
! M) B! X- r8 \1 j9 s( C3 v# z - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
: s. q9 U" g1 H! ^, A - fileBean.setFileSize("");4 w0 c- F, r/ c- Q% _" C: D8 y
- }else{
8 H/ T+ ~+ z8 Y* [/ `7 Y0 o - fileBean.setFileType(getFileType(getFileName(realPath)));. |1 z/ I1 e" P
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));9 @ `; r2 W* L* G$ E* V/ U
- }
2 A% ?& I' S0 r% K - filelist.add(fileBean);
1 O6 M8 n# F9 g - }
% c* S- Q6 H- Q1 \4 a. R' ` J - }else{
! C. R8 b2 o9 r8 U4 D! K - dirSize=FormetFileSize(getFileSizes(root));
3 S5 z, w8 C' P) _4 C' e7 w$ ^ - }
* b( `4 N- l* K - dirBean.setDirCount(dirCount);' Z& e$ r9 i, ]
- dirBean.setDirSize(dirSize);9 B% |! }' r# A8 `% P f3 p8 U |
- dirBean.setDirPath(dirPath);/ S. t& Q' l; a+ G* R5 U# X5 G
- dirBean.setFiles(filelist);
# _( g$ G5 f. W& g2 D- I8 Q0 ^ - }else{
2 h7 ?) I0 N1 l. V0 b) B- B1 X z - System.out.println("文件或文件目录不存在");3 t" T! d( i' u& B8 k/ k% G" y4 W
- }
7 J( p, m4 Z& }& a - return dirBean;
& T2 I/ x _! i, f5 q# o' ~ - }8 I# X, N; g$ @' O* Q% H) V
- private static String getFileType(String fileName) {
% i8 C1 H; R, [ - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();9 P- D. `5 a' K: A) x3 l) n
- }; n3 I M/ b _5 r1 s6 Y8 m3 F
- //获取文件名6 z% s- {1 F4 |0 I1 i4 o: P
- static String getFileName(String filePath) {( E% @3 @, K+ A6 y
- String [] fileItems=filePath.split("\\\");& B3 \, m! {4 \/ K6 O9 M* B
- return fileItems[fileItems.length-1];
% P2 S1 B/ b) ^& i n5 _ - }
2 l. }8 ? E8 M O3 v - //取得文件大小
( ]: Z. ^2 @8 h, D - public static long getFileSizes(File f) throws Exception{- a/ @3 X( ]( j: Y
- long s=0;
- d; T/ s M1 B% j' U; v - if (f.exists()) {
* D/ @; X! u+ O8 d$ z - FileInputStream fis = null;
1 ?6 {" C' \: @) { - fis = new FileInputStream(f);
* Y5 Z$ V& t' I9 R' I% h- d - s= fis.available();
2 X0 \& K' K" l; T" J1 `8 b - } else {
6 I0 U3 G" V& W* A. B* @/ C; H - System.out.println("文件不存在");0 s8 Z7 G- |- d8 x( f3 ]+ ]
- }- {% M0 j) q6 J; h ^
- return s;2 H6 w. J; `3 t' p; }2 ^
- }
% o- |; b8 Y; e4 e - //取得文件夹大小- x$ j7 L0 j6 K3 ~5 k# s( H
- public static long getFileSize(File f)throws Exception
7 z8 c5 y1 C: r - {, W+ d# d- X( C& i0 E
- long size = 0;
/ V7 a$ M0 L; F4 p, m; p2 d - File flist[] = f.listFiles();7 [. I% u1 H" N1 J5 m, c
- for (int i = 0; i < flist.length; i++)/ H, q# a' Q7 w& y9 P
- {% ^8 k. M F3 J' _2 C: Z
- if (flist[i].isDirectory())
& B$ }# B9 N1 q L) f6 {: e+ ] - {
' P6 g5 L" C. z* `& A - size = size + getFileSize(flist[i]);
" ~* J; E ?* ~4 F - } else
# N4 V' Q. {+ i. X$ K - {
" U( ?6 O( p0 p+ @1 S9 X' w" `; T - size = size + flist[i].length();4 x3 { C. Z, K! k5 K2 \
- }
5 s4 ]4 _8 }: \/ s+ D* @ - }
0 t+ C' l# Z F: W/ f [ - return size;- H0 |3 d. f% h; h
- }
+ P! ^- o; l& b2 U- @ - public static String FormetFileSize(long fileS) {//转换文件大小
* v& G& j" U% s; ^, D - DecimalFormat df = new DecimalFormat("#.00");
% t9 S2 R# H! p" _9 \. r9 m6 n - String fileSizeString = "";
@5 a. o/ r( g* t& ~ L - if (fileS < 1024) {* ?# |' a: n. N: ?
- fileSizeString = df.format((double) fileS) + "B";' ]6 ?5 T, a# r/ Y( n6 O0 n
- } else if (fileS < 1048576) {- R; D# i( L5 g, }! H" t
- fileSizeString = df.format((double) fileS / 1024) + "KB";
+ Y5 C, P; k" }* Y# ]) R( P - } else if (fileS < 1073741824) {
* ^) |# c/ r& U - fileSizeString = df.format((double) fileS / 1048576) + "M";
2 v3 R4 r0 ^8 F - } else {& P& u, H& c+ D Y
- fileSizeString = df.format((double) fileS / 1073741824) + "G";+ N- g# n9 u3 u
- }
7 i& F" K& ]: W+ e2 a- e4 s8 j9 E - return fileSizeString;8 ]" V+ o4 c- i6 \$ `; r) e5 X$ L
- }+ s% R9 {, Q) {; M7 q( }8 Q
-
4 r0 J5 j, z t! a& Q7 s. x - public static long getlist(File f){//递归求取目录文件个数3 a- m3 U# b) q( ]
- long size = 0;
8 Y& D9 w! k# c8 I. n. i - File flist[] = f.listFiles();
) @" g/ B. r5 B - size=flist.length;+ s) J* t Z. b4 W3 j" r& p# V" {
- for (int i = 0; i < flist.length; i++) {
' l' _& R# b$ W4 r: N - if (flist[i].isDirectory()) {! x& E0 M m& E! W6 J! l( r
- size = size + getlist(flist[i]);9 j/ m6 D3 y* F' E$ e
- size--;
' N% ^( j0 Z5 A N - }5 x1 G1 G% P# B* r1 `
- }
8 k$ S2 @. Z1 x6 v) W - return size;
" t( j/ N1 b7 `" m( r2 I7 x6 {
, Z+ K- e4 I m8 F- }
( c) z, |1 E4 m, D X$ [ - }
复制代码 ) k8 C, K) C/ E' C& J( q7 e" c# j0 F
JavaWeb实现显示本地文件目录项目源码解压码: ! ~7 `( |4 W, {% E2 Q
3 u: k: |: k u: [
' @0 N$ T; ]& O* ?+ @: I
|
|