该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 # n9 p; P, z& S- x k- w
$ F- ?* R4 }3 C1 B4 W% ]; v N / ]# o3 L/ J( @
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;/ s8 }; F( E5 Z) |$ H, V* ?! b+ c
; `' u" C4 A W! ]! D- import java.io.File;
1 G5 D/ d+ X) I/ ~8 m - import java.io.FileInputStream;
% }( V& {4 T5 J+ [& l8 `8 g* X - import java.text.DecimalFormat;- x! B6 ^: E5 G- F4 ^1 }
- import java.util.ArrayList;
; P, C+ l) n/ X- ^( t- F8 f - import java.util.LinkedList;
+ {4 `1 A) ], R M: k - import java.util.List;; Q, X. b) O7 i0 H
8 \1 l1 K2 l$ g5 q' M' L- import com.uudisk.domain.DirBean;+ Y! q9 G+ w1 K l2 }
- import com.uudisk.domain.FileBean;
( J& R3 ?* L3 m" }! N( }+ K* v' ~ - import com.uudisk.domain.RootBean;
8 k+ s+ i% V6 M) I% g
+ e" e/ U2 R8 D1 p- public class IterateDir {
+ Y! u. u' |" I: w - /*
- ?: C# b H) @, { - * 获取根目录信息
|" t: b6 `/ L7 {) p - */
' R1 R, a7 {( {% g9 n6 C - public static List<RootBean> getDiskInfo(){% ^, b5 }& P: @* F' q
- //获取盘符% `: i' {! ~2 {+ J0 L- s
- File []files=File.listRoots();
1 ~! g0 P; x) M/ g - List<RootBean>roots=new ArrayList<RootBean>();
; P. v# K$ E) S- j- C - for(File file:files){
! v% ]$ n: H2 r2 a/ d4 [ m - if(file.getTotalSpace()!=0){3 D/ q, q% b& D6 L+ P9 X+ I( V" k+ ~
- RootBean rootBean=new RootBean();
/ R& a$ k/ p8 D( Y7 j3 h, L - rootBean.setDiskPath(file.getAbsolutePath());* D8 F7 y$ S& I' z
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");+ d3 B3 T$ w1 `. Y0 }& a
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
, z; F/ J% ~, h - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
' C% n8 k5 Q6 u0 t - roots.add(rootBean);
3 F# u, X O4 C+ J& i0 W - }. L8 a' a- \" s2 X' \( H$ P( [% n
- }
5 _3 v( }( d3 T" ^& J - return roots;! C) y$ o- N- B, T/ Q6 s7 {
- }
: G3 u4 w; m5 L0 U* x& J - /*8 U4 Y" g5 J" P2 w" r8 _2 I1 n
- * 通过递归得到某一路径下所有的目录及其文件4 o3 s7 D2 b. A c& T; k$ @6 H
- */
! y: d5 v2 \8 f1 A - public static DirBean getFiles(String dirPath) throws Exception{$ x* h+ `5 X. L, E/ b5 |
- File root = new File(dirPath);
* B( D2 S6 D& i3 N' b - DirBean dirBean=null;* s) k `& Z5 ?, A' @
- if(root.exists()){
# X/ w/ [& c3 g6 r9 ^ M- { - dirBean=new DirBean();
: n5 ]% m. r; W' Q3 L3 x* i - String dirSize="";7 m* o- U9 E/ {6 ^. U8 q
- int dirCount=0;
1 F0 L [* K: F# Q - List<FileBean> filelist=new LinkedList<FileBean>();6 `/ s5 T6 L9 K' F' s9 S
- if(root.isDirectory()){
- s% N2 T% L1 x7 e1 r. R - File[] files = root.listFiles();
* u5 W2 r% u2 e7 G - for (File file : files) {2 u) ]$ |& H8 P7 G. M
- FileBean fileBean=new FileBean();2 C, h1 i0 f& a! `8 w2 W
- String realPath=file.getAbsolutePath();
" y, T+ r+ n. o' c7 B - fileBean.setFilePath(realPath);- U+ c2 c* ~2 s8 P8 R. w% ?
- fileBean.setFileName(getFileName(realPath));
7 ], Z# y6 w2 E7 E4 q5 W - if (file.isDirectory()) {- p' _ V, R9 h1 m/ x$ J
- fileBean.setFileType("DIR");
, M1 k5 G8 t7 A$ S - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));7 n) \& d8 S, @( T7 r3 k. d1 o
- fileBean.setFileSize("");0 N l9 o- x6 \. U
- }else{: `( V3 I; T: h5 ?
- fileBean.setFileType(getFileType(getFileName(realPath)));1 y0 n- d1 ]1 A; u7 |& }
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
( ?4 g8 ~; p, Q) H9 ~ - }4 j& l4 G+ X$ m' h- G1 R+ r
- filelist.add(fileBean); w7 t: h; _, P, K! E" H7 {3 l
- }
( T9 ^( V7 {3 O, W1 a' ~ - }else{
: d2 J( p2 _; l5 Q! u2 `- X6 } - dirSize=FormetFileSize(getFileSizes(root));$ H+ C P0 p0 _1 X& J* k2 Z3 D
- }
2 N/ f7 _. S/ [0 Z/ `/ B - dirBean.setDirCount(dirCount);& F7 b5 q! }" H F. u, a6 Q4 J
- dirBean.setDirSize(dirSize);
4 y# Y: x" _( U/ X) i8 T - dirBean.setDirPath(dirPath);0 @4 q2 P5 O7 p* t& o3 a. z, v) e$ S
- dirBean.setFiles(filelist);
/ \, W7 P1 ]: h; D) W/ m1 f - }else{( |& ?5 f# [' r
- System.out.println("文件或文件目录不存在");
# u: D+ ^% x7 \ - }
' C8 M% ?0 Y6 A* Y$ K1 X - return dirBean;
. v7 {/ Z H% o" V - }
" A' j, m; _: A( o - private static String getFileType(String fileName) {( A6 l8 Q. L+ W. N9 }/ ?( }2 u$ T
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();+ B! @3 F* U) a, O% v
- }2 v, Q2 Z8 Z* q/ N3 t# I
- //获取文件名
4 @9 H) q- e; z# R! q$ C - static String getFileName(String filePath) {
7 H- |" m; @ A( x. O - String [] fileItems=filePath.split("\\\");, E' u/ B& ~. n7 l
- return fileItems[fileItems.length-1];8 s# b/ I& x4 ]% j9 P5 o5 R4 Y
- }
7 G" w: T6 F0 T- b3 j! d, ~ - //取得文件大小& Q$ X n, M) `
- public static long getFileSizes(File f) throws Exception{' ^' n9 o$ @* r; B" ^& S* L. |) @
- long s=0; |7 ?8 H& H9 h, e6 e
- if (f.exists()) {' V' O9 W ~& D" y3 w) Y; O
- FileInputStream fis = null;
: l$ |: s2 N! i, |: _; s3 s" j - fis = new FileInputStream(f);5 ]! w) t+ N6 b: w% e* W
- s= fis.available();4 g' c; o; a' Q# j* k4 `! W) C
- } else {$ d- m$ g0 L& w, R, u0 X
- System.out.println("文件不存在");+ r, E+ v6 q h# g+ Y9 p ~
- }
& \1 R y. I1 g6 B1 s( b( m/ `6 b - return s;
( ?% f7 w) _* v( j) w3 n - }; G3 B( v, t, a( {
- //取得文件夹大小
; f; x; r, b4 P' ^$ n* z - public static long getFileSize(File f)throws Exception4 f' i1 u# ]$ z) b% I% B
- {
x" z$ v+ A3 u Y/ L7 g) N - long size = 0;
( S+ @5 B9 d/ s% b6 t3 V1 G - File flist[] = f.listFiles();7 E0 W' O" c1 s! _
- for (int i = 0; i < flist.length; i++)
* z0 F# `1 E' L% e. E' N3 K9 K - {6 [- w; ]: o: p; p! z# n: \
- if (flist[i].isDirectory()), j+ O4 z& Y) @% c4 y
- {
: G& f- y0 z) |: d5 B$ N - size = size + getFileSize(flist[i]);7 ~3 v2 j. j: {- K: d, Y
- } else
* t; \( `! k8 w) u# F6 B/ R: Q - { b" X0 Z5 S( \( {& [
- size = size + flist[i].length();
- B: C% E" @- _* O1 D+ J9 s - }
% [) y: V3 r* Z - }
) ]9 l. e& G; N8 b: R+ g$ W5 R - return size;
. }5 \& G* X. C6 p' z - }5 p0 s) Z+ k! E0 U% e& t9 n
- public static String FormetFileSize(long fileS) {//转换文件大小/ a9 _, `$ N1 F, X
- DecimalFormat df = new DecimalFormat("#.00");" X! y0 w7 o* ?% r( b0 B
- String fileSizeString = "";- B- P8 {7 w' b1 z) i; g* g5 C
- if (fileS < 1024) {# N# Q6 I9 i. [; d8 l
- fileSizeString = df.format((double) fileS) + "B";+ F$ F4 y3 Z5 e* b* Y
- } else if (fileS < 1048576) {
6 z: e! s9 M# \, U+ S1 s - fileSizeString = df.format((double) fileS / 1024) + "KB";
" }/ i) x$ {4 K1 P# u6 k7 p - } else if (fileS < 1073741824) {; d5 H" n: p) L, I/ b( \* q% a/ _
- fileSizeString = df.format((double) fileS / 1048576) + "M";
0 s# e" V E6 B9 ] - } else {2 b# r3 ^1 c: G
- fileSizeString = df.format((double) fileS / 1073741824) + "G";0 p( R# b/ d' A: S
- }7 b; B* h% v8 s% a' o
- return fileSizeString;
( g* P' Q" O2 ~6 u+ g9 w2 B - }7 ^7 Z% p4 G7 Q5 ^/ p& Q# e
- ' J: r$ k' I- q' D
- public static long getlist(File f){//递归求取目录文件个数
* |/ D( C* }, a- D% P# b - long size = 0;2 q6 n. P: O: q4 A, S( a$ @
- File flist[] = f.listFiles();
: b3 M: p! ^3 R4 r7 E - size=flist.length;4 h$ c! v3 p* l b4 D9 f
- for (int i = 0; i < flist.length; i++) {1 h. {: W* G* z
- if (flist[i].isDirectory()) {% @0 c: _6 v2 H0 ~" R
- size = size + getlist(flist[i]);& J; T% P$ f; M. R, Z
- size--;. t F; t7 s9 N& G& j. j6 B% R
- }( U( x' B- ], r3 O7 n9 S) w
- }' u! O7 e. s# V+ I0 `& _3 Z
- return size;
6 H" O* y, O5 ?$ s4 A - g; }, h4 X/ U; p
- }
( `* z) c% M$ l! D, S+ f6 B - }
复制代码 - n- v! b& B+ | I
JavaWeb实现显示本地文件目录项目源码解压码: - g* `: E2 `, _! U
+ P# a5 x: f4 U6 L! {# K
/ n% _$ Y2 h0 e6 ~: U! j
|
|