该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 # C! F* ]7 `5 p7 J e a
; Y! a/ x$ e: p6 k ( c$ G5 D" c) O U( p4 [3 Q
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
& X& C( ^5 X5 N& x
! ]' l* ^% x9 \& R" N- import java.io.File;' h# @+ S& A4 ?) I+ I4 D
- import java.io.FileInputStream;
! H' M D0 { y1 t - import java.text.DecimalFormat;8 B; D: j3 T: f. ~( F! y2 X
- import java.util.ArrayList;
. r! k/ p; ~% B# q. @2 _ - import java.util.LinkedList;3 G8 p+ H q \! K8 C# n3 L( y
- import java.util.List;! R" n8 r5 u% i# ?7 @9 Y
- ) U: B9 q9 B2 z3 I) e4 Z4 N
- import com.uudisk.domain.DirBean;) `2 Q7 Y, q8 q e s: E7 y3 Y+ _3 V
- import com.uudisk.domain.FileBean;3 Q0 d& S8 m/ v* r4 N4 t, M6 Q
- import com.uudisk.domain.RootBean;: S+ Z* }8 C7 F" K2 M4 ?
- % J9 A: b" s% N. @0 ?; Q$ R
- public class IterateDir {1 e% q L3 B6 Y3 c& S$ ?% B) f
- /*
" ?; i- U8 F6 G; U* P - * 获取根目录信息
( K' ~, X2 N& M, o7 X7 W( x+ i - */
3 e7 U4 j1 b2 M! |4 ]4 p& x - public static List<RootBean> getDiskInfo(){
7 P0 ^; ]8 T- X% T$ g( @ - //获取盘符
# X- A+ ~) _" ~* h7 P" ] - File []files=File.listRoots();+ r7 n9 E1 _) M# R" q
- List<RootBean>roots=new ArrayList<RootBean>();# x% s6 _( G9 m5 @
- for(File file:files){
# B+ {0 w/ p6 X - if(file.getTotalSpace()!=0){
" J9 j! v1 b9 C# N - RootBean rootBean=new RootBean();
2 A# {$ T% M; y5 e) U9 g - rootBean.setDiskPath(file.getAbsolutePath());
) D; C9 C+ T' P' i. D - rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");* g9 y! C* f0 n4 p9 D1 K: w8 ~
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
, Z w( L, I5 _6 D' X - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));% _$ ^3 s1 F/ z
- roots.add(rootBean);
) O% G7 O8 Z8 j9 I. c( Q9 j. ? - }
0 O+ z7 |& Q! I# J8 f5 N/ y - }
" U& h( U& J7 a, u - return roots;9 c) [" B* w5 y) |# R# q- T/ S' D
- }" _ {: t; z1 M" G* T- n
- /*. V( }; f) u }% K- b: A, Q! p% q
- * 通过递归得到某一路径下所有的目录及其文件
5 O% c% S$ g$ @! H8 Q+ a; a( Q - */5 I* B* U2 h: [/ b8 m$ o
- public static DirBean getFiles(String dirPath) throws Exception{
7 d; n4 C! |& [# G/ @ - File root = new File(dirPath);
0 d& ]' I" L& b3 R. y) J0 c# A/ i - DirBean dirBean=null;7 ?+ O# D$ o8 L- y* r8 l% X
- if(root.exists()){
$ ?+ E- A: T% ~. m* r# `/ L - dirBean=new DirBean();& o) S2 G- K# n+ j/ P4 P% w
- String dirSize="";
5 H7 D& J8 x* P/ d6 Y" P$ ~ - int dirCount=0;
! Q1 w+ Z/ _) c9 [# ^$ n) s - List<FileBean> filelist=new LinkedList<FileBean>();
B7 S! ~! H: ~% f) K - if(root.isDirectory()){0 ~0 y) v4 u' @: m( R% i
- File[] files = root.listFiles();, Q1 t+ u; x+ c: e
- for (File file : files) {
, R, U+ g; d+ X4 P) Q/ }8 E* u - FileBean fileBean=new FileBean();
! \9 v, I, D7 R7 ]* Q$ G - String realPath=file.getAbsolutePath();
+ D' Z4 J0 j6 J( q - fileBean.setFilePath(realPath);
- E2 y1 H* V: P - fileBean.setFileName(getFileName(realPath));# l# {# B' `9 I: s/ @; Y0 u
- if (file.isDirectory()) {
0 g$ @2 S( S- ]" o - fileBean.setFileType("DIR");
$ \! S6 U4 ]. X - //fileBean.setFileSize(FormetFileSize(getFileSize(file))); g- x0 h0 I4 H% g
- fileBean.setFileSize("");
" N1 p* M6 o; p! ^4 j - }else{
( N) {* S$ k& H - fileBean.setFileType(getFileType(getFileName(realPath)));4 p9 p4 y X3 H6 d& R
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));+ ~/ Q4 c$ _) n. W6 q/ }4 X# x
- }1 [2 s4 {4 | u* m9 D- l$ y2 X6 D
- filelist.add(fileBean);
$ k# g3 }( @8 g - }, z1 f2 ?$ S* c7 B, {& E8 W
- }else{- P" i$ _! ?- l: b: K
- dirSize=FormetFileSize(getFileSizes(root));
1 b+ p% ]# v$ ~! H2 Q - }* K; e# J, p6 {$ J
- dirBean.setDirCount(dirCount);4 X' ^' N7 G. Z, [. v
- dirBean.setDirSize(dirSize);
9 m4 A; z" d3 k! N0 k5 d J - dirBean.setDirPath(dirPath);# i5 @' P5 f+ {2 R
- dirBean.setFiles(filelist);) Q- s3 I; o( }6 H- o, e$ W5 K
- }else{$ ?4 P+ W$ ^9 `" A
- System.out.println("文件或文件目录不存在");
) F& D6 b) N' _7 y& } - } 5 k. K3 {/ t" g5 M! `3 [
- return dirBean;
5 ]. u4 E1 W0 f& B9 f. ^ - }
, N8 S( r' W7 L% R$ o - private static String getFileType(String fileName) {
. v; C0 t+ @2 I# p/ f& p2 z - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();8 N/ R4 L8 h' n, M
- }
! Z ~5 e; h$ S* o2 s# u - //获取文件名+ z6 M& S4 N: T
- static String getFileName(String filePath) {
) [! ~0 ]* `4 L% {; l1 A - String [] fileItems=filePath.split("\\\");
: [! o, x9 K$ k" B - return fileItems[fileItems.length-1];9 G2 o/ _ Q5 H4 W* Z! D# }
- }' \1 T$ l" q" O' ]* J5 Q
- //取得文件大小' P }2 e8 }8 v( @' d3 G
- public static long getFileSizes(File f) throws Exception{
6 ]. Q& v2 [- X - long s=0;
0 T5 G% F0 H5 }) t$ f1 Z# W; s. z - if (f.exists()) {
, o7 l# S+ n8 g+ F - FileInputStream fis = null;
# @3 I+ X$ k# }; u. d - fis = new FileInputStream(f);/ m' ~2 J9 O5 Q1 ^
- s= fis.available();# [& M8 S4 [% V" Q5 N v* Q
- } else {! ^6 N7 d3 t% V
- System.out.println("文件不存在");1 p( S: R/ s1 R, M8 K' C
- }$ H4 |! ~2 }; |" M4 `6 v1 `# t0 [6 Z
- return s;
( F. t/ ?$ t* R - }
8 ]* v2 P6 s0 \) Z0 j5 F - //取得文件夹大小! Q8 d) z" k7 f2 u
- public static long getFileSize(File f)throws Exception
. f3 e2 }' T! S, f5 s - {: Q9 S; D3 u q% A) H9 q2 p+ e3 k+ q' o
- long size = 0;
$ H- N: L/ r% F- ^6 K' Z - File flist[] = f.listFiles();4 x* T. u* S) ~$ \
- for (int i = 0; i < flist.length; i++)
2 p( U k/ U+ ?% ]9 Y - {
; o! F- ]7 e+ `* B: | - if (flist[i].isDirectory())
$ z9 h2 h3 I! i5 R - {
- ]/ j: z4 N' m - size = size + getFileSize(flist[i]);
$ ^6 ?/ B- ]+ A' @% u - } else9 Z+ q( U" r* N
- {
( O, Y( A, M K: C; W# K - size = size + flist[i].length();
. s& ? Z4 t- K% x* _" b; z - }& i+ T& q6 B9 B- E4 u" y
- }) n! d F9 b* |% g
- return size;' a. Q4 d ]! R- y8 c- z
- }
, u. J/ t' R5 n" q - public static String FormetFileSize(long fileS) {//转换文件大小
6 u: F4 j% |0 _1 @ - DecimalFormat df = new DecimalFormat("#.00");
4 v$ ~3 X+ Q% n) M) S6 r @ - String fileSizeString = "";/ g& c7 v3 s5 g9 q
- if (fileS < 1024) {
. s( N4 M0 K6 F; i( V# C - fileSizeString = df.format((double) fileS) + "B";7 g# ]1 J5 K4 o" E3 n
- } else if (fileS < 1048576) {
3 [! G0 R( d6 P* y - fileSizeString = df.format((double) fileS / 1024) + "KB";9 g J' |6 W$ \
- } else if (fileS < 1073741824) {
0 E/ _/ C4 U0 V. N/ m- d" O) t5 D1 b( ` - fileSizeString = df.format((double) fileS / 1048576) + "M";
: I' Y" U7 q; M0 v - } else {
# d( X4 x7 f; P0 l, ?4 T" q* I) ` - fileSizeString = df.format((double) fileS / 1073741824) + "G";+ H' e w1 u% ^2 `& y' t! B
- }
. [+ h' \8 q1 n' S0 u. ? - return fileSizeString;3 @2 }: p) k5 r" d! X& e4 [/ P
- }4 h3 v) S/ o+ @9 |! T
- 5 V4 h6 O2 U0 z2 L& Z4 x
- public static long getlist(File f){//递归求取目录文件个数
- ~6 |7 h/ B. N( a) X - long size = 0;1 j/ h6 L# W+ t& Z; ?4 C9 }
- File flist[] = f.listFiles();5 X6 K$ W1 `" X, m/ K" G4 u
- size=flist.length;7 e# O) c6 U, C. M7 v
- for (int i = 0; i < flist.length; i++) {
6 w* z) ^1 H& Q0 @4 Y9 A7 g - if (flist[i].isDirectory()) {
' Z! i g# l" b5 i! n1 s. T' ?. f - size = size + getlist(flist[i]);
( G) F9 T3 k2 E7 x8 ^ - size--;
' y i8 |& r' B7 b4 E - }- W7 }. o0 d0 |
- }+ G8 X% _' C4 |& } G4 D; z
- return size;
! B) c+ g: F `9 L7 }4 Z! J - & _0 Y. z* E# U+ l* }6 g
- }
2 B: E+ @2 Y! ?4 R - }
复制代码
5 ^1 r P& e d% a3 c+ p4 eJavaWeb实现显示本地文件目录项目源码解压码: . i# w0 p9 K( A5 e N6 h! l% R
1 u: x8 R3 d1 }: }
+ m+ ?% Z( f9 D! P- P' |/ U0 C |
|