该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
* o0 Y8 b( a, t( i8 T1 ?* f
4 ^) M$ B* f+ ]
- ~# w! O' V+ ^' Q 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
2 ^ Q7 t5 l/ s% e! C - 2 b# e0 e: u* F3 H: G" D
- import java.io.File;
& z8 T1 _! r$ E - import java.io.FileInputStream;2 E' y, L, x! Q' x, A8 f. e
- import java.text.DecimalFormat;
$ F, C3 P3 o" {9 U* P3 ?3 m. n - import java.util.ArrayList;! `0 X3 q3 n' q4 R4 W% i G
- import java.util.LinkedList;# |# x6 N7 V# w& `# d
- import java.util.List;
! L0 |) F5 k: {5 D6 } - 9 V6 o' E0 N6 u; Z
- import com.uudisk.domain.DirBean;
! j, P8 c6 L) _ - import com.uudisk.domain.FileBean;" R7 F% @: q; s4 o1 \ d. } E
- import com.uudisk.domain.RootBean;( ^$ {2 j, z! }+ ?. {
- L. G" [; ^7 G: [
- public class IterateDir {5 x$ G( B) T5 |, Y
- /*
7 n+ B4 I' L- ^" ^% Y - * 获取根目录信息9 S& ?4 o# i' a# q( V" f( o: S
- */% J5 b# [: m; F7 ~0 R. S* P& B
- public static List<RootBean> getDiskInfo(){3 g2 H L6 N0 w) T) A1 V* R
- //获取盘符
& J( ]1 w7 `7 F% o, l$ x! | - File []files=File.listRoots();; W$ \+ z* v" m% J' q/ d2 ?: @
- List<RootBean>roots=new ArrayList<RootBean>();% x0 f8 x2 M9 K& Q
- for(File file:files){' Z5 S, X6 u4 }6 C
- if(file.getTotalSpace()!=0){! k# Z" r& L& \: e
- RootBean rootBean=new RootBean();
' N( U1 {- s4 Q2 `; ?) v0 E - rootBean.setDiskPath(file.getAbsolutePath());/ |+ D! P& @8 Z: x+ U
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");
' D3 \# K w" ]$ m% Z# M- D - rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));" |0 D7 v$ }0 H v- \: B6 y3 Q
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));# F) v, d! T- r6 ]6 h3 H- m
- roots.add(rootBean);
* C0 d* ~% B/ i7 T - }0 }. T0 [' G% i& b
- }
- n/ x8 Y% ~& ^ - return roots;
2 ?9 k. r: \& s7 X( U9 o$ A" e - }
" x! R6 S/ J1 z( s$ Y: l - /*
& I9 ]8 m# S9 Q8 l& H - * 通过递归得到某一路径下所有的目录及其文件4 B- l& E# `0 \" v6 W
- */
! y. _2 F% s `1 e - public static DirBean getFiles(String dirPath) throws Exception{% Q0 U7 Y) `7 r% c
- File root = new File(dirPath);
) S7 d- x/ l3 ]) i4 f9 q - DirBean dirBean=null;
2 F1 W% |) ]# s+ e+ u* [ - if(root.exists()){
3 Y) y1 W' I6 Q/ Z p3 O/ p. S - dirBean=new DirBean();( `1 m+ F" K* d
- String dirSize=""; a5 h: J1 K! f/ B, H6 c
- int dirCount=0;4 q6 _1 ^8 z$ l) q
- List<FileBean> filelist=new LinkedList<FileBean>();
+ x0 E2 l4 Z, C - if(root.isDirectory()){- T. ^7 G% x4 `6 s
- File[] files = root.listFiles();& S) j+ N6 {, ^
- for (File file : files) {2 Q) T' ~0 h- |# h' X. |9 K/ V& w
- FileBean fileBean=new FileBean();
1 f1 Q( i, k5 V* p/ B" { - String realPath=file.getAbsolutePath();
2 M0 r) K% F; N - fileBean.setFilePath(realPath);
! q6 |6 N5 ?$ y$ J$ F& }6 ~. ] - fileBean.setFileName(getFileName(realPath));% i1 O7 p. H% n z+ u2 T
- if (file.isDirectory()) {$ v# h, Q0 P# x# h
- fileBean.setFileType("DIR");
! I2 M1 x7 d3 z# Q) T0 J - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));" l8 l9 t0 Q; T9 G
- fileBean.setFileSize("");
" n- |8 n: Z! ?! c$ T3 T - }else{
4 x& h* W v4 [, L' o# E - fileBean.setFileType(getFileType(getFileName(realPath)));" G/ ?) I0 X3 I- H0 _7 M/ [
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
( ]' q) }0 o" u1 \( R; g! c - }
( g& g" k, z: a, j3 Q- }. }! k - filelist.add(fileBean);
! t4 L0 y0 u3 q! S) ~ - }' s3 k. }: K: K6 Y: }' r0 O
- }else{7 o) H% N; s, M/ P4 F
- dirSize=FormetFileSize(getFileSizes(root));/ b- J5 @- @- g
- }0 S o2 B3 g, z3 i0 X4 O& x
- dirBean.setDirCount(dirCount);
5 _+ D t- Q( o( t. B Z - dirBean.setDirSize(dirSize);' `- `2 c& ]7 s5 g
- dirBean.setDirPath(dirPath);
# K( Q& _( h Z% f0 Y/ Q - dirBean.setFiles(filelist);
4 K8 c4 q! j [. n - }else{
* b' Y$ M8 w) J& z3 I - System.out.println("文件或文件目录不存在");- J0 I6 k7 |7 D' U
- } 9 @0 W7 z2 `" A, J# [! h& Z; o
- return dirBean;/ k0 d3 u, y. c* E4 @9 Y: t
- }
6 s7 }- d* m5 G! w) d5 N2 } - private static String getFileType(String fileName) {( M/ T& w5 {/ h; M% A
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();4 \* a5 A9 H3 ^
- }
1 |+ r! G3 i, ~- p: k/ o - //获取文件名, r( I% E( E+ J# _ c, D
- static String getFileName(String filePath) {1 H" \' G9 D3 X; \) \
- String [] fileItems=filePath.split("\\\");
$ M9 a, {- {3 v - return fileItems[fileItems.length-1];- ~( X6 B* w7 X M& h, @
- }+ Z2 A) [! ~! x; z
- //取得文件大小
& a5 h Y3 e. p. | - public static long getFileSizes(File f) throws Exception{
9 h8 X1 \4 n( j3 } - long s=0;
9 l5 @# |; u) o2 j! w' t; q - if (f.exists()) {
: R5 A1 g+ M. u# p - FileInputStream fis = null;
2 i1 c; q9 M0 `% B, z9 p - fis = new FileInputStream(f);
# N6 [9 Q7 K7 s1 U - s= fis.available();
# u' U/ ]0 g9 P5 h: Q3 D+ _: A/ r8 E - } else {" B8 b, Y1 ~- R: |8 ~
- System.out.println("文件不存在");
8 o7 o' |$ H& O6 T5 ^ - }' h! X+ ? ~+ L# m( P3 J) F
- return s;
: _3 F+ x' s8 G, M) x - }
/ \% B& g x6 d a# X/ c - //取得文件夹大小
/ I; M+ W! q& v8 B - public static long getFileSize(File f)throws Exception
1 L; C/ j3 u: `5 ] - {0 u( o2 b% h' [ {
- long size = 0;# X6 b ]7 M; ~! @/ y
- File flist[] = f.listFiles();
+ V8 r6 @8 r. {: i& y - for (int i = 0; i < flist.length; i++)
' e! W( E; |) l1 D' E0 s, t( T - {9 \$ _+ @4 x* h3 D
- if (flist[i].isDirectory())
, z, n6 i9 ], l5 r& M - {
+ H* u. F3 }* v* {. k9 p - size = size + getFileSize(flist[i]);
( |* d, w$ Z+ \' B: a) d - } else" E" X# J2 ^( B) m, d) ?- s) q% `
- {. q. M( a$ M4 [' _
- size = size + flist[i].length();
" X8 M8 [1 w: @. C1 ]4 r - }
+ h: H1 m; a; I6 I2 j4 O - }) }' M; j: ^2 u* L
- return size;, h; v+ I! O' R$ W/ z A4 K
- }
9 D+ }- J: C( T - public static String FormetFileSize(long fileS) {//转换文件大小
l$ a" _( i% b0 I9 z0 g - DecimalFormat df = new DecimalFormat("#.00");
. `: C: |& ^# T+ O# ] - String fileSizeString = "";$ b$ s2 y- }3 n' b h
- if (fileS < 1024) {
* x6 X5 I; Y" C3 Y - fileSizeString = df.format((double) fileS) + "B";
' A* O* _% G# S) j$ c' @3 P) }9 r - } else if (fileS < 1048576) {2 D+ b* `/ {' T8 U- G4 f: f) L0 R
- fileSizeString = df.format((double) fileS / 1024) + "KB";
2 | M( T: c3 E. ~- P - } else if (fileS < 1073741824) {5 i3 S8 r* I- b8 K
- fileSizeString = df.format((double) fileS / 1048576) + "M";' o5 P$ m' u: @2 s4 D8 v, a6 P) o3 m) h
- } else {
8 A0 _/ P: o0 Z$ X4 j t( l - fileSizeString = df.format((double) fileS / 1073741824) + "G";1 \) H8 w; W, o
- }
! z# q% K8 F$ |0 m1 p - return fileSizeString;
g6 J: Q7 {2 O2 v - }
$ w! l' I& ~! `1 Z1 _ - & p M- o& t! V9 e
- public static long getlist(File f){//递归求取目录文件个数0 i3 M! l+ h. N* L1 b. ?) u, l
- long size = 0;- B% H6 H- @( |9 o1 T, F
- File flist[] = f.listFiles();
[, B& S8 r$ M' o - size=flist.length;
0 J( l2 J/ t6 S- h u - for (int i = 0; i < flist.length; i++) {0 H5 e7 j$ U, N: U) X* l7 B
- if (flist[i].isDirectory()) {. b( P: T$ _4 Q6 ]
- size = size + getlist(flist[i]);$ F' Q2 `. G; h% a
- size--;, N' C* d! C7 _ k- W( S
- }
8 u* J2 Z8 q+ Y/ d' [% k - }
( @9 k- q W2 g6 z* u - return size;' X, h. k) H- B2 w$ N; Y) \, k
- / s6 W" H9 |; Q
- }0 f! I8 G- b; m2 s
- }
复制代码 ) q/ K- \3 W9 b1 B0 g& {
JavaWeb实现显示本地文件目录项目源码解压码: . h+ i0 M+ [& P1 S A7 S3 {" w
4 l9 x# h3 S2 q) C: [ | & q) |) f% x/ O( H/ m K
|
|