该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 $ T' G8 q4 Y$ P8 r
c$ Z$ b* L# m* [ g! h7 V
) T% e! ^. t, _: P' C0 W
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;2 t. x# P- H6 G( |# \4 P
- " Z/ O( g) [4 ]. g5 _) Q
- import java.io.File;
/ z& E( l0 l3 e8 t3 @ - import java.io.FileInputStream;
7 ?7 u7 s( q& ? - import java.text.DecimalFormat;
4 L$ {/ S4 S. ?5 [ V' _0 | - import java.util.ArrayList;
8 ~3 `* Z W5 u' E; M8 m - import java.util.LinkedList;' Z1 P% Q1 `! |8 L4 t- j
- import java.util.List;0 d. f. \4 d3 ~1 e1 K5 p, i
& F8 `; |$ A4 V V* O- import com.uudisk.domain.DirBean;
9 Y! C0 G: Q& u2 u% K2 _; V - import com.uudisk.domain.FileBean;
+ E! d1 v" A# c1 T! k* V( e) O - import com.uudisk.domain.RootBean;
# ?: J, O& w6 x8 @6 M. l; k& V - 0 P) ~; ~. X. s
- public class IterateDir {$ `4 W- _; D. o' |8 B6 y
- /*! {; A( h" ?) W5 f% N0 A/ T) Y
- * 获取根目录信息
- {. v1 |8 ] { ^ - */( x9 M; n) C" |# ]0 D( \
- public static List<RootBean> getDiskInfo(){
4 H. \. ~. G4 I9 U5 \7 k I( M - //获取盘符/ U3 \2 Q. @- S3 P% y3 b% W+ X
- File []files=File.listRoots();/ n7 m, {# O. ], C ^
- List<RootBean>roots=new ArrayList<RootBean>();+ a+ Y! U) `( b: e- I( `
- for(File file:files){3 }: y- L' I- D! @, E
- if(file.getTotalSpace()!=0){
7 O* G' u$ W' j& ^" `1 S - RootBean rootBean=new RootBean();
( ~- J# I% [/ m% x" u - rootBean.setDiskPath(file.getAbsolutePath());
; |1 P! V7 D1 d - rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");# P3 H1 r; C7 k! Z: J' O6 ]
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));0 F# e/ ?6 c9 O7 q3 |
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));" v) M$ N) g3 Y& V/ d* O
- roots.add(rootBean);
& Z6 O- w# k5 h. u5 K - }
& A9 b6 S& R3 ^" d' G - }
. g& i; G1 G% @2 r. z1 _# t - return roots;
% p6 n8 K# _- H7 {/ r3 v - }
, t. Y4 [/ V/ B - /*/ a- A. j* ^, s' N9 k2 g
- * 通过递归得到某一路径下所有的目录及其文件
9 W% Q2 J% ]7 o/ b& j2 X - */
+ P" ]( ~7 w8 u7 A( a/ B& z - public static DirBean getFiles(String dirPath) throws Exception{
; H' u q, {$ u+ B) R' `) l+ g) s - File root = new File(dirPath);
1 P9 a6 p/ M2 S - DirBean dirBean=null;6 c. y" K! d) w- J6 O: Q
- if(root.exists()){
8 x% V( w6 p1 }# q - dirBean=new DirBean();' R" f6 D4 @; E
- String dirSize="";
+ j9 s9 G1 B/ Y0 w# B3 J& a - int dirCount=0;# q! J, l- s) m" F: p
- List<FileBean> filelist=new LinkedList<FileBean>();
! ~- w& [5 s# X4 D" O - if(root.isDirectory()){* Y& b& o) N; H& t) k6 Z
- File[] files = root.listFiles();8 ^# w1 o' ^' z) x
- for (File file : files) {0 x1 Z9 L7 w2 _/ X) b [4 W0 ~
- FileBean fileBean=new FileBean();% K; c+ n5 y/ N$ _! K
- String realPath=file.getAbsolutePath();
9 c% `+ W/ j3 k2 U" a: j - fileBean.setFilePath(realPath);
# m l- f0 H; F - fileBean.setFileName(getFileName(realPath));
/ x' ~8 V# O1 y; N# [" H - if (file.isDirectory()) {% q- h( m4 D. B1 R3 ^; d
- fileBean.setFileType("DIR");
8 r2 O+ R! F& q2 q3 [ - //fileBean.setFileSize(FormetFileSize(getFileSize(file))); E; `5 m- {; O3 T6 G
- fileBean.setFileSize("");+ m$ w- U" x4 k. P% M; Z
- }else{
+ M6 ^. g3 _7 d" G( f - fileBean.setFileType(getFileType(getFileName(realPath)));4 L8 a* u' Q: U& [% w- V) h
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
$ s1 x4 H/ b2 U& N7 e/ B: S) ~4 M( K - }6 l; \, L) }3 N6 e' u) u5 _+ ^) s
- filelist.add(fileBean);) n- F& g. i- D& c' h1 q
- }
L3 ~1 o& c/ Y }1 H$ D$ c - }else{
) Z# _9 J+ H+ C) i) Z: O - dirSize=FormetFileSize(getFileSizes(root));7 ?- n# K: g; m/ y" n* r3 X
- }
1 F5 g# `9 g2 I - dirBean.setDirCount(dirCount);# ~6 T0 ]8 y# u, O+ h l
- dirBean.setDirSize(dirSize);; H9 M$ Y( |- [" N B& b/ j8 [
- dirBean.setDirPath(dirPath);! `& m! y) A" n: J9 e
- dirBean.setFiles(filelist);; C, u/ b" O g- S3 T* o: _
- }else{! @/ s1 v# z3 F
- System.out.println("文件或文件目录不存在");0 ]' F; X+ A. W; f% G& Q/ G9 g
- } 4 C- k9 j* T3 l- t! V3 Z$ k$ y! f$ x
- return dirBean;
L+ Y. i. q7 I) c - }4 b% d! r( v% d* I
- private static String getFileType(String fileName) {
+ ^0 j2 s+ o$ ?* r9 O& n$ B2 v - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
6 F0 D u* \4 w; T/ Z - }$ b- ~6 q2 z& C1 N2 w1 G
- //获取文件名0 S& n% L- z# ~6 c9 x
- static String getFileName(String filePath) { {1 [6 z( U7 X, d( m
- String [] fileItems=filePath.split("\\\");3 [) \* C1 ^" a% \* I- l
- return fileItems[fileItems.length-1];6 O: ~. `( n7 d. U
- }5 M" H4 j! \. Y
- //取得文件大小: X& m* [: l% L; y) c4 f
- public static long getFileSizes(File f) throws Exception{
; q: {" L* r1 O1 B - long s=0;
1 r6 G/ ^, x: J# R - if (f.exists()) {
( F, O6 N2 w* D3 _% G+ T - FileInputStream fis = null;
9 D; b' ^0 N6 p* h1 @% A& @ - fis = new FileInputStream(f);
+ ]- U$ [1 | J3 l! ?# l8 J - s= fis.available();, p) U) p4 F6 L6 n; Y
- } else { P' `% Q1 r5 h$ d
- System.out.println("文件不存在");
0 X* _3 Y& o8 U$ B9 \ - }) D4 f8 ^8 L/ _. q/ C7 G* {3 `
- return s;8 E( T, \1 h$ D, C; Q! y/ }
- }3 p9 C" H# R' p, C# W: E B& F3 M
- //取得文件夹大小/ e) M, }" ?" P- k. `
- public static long getFileSize(File f)throws Exception) h- z# ^6 R3 o) t
- {) `# M8 g- x: @3 U) ~; J0 K; G
- long size = 0;
$ X9 j; D0 V. l$ C- _# R# e - File flist[] = f.listFiles();1 U. s& `! [, Z- G
- for (int i = 0; i < flist.length; i++), o+ n; m. B0 x6 y5 H9 ] l
- {$ `% ~# N2 r! Y. c
- if (flist[i].isDirectory())
9 {- \) `9 f4 S6 S4 z2 P, @ - {
( k. @3 v1 |& z" m0 C# @/ O - size = size + getFileSize(flist[i]);
5 v/ S, I w9 y" e. ?* F# S - } else
! @ s$ p" y* P0 u - {
( }8 O M( f+ \4 l# _ - size = size + flist[i].length();
. q1 |- F* `, G+ l - }
1 N% u5 Q4 M7 q9 D9 I" }& ? - }
6 X# V( ]3 j. p1 K7 R% O - return size;2 U% T5 s- w Q- J @* N
- }/ ` U' x( `6 F
- public static String FormetFileSize(long fileS) {//转换文件大小
/ G2 ^. _ Z! c* o4 W( E" p - DecimalFormat df = new DecimalFormat("#.00");3 y- m1 G# o2 _8 h1 V
- String fileSizeString = "";; @# ~ G6 {8 P7 W! l; r0 t- b
- if (fileS < 1024) {
% J/ |. S' U! B* S: M - fileSizeString = df.format((double) fileS) + "B";0 Y) J9 Q6 X2 \2 ~1 P
- } else if (fileS < 1048576) {; S9 r9 I9 s( X& V) f0 I% u c
- fileSizeString = df.format((double) fileS / 1024) + "KB";2 [0 ]$ C- {' h6 a* X: s3 m
- } else if (fileS < 1073741824) {; N0 {4 }: f& X4 c# ?
- fileSizeString = df.format((double) fileS / 1048576) + "M";
# f- L: t6 t" }7 { - } else {
5 Y7 C" N( l, A - fileSizeString = df.format((double) fileS / 1073741824) + "G"; e, G7 C0 \1 [! j* d. Y
- }- V! r8 y, j/ V
- return fileSizeString;5 M6 t; i& P3 X& p, Q! X& d
- }
2 |4 d# x7 z3 ]0 e3 l7 Y) ? - # m3 I$ W2 S# ^: N
- public static long getlist(File f){//递归求取目录文件个数
0 I* h/ i3 I6 F8 v - long size = 0;# m) E: a7 [* k8 i r1 L" e; X* @
- File flist[] = f.listFiles();7 z8 g2 s. q/ B) R' P
- size=flist.length;
5 B4 n k6 m7 p& l8 u( p4 h2 }( o- M/ Y - for (int i = 0; i < flist.length; i++) {
; q1 b3 r: A$ d; K [1 C - if (flist[i].isDirectory()) {
, `1 V6 \+ ^0 c9 W# s - size = size + getlist(flist[i]);
0 d. X i3 J1 `7 T - size--;8 y% ?& _' j/ D' C. q
- }( b# r$ B" Q0 J) F( h) Z5 |
- }
! j. _1 `$ s+ W3 o, H - return size;
* g9 Q/ b" h4 E5 g/ n- |$ u
4 `1 Y" f2 u$ f- }1 Q J8 c& T' o8 t6 c& |& W# K. i
- }
复制代码 7 J8 X- k4 w, N4 Y% F
JavaWeb实现显示本地文件目录项目源码解压码: ) G# {* z/ C6 J$ `) J
4 ~7 B3 b9 w0 h$ i * c# z% H4 Q q$ J& {
|
|