该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 7 s/ ?2 P6 x% P
4 t7 u+ E9 s Z% x) n4 u+ l
% Y9 d1 C; _ r3 a2 n
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;4 n+ l* Z6 i2 j/ X
- ! ?* O% O/ }6 F0 D
- import java.io.File;
* ]# t( A4 S" ~6 m. w% H( w! y' t - import java.io.FileInputStream;3 \& ^2 _1 t) b: L
- import java.text.DecimalFormat;
& O* L4 E# y0 _. I - import java.util.ArrayList;
* {# s( Y& e. J7 _' W" Y# c - import java.util.LinkedList;
7 Z; i4 ], X5 Z - import java.util.List;6 G, B- }. j0 \0 y" x! H2 w
- , s+ ^: Z0 t/ j8 R" c7 v1 _1 P& v2 {9 W
- import com.uudisk.domain.DirBean;
- h, ?- V* {# v) q; `. \( H- S - import com.uudisk.domain.FileBean;5 X7 L& U' J3 A* l$ w, `6 H, i+ Y
- import com.uudisk.domain.RootBean;4 \) Y" ]& {% T( }4 f5 p- u* }
- : A0 _0 n9 Y& Q' s3 c
- public class IterateDir {
u8 T% G' l% | U* X# C6 O5 q - /*) ~- p7 O( @/ f; e3 l
- * 获取根目录信息
$ u: @6 o* g- b - */; H8 B& Y" L) i3 g6 D/ e
- public static List<RootBean> getDiskInfo(){4 I" C9 q( ], R# q; Q' N
- //获取盘符
_1 y" \8 M8 d6 `; e# U - File []files=File.listRoots();. E5 O5 @: [4 l8 i: a( o! t
- List<RootBean>roots=new ArrayList<RootBean>();# V1 T) Y* `& G d0 Q
- for(File file:files){
. I e' B) O2 Z, i) B# r( F - if(file.getTotalSpace()!=0){
- T% X9 ?3 o- O( J I9 a8 t4 R - RootBean rootBean=new RootBean();
$ D' l+ e' M: O# D2 J! \3 D1 f - rootBean.setDiskPath(file.getAbsolutePath());% `" V# \' R+ Y, x$ Y+ @8 i
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");2 l4 h: W( d; u" n
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
3 N7 }1 g9 ~. A* @, q" A - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
# j2 e! x; o3 r1 L. o( L9 i, p - roots.add(rootBean);
" ^/ b2 l$ ?- ]. d - }' V8 w1 n% A' O Y
- }/ b7 n6 {9 f3 U
- return roots;) ^: u+ B2 E" y! h4 I: `2 |
- }
, s) ]$ `9 h" d a1 c - /*
( r1 p" d \, S3 v( o - * 通过递归得到某一路径下所有的目录及其文件: @0 Z+ e3 l% d7 k" @
- */
3 e( s+ R$ s8 O5 |9 r% ^% e6 u# h- L - public static DirBean getFiles(String dirPath) throws Exception{
" p6 p M7 f1 ]9 R - File root = new File(dirPath);
0 B/ |$ V3 y' Z4 A( ]2 L# T - DirBean dirBean=null;1 M# n+ m/ A4 x& S
- if(root.exists()){
4 Z6 T [) ]' i4 _$ F" a# r# J - dirBean=new DirBean();' i5 C7 h- F6 |) Z& t4 e
- String dirSize="";8 Q, k0 {) t9 v2 M
- int dirCount=0;$ R0 G1 U5 E" J4 _& g
- List<FileBean> filelist=new LinkedList<FileBean>();
' i8 L; q2 o. b" R4 U% ~% p7 W' j - if(root.isDirectory()){
9 y* c) x* V+ E+ M t T+ T - File[] files = root.listFiles();( k' b% {: [3 E' _' ?% t3 A2 L
- for (File file : files) {
% q' S) |4 v2 P$ M - FileBean fileBean=new FileBean();' m" S; V; _0 f- }5 k4 X/ f2 m/ p$ P, {
- String realPath=file.getAbsolutePath();
- i* ?2 h5 V2 W/ F; T7 c - fileBean.setFilePath(realPath);
1 ]( i/ ^+ j* |, U" P3 s% @" P5 n. j - fileBean.setFileName(getFileName(realPath));4 U7 }* @0 e# w; b1 k
- if (file.isDirectory()) {7 \. u& U. o8 w7 b6 h# D. @( |$ Y/ x
- fileBean.setFileType("DIR");
. F9 r. y4 `. I- u1 n! }, q8 f - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
8 Z) ]8 }6 f% [& j9 z8 w& I, t; [ - fileBean.setFileSize("");5 e \% b; r A2 Q
- }else{
. C. J' a- s$ K5 {0 s) F0 l+ }+ v/ Y - fileBean.setFileType(getFileType(getFileName(realPath)));& f( x6 g# e0 v: ~2 `+ y
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
$ H6 e M( H! o% y ^! C - }7 e1 n4 t! [- ]- ?: c
- filelist.add(fileBean);
1 X; _) C# Y( l4 M& E7 }7 l - }
: H' e) F4 t; E h - }else{
, u- Y' \& A% [; r1 R, V6 e - dirSize=FormetFileSize(getFileSizes(root));
% G3 W6 k. ], b: q7 K- M! M - }
: |" I" @( y7 e8 W; ^* r: F5 u - dirBean.setDirCount(dirCount);
6 j! p( U0 N5 I y - dirBean.setDirSize(dirSize);' R' I3 T; @, N
- dirBean.setDirPath(dirPath);
* J* c% v1 o& n - dirBean.setFiles(filelist);( |% p7 C/ C3 l5 X( Z
- }else{ @) d5 y- m2 K) Z) ?8 Q
- System.out.println("文件或文件目录不存在");
n# f2 P+ k9 U4 M& e - } 2 j1 p/ w* }: \4 l( n F, W6 K; H; {
- return dirBean;1 Z0 y+ a4 `- e3 k" N9 @% w; u" F
- }, }) f6 R* {! _ v
- private static String getFileType(String fileName) {
% y+ e7 U) f7 _9 W5 \9 g( {& ~ - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();8 @5 v5 \% _# u4 W M
- }
% n2 S# M, ]! h5 K1 _ - //获取文件名2 m$ I6 `0 u7 ?3 V R
- static String getFileName(String filePath) {
Q( }: H( ]9 ~ S+ K - String [] fileItems=filePath.split("\\\");
& n% o% u# e6 O4 |' Y5 |0 M" c - return fileItems[fileItems.length-1];( ~! P/ c% J- v; w' P- m
- }& Q& a, k3 r0 f I4 j4 n
- //取得文件大小
/ X( U9 S+ q0 {: O0 C1 M - public static long getFileSizes(File f) throws Exception{9 b/ J$ x. \. c1 G3 g5 e( B9 [
- long s=0;5 W2 E; A$ r {% \, u# L0 `: }
- if (f.exists()) {
: H! i7 U0 y$ y; M9 ?* M: u B - FileInputStream fis = null;4 A* \ Z8 @3 E/ b. ?" e
- fis = new FileInputStream(f);5 w w" A, B# k' S9 Y. I8 B
- s= fis.available();, l- A" ?% Z- j( v
- } else {
9 ?7 p: Y6 X7 U6 _1 C! S1 W - System.out.println("文件不存在");
: u; y) _" A- w4 Q& @' {& e - }; g9 m4 P2 X% {* Q F0 v3 f; f" ^& v
- return s;. P- X# i2 P9 b6 ?
- }
' L5 a3 E# p: M; I - //取得文件夹大小
+ r, B# h- h. C Z; v: G - public static long getFileSize(File f)throws Exception
& R+ S2 k( f; y! l6 I" M! | - {9 T3 I5 F) L/ W1 j; U6 Q
- long size = 0;$ v4 t! \/ p6 S+ P( W1 V% A
- File flist[] = f.listFiles();
. q8 z6 q" z1 b3 D - for (int i = 0; i < flist.length; i++)
* _) |# h/ [5 A" E; i7 L - {3 _6 S9 C- z# s& N, o+ ^2 F: ~# z
- if (flist[i].isDirectory())8 k2 r) {& z& l% F) n E
- {
" c4 b3 [" o+ {, q ^- ?8 V - size = size + getFileSize(flist[i]);
4 G, [' J% ~) ?( |7 N - } else+ K/ y r/ s" u
- { L, B& P, A8 `- G( z+ P
- size = size + flist[i].length();
& c, C( E, y2 ~2 M; K- b3 V4 k - }# E) N% {0 e+ U, r$ d! q
- }% ?# \+ l, ~, h2 h% t; @( p, W
- return size;. s( a) M9 U v9 p0 y. M8 f
- }$ C8 R1 ^0 r( q# g
- public static String FormetFileSize(long fileS) {//转换文件大小4 G- v0 m; R3 |
- DecimalFormat df = new DecimalFormat("#.00");
$ g5 b8 }9 T& J& c4 p3 L! s - String fileSizeString = "";
: l. E, { c7 G4 o) {, D4 ^& J4 ^ - if (fileS < 1024) {
! v+ P' k$ }' n - fileSizeString = df.format((double) fileS) + "B";1 t# x6 b# q; Y: ^
- } else if (fileS < 1048576) {; X4 x; F3 |0 u9 U/ K
- fileSizeString = df.format((double) fileS / 1024) + "KB";6 H9 }1 q% k) F/ j7 k7 O
- } else if (fileS < 1073741824) {
4 C8 p! \! u+ h7 v7 M - fileSizeString = df.format((double) fileS / 1048576) + "M";
* U6 e% {0 T" l; C$ ^ - } else {9 t4 l. R+ f- K/ Q# Y1 Q% m
- fileSizeString = df.format((double) fileS / 1073741824) + "G";
% a6 o2 `, u. K' d' O3 L" r$ w - }/ n. I! w7 V, \4 T) l2 L8 K3 H
- return fileSizeString;
5 m2 ?5 I. ~6 j" w- x% q& y - }) v& r% \# `; B/ b. ]
- 5 c7 a6 d- |* q6 d3 a
- public static long getlist(File f){//递归求取目录文件个数
, V8 x R. H6 K! l4 b - long size = 0;
" a, s8 w0 c3 t: A, B! r - File flist[] = f.listFiles();+ a$ a8 h+ f) A4 ^
- size=flist.length;2 T W7 h- K9 P5 z! S$ a
- for (int i = 0; i < flist.length; i++) {4 h5 j1 }) k1 V8 ~3 ~+ ~
- if (flist[i].isDirectory()) {
* Y* W+ o, m! h4 a0 w. |6 c: ^; o - size = size + getlist(flist[i]);
& n, l- _4 b) W4 J; T& U* w. T - size--;
( w1 K" z, N# @+ \& G) |( S - }
0 m: W0 {8 c' ]) x( r. }1 l- E - }1 B* i0 o- t1 U5 L% }. t. J6 F
- return size;. ~9 Q m, a( y
- 1 y \. @8 j' F& I# s' Y7 b
- }- A- I; i6 ]5 K( ~7 l# O" O
- }
复制代码
) P% X! b& L+ H7 S3 C) hJavaWeb实现显示本地文件目录项目源码解压码:
1 j$ U, }4 _3 y' Q4 \- I$ D, M
7 @# _8 _. R: V4 i7 @$ Q% V 5 L! L$ t7 r! h5 g/ U
|
|