该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 ) y$ O4 ~* h& _7 n7 g t* S1 F
, i5 M+ |0 f; C; N2 U0 C ( ~3 c O! r4 O$ w' ?
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
0 m) e- d8 Q; L5 H6 ]# {4 d" W( d - c: |- t1 Q1 u0 s1 A1 j
- import java.io.File;9 }" W G3 ~, U) R
- import java.io.FileInputStream;
4 ` c7 x. |0 y - import java.text.DecimalFormat;" |% A6 B1 P) i- [# |# z
- import java.util.ArrayList;. j( {7 e& H* F8 F/ _' G! F
- import java.util.LinkedList;2 j* X( L. W. J U
- import java.util.List;. a& j9 G4 w; d8 L6 O6 F' [
- ) d, I" p4 N2 b5 X1 e* m A- H
- import com.uudisk.domain.DirBean;$ I" W" }% |2 M* j& Y4 Y
- import com.uudisk.domain.FileBean;/ m9 v7 y5 }- S9 m
- import com.uudisk.domain.RootBean;
4 z5 \( Z8 [9 \8 s; n$ L' V
3 v" R* s. O6 [1 W1 e- public class IterateDir {
+ t( | p N1 ] H! n3 U9 ]; F - /*. K- r- D! l9 r3 U6 z0 K4 p
- * 获取根目录信息, U0 f5 S" U9 [. h5 v! V% h
- */
3 @+ `2 t5 [2 i" w: L% k& |0 |" I - public static List<RootBean> getDiskInfo(){+ q/ O& V- [3 x# Y% o/ W( q/ G: z
- //获取盘符
7 B- m5 \+ ~9 I \) p/ Y, P. z( H - File []files=File.listRoots();+ F: H5 k3 o9 o/ }: X) x
- List<RootBean>roots=new ArrayList<RootBean>();
$ |# l7 ]( k1 j, q2 Z+ a+ ?! O2 q - for(File file:files){
$ v( Y, f& {# G1 _ - if(file.getTotalSpace()!=0){! B6 D; ]+ k) w9 C0 z1 \# R }# A
- RootBean rootBean=new RootBean();
4 [7 k% ^: G* B& Q5 i - rootBean.setDiskPath(file.getAbsolutePath());
; M0 z r- J: \ - rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");" y* M* v" l; R7 {; L
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
5 R+ b7 ] N6 c& o( y - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
( f) n( v1 e2 @- s& d/ Q - roots.add(rootBean);
. h+ }6 L8 ?% ? - }
1 I# I4 D, m7 [ - }+ `. [; w4 s0 F' `# W
- return roots;
W+ Q& b7 {& ` - }" F, i0 d, o; m" i7 R# P; X
- /*
1 T% s. Z9 b( \5 A3 x$ O/ w - * 通过递归得到某一路径下所有的目录及其文件
# W1 i( Z3 Y& S+ L) | - */
0 T- y+ R9 N M+ { - public static DirBean getFiles(String dirPath) throws Exception{+ F/ E9 B+ g! D7 b
- File root = new File(dirPath);5 G$ ~( d) r$ L; u: R- ]8 l
- DirBean dirBean=null;! M o% a) a' G9 r( P
- if(root.exists()){- Y; x7 o9 W7 u- f
- dirBean=new DirBean();
* {# n" O3 L; Y- g- f9 c - String dirSize="";
. ?/ G8 O% d$ n; f" t) W) V - int dirCount=0;9 E3 u& r0 k+ ]
- List<FileBean> filelist=new LinkedList<FileBean>(); Q$ y. ]% t0 G2 \
- if(root.isDirectory()){6 y& h7 O4 q! j& C: r% p) V$ p' L
- File[] files = root.listFiles();
' I) _# f8 c# t! R3 ]' Q - for (File file : files) {# _8 R4 _ B# M" H! u2 v
- FileBean fileBean=new FileBean();5 L4 w6 T! Y% J- O3 u6 t/ o
- String realPath=file.getAbsolutePath();; G0 {, Z/ Z( w
- fileBean.setFilePath(realPath);
& f1 h+ b5 @" {4 g - fileBean.setFileName(getFileName(realPath));
- z3 |" H2 x$ O: F6 N& J - if (file.isDirectory()) {: w- n+ H4 c/ v! A' L: L* [
- fileBean.setFileType("DIR");1 I7 e# }- I. A) I* d) h
- //fileBean.setFileSize(FormetFileSize(getFileSize(file)));: ]* z; F) _1 {; s, S- _$ ?# y
- fileBean.setFileSize("");
* O1 T. t" B( S* I - }else{5 |( Y! N& y& Q6 P' ~/ y
- fileBean.setFileType(getFileType(getFileName(realPath)));
8 h3 A/ `& ?) i8 D9 a - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));% Z$ |$ L7 R; ^; j9 R
- }
; R: Q, {- N6 ~& G3 A$ s - filelist.add(fileBean);7 b2 k7 b9 p/ e5 B# c) R; M
- }
: H `9 _3 R' x - }else{9 L2 O' b7 P7 u( q
- dirSize=FormetFileSize(getFileSizes(root));
2 u# T) x) _8 J. f - }
1 z2 Q" V: F- b+ D3 x7 C% A! u - dirBean.setDirCount(dirCount);
% |# h& B1 t3 O2 x - dirBean.setDirSize(dirSize);
; @# S5 K5 _7 y8 K3 Y4 ?* } - dirBean.setDirPath(dirPath);
2 r* `+ A0 k* z& i( m! R; ~" d1 p - dirBean.setFiles(filelist);
9 j, i# H/ B5 ? s2 S% R5 } - }else{8 R, k/ \# F9 v! W6 i7 {, U
- System.out.println("文件或文件目录不存在");! c# t& e/ R r) T! s6 g$ A% j+ m0 H
- } 4 S% p. }3 Y; `& L X. y& I5 x
- return dirBean;
5 _: y5 O/ g% Q% U; ?6 S% U - }% A2 [# w: h1 G2 l* l3 l" |
- private static String getFileType(String fileName) {; A' Y. k9 ^1 o& h( S
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
R/ \+ d% X! b+ V7 p. n: U" s - }
6 M- i2 [8 D. X2 w1 K+ _ - //获取文件名1 M6 D; ~1 ?8 v" R
- static String getFileName(String filePath) {
% o, x3 V, F7 w4 R, h - String [] fileItems=filePath.split("\\\");; m9 e& ^, v8 A" p* y. F
- return fileItems[fileItems.length-1];
" m( _6 n+ c# i/ j - }
% B/ ^1 U' K9 P) d) ^ - //取得文件大小
9 @. r' C2 ^& |% ?/ {+ @ - public static long getFileSizes(File f) throws Exception{
- L Q- M0 N. O' Q1 Y9 ~, g - long s=0;4 I; t3 x' N. Z5 w; f, H) z
- if (f.exists()) {1 ]- |1 ^) @5 U' q; }
- FileInputStream fis = null;
5 K; c% c" M2 j - fis = new FileInputStream(f);
0 B8 ~# H8 q0 e& z3 n# x; t - s= fis.available();8 T; J' n$ h Q) Q
- } else {
2 M% N/ D3 v6 D& }0 N - System.out.println("文件不存在");! K- K) X1 H, W6 _! G7 o
- }
- e" P, X, `4 z' [ - return s;
. G) J4 z2 p5 i' Z* c) [& B - }: ^2 B7 h1 _+ G8 F8 [
- //取得文件夹大小
+ o4 p( J6 W4 f4 d: P - public static long getFileSize(File f)throws Exception
, R* Z" b/ g7 Q - {
! g0 W# k6 U7 ~, w - long size = 0;5 T4 ^- P7 o' \: H
- File flist[] = f.listFiles();& V: ]' [4 S1 {- }
- for (int i = 0; i < flist.length; i++)$ t4 M: s0 b% b
- {
% m! g4 i0 \& w2 m8 U6 e4 s. g - if (flist[i].isDirectory())
. V/ }4 f: h9 P1 B - {/ Y6 `' w1 a Y4 z% R; [( }% w0 [
- size = size + getFileSize(flist[i]);( q: @$ N! q( y7 n: A. k" C8 z
- } else5 r; O3 N) M% Y2 s$ A: ?; c2 f
- {
; H. X4 \9 g$ T f8 H. X3 A5 N0 p0 _ - size = size + flist[i].length();: M: k) |; v7 y/ o1 A
- }4 }* G+ c+ n0 N0 Q/ u
- }3 C; x, B9 d% }0 S( }, i9 X
- return size;* P, E2 A0 g5 z* i
- }) E, P, N. i1 h9 b- d/ J
- public static String FormetFileSize(long fileS) {//转换文件大小1 O" j. t2 J( w* t& {' g
- DecimalFormat df = new DecimalFormat("#.00");
% j) i4 g/ O1 X8 W - String fileSizeString = "";4 E. z, r; i* ?4 e% S; e; X8 w
- if (fileS < 1024) {
: ?# t. b- n& B. c* y( n3 J6 s - fileSizeString = df.format((double) fileS) + "B";/ q! H2 p! b# k0 Z* I
- } else if (fileS < 1048576) {$ H! u% X1 J) ?
- fileSizeString = df.format((double) fileS / 1024) + "KB";
5 y [4 B$ h& G - } else if (fileS < 1073741824) {5 m0 S' p$ D, K* j
- fileSizeString = df.format((double) fileS / 1048576) + "M";! D, R7 h R. @0 B; w
- } else {7 y3 i2 ~: ]1 t! _2 L2 F
- fileSizeString = df.format((double) fileS / 1073741824) + "G";
+ V+ ]" B/ i! x4 E- a7 J7 n - }
8 B0 F0 g2 d) c1 W, K1 M - return fileSizeString;( D( I; c% V; }/ U$ L# U c
- }
% o! O! c$ w8 l$ _( H) j' L - ! d8 Y. ^* |7 Y* J
- public static long getlist(File f){//递归求取目录文件个数
5 B2 n: r( W. B- l+ | - long size = 0;
: V, ]1 K$ T/ ]5 c( J( } - File flist[] = f.listFiles();% n( u& |8 o P* m6 o& X; W
- size=flist.length;
/ |' e3 d, R0 m3 | - for (int i = 0; i < flist.length; i++) {
) ^5 J% m$ }! J- i2 h; @ - if (flist[i].isDirectory()) {
" J! Z. e- }' |, W. m - size = size + getlist(flist[i]);
9 c- f6 d/ L( S y& z. T - size--;0 X! i. _3 V/ b; ?! U; ^+ Y$ b
- }0 A4 z% h# g9 `: h1 y. Z
- }8 q8 V+ D5 S' S$ n6 I5 U0 e
- return size;- K9 n) g) P8 R) o0 W6 l4 g, q
; k% R) a! y( s. V- }
7 B( B) K. e# L$ ]& [& e - }
复制代码 * ?. f; c; U5 q5 X4 m: v, }, N
JavaWeb实现显示本地文件目录项目源码解压码: {" K5 d5 [& A5 ]/ d; i
* e9 E, I0 y% g 5 k) e3 l% a1 U: ^
|
|