该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
/ |' ^4 p b z" o
, I( F, Q' I1 T8 C( y5 E
: [' s. S/ _) r1 l. h! k/ [ 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;1 W: Y9 u4 O* ~
- , z! u/ h. D4 g2 A. n
- import java.io.File;
. W0 b2 \8 k% k# @. i' _' D - import java.io.FileInputStream;
' Q* j4 g. e4 T+ {8 K - import java.text.DecimalFormat; Q* U- F7 c+ p& n. ?' g# d# x0 ~
- import java.util.ArrayList;
% A( ^1 W Z% x - import java.util.LinkedList;: u( U! u" E& g8 v0 N8 b: D2 S
- import java.util.List;
8 Q# I- T/ g. F5 o2 j - $ J# f, C [) e
- import com.uudisk.domain.DirBean;' q6 [9 X) Q- c0 E
- import com.uudisk.domain.FileBean;
: g# \5 z* e6 |, {+ K% c! d. l - import com.uudisk.domain.RootBean;
( l6 H; ~8 U, C) O - 2 n5 l1 S8 ]# A4 z* `
- public class IterateDir {
$ v% V1 K \6 E2 z5 ? - /*
$ g3 u3 R6 T/ f - * 获取根目录信息
' h0 A/ w5 R- ?+ l - */
2 o. P* N( F5 t, n3 P- ?* m/ N - public static List<RootBean> getDiskInfo(){
! A/ z$ i, s% z6 @5 K. P) _ - //获取盘符' X& ] M2 U! ]
- File []files=File.listRoots(); W! a" I) A( H
- List<RootBean>roots=new ArrayList<RootBean>(); {3 p: I1 G8 n1 \* k/ ]
- for(File file:files){% H, l# {% k- f; a9 C- O6 T& o: m
- if(file.getTotalSpace()!=0){ @; }+ Z1 A8 S% ~: J7 W
- RootBean rootBean=new RootBean();3 S G. I$ V7 c& ]: ~( e! A
- rootBean.setDiskPath(file.getAbsolutePath());8 N- Q4 x2 D) h6 C- r
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");
& ~/ G+ u) w7 z) { - rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
Z4 j! `; b6 o0 z - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));, C: {+ @7 L) P+ @ Z" G4 g
- roots.add(rootBean); b& J/ c4 w3 j; C
- }
4 w; P3 ?1 D5 h# N) t) v - }* W+ U! u: i3 R" [" G# G5 @
- return roots;3 V- n @' {6 O. x( L0 x% l' s
- }
9 j% X) d1 @3 M8 f0 R - /*
9 D% Y2 ~- @/ B - * 通过递归得到某一路径下所有的目录及其文件3 J" C# w; \6 q& x
- */' q2 R3 x( I; m
- public static DirBean getFiles(String dirPath) throws Exception{+ M# B! `3 i- u s
- File root = new File(dirPath);" U2 l$ T! f6 \0 e6 a; |: Z
- DirBean dirBean=null;" t* o D8 a# R5 @. e( Q
- if(root.exists()){
5 Q; k9 f8 K6 o+ X/ F1 _2 R - dirBean=new DirBean();: a3 [" k! b+ J' |5 Q1 z' K
- String dirSize="";5 o2 W' s$ H) a5 n9 k3 a
- int dirCount=0;3 m$ t% G* t3 K
- List<FileBean> filelist=new LinkedList<FileBean>();
' W) v' R' K" f' R' c - if(root.isDirectory()){- B5 j& Y* t- ]" Q, p8 F
- File[] files = root.listFiles();* J" |' X0 l, ^: W, S! j
- for (File file : files) {
& M. I6 _7 P, m% R1 Y0 I - FileBean fileBean=new FileBean();
# p+ X! d* i2 M1 A" b. d - String realPath=file.getAbsolutePath();8 k9 z, S( {& |$ K$ K( v& F
- fileBean.setFilePath(realPath);" Y5 C0 k( S9 A
- fileBean.setFileName(getFileName(realPath));0 a) x/ w! Q. W; t6 z$ c% Q
- if (file.isDirectory()) {
1 j8 B! K3 b5 g. J4 J - fileBean.setFileType("DIR");
" _# A, B& z' a" u5 x7 j - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
. D: f( d" m; i* r - fileBean.setFileSize("");1 i+ a. S% R7 o1 j) Y7 }+ g
- }else{
$ D' d8 y( V7 l4 f1 i2 O - fileBean.setFileType(getFileType(getFileName(realPath)));
/ F7 z+ H% A. C0 K/ m( S2 u2 q X - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
+ E' o1 h+ a0 t l& d - }
7 ]% g# R$ q: X0 J! ?) F# B - filelist.add(fileBean);7 ]" M6 @/ P+ i2 V) a% o1 O
- }
$ z K! o \" [- w1 m0 g - }else{" \8 w; {8 D7 K8 O
- dirSize=FormetFileSize(getFileSizes(root));
+ C$ A2 C$ ]) n1 C5 [ - }' ~9 R( a4 `, ^* `
- dirBean.setDirCount(dirCount);
, i3 }. G/ q. i6 J( X q# x; i+ f# n - dirBean.setDirSize(dirSize);
( Q1 L. v; P0 w1 z0 b7 |6 w - dirBean.setDirPath(dirPath);2 I2 }3 d( W* R0 p- ]. ]
- dirBean.setFiles(filelist);0 E) M3 Z+ `* H; Z; o
- }else{ ^8 s/ R$ Q1 s2 Q" f
- System.out.println("文件或文件目录不存在");4 O- u, U& ~* p4 C& |/ O" m* Y* H e
- }
" x! T: ^* \! G! ^( v - return dirBean;( z1 P! @! l; Z9 [) [* R3 S
- }
3 t$ x7 q* m( {2 ~ - private static String getFileType(String fileName) {# a$ @1 p( a# f& R
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();$ @; l* m; X& ]% x; A+ l8 u
- }8 s: E3 K r9 ?! m& c6 q
- //获取文件名 T) N4 A! x$ D
- static String getFileName(String filePath) {# a; m% z$ ]8 W' d& `0 u6 @6 e" f
- String [] fileItems=filePath.split("\\\");2 n7 A4 {6 i0 A4 C! y4 s
- return fileItems[fileItems.length-1];) ^% e4 Q$ d4 {8 }( @% {2 N
- }& `3 f n! F& _5 c* I/ Q7 x
- //取得文件大小
- D) b+ u8 q! k. d1 ~; j5 } - public static long getFileSizes(File f) throws Exception{
8 v0 c, X* n, K, F$ W4 N: n7 o3 z - long s=0;
2 C5 _' ?0 I# B7 i1 K6 A | - if (f.exists()) {
" q7 G* L! r- m4 `! [; u4 H - FileInputStream fis = null;
( y: e9 h) v U& t4 |, L$ d5 ^& M - fis = new FileInputStream(f);# R8 v) g2 N3 C$ _
- s= fis.available();% e7 j; y! u! E1 s2 H
- } else {
8 _; b7 w( O5 X2 z# v1 E - System.out.println("文件不存在");
; E/ [) V( ~9 ]# Z - }
% x- u8 c6 ]9 A4 w" y - return s;
; E; B6 V& h4 N - }
7 y* j+ \2 s" s4 Q% q4 Q - //取得文件夹大小" |4 ^. a7 k# [, E' k" M$ G* n; C8 u
- public static long getFileSize(File f)throws Exception
* z0 g& g/ [) n - {
: v% ?- k5 H9 S. H! h: T9 n! f - long size = 0;
" p4 s1 f X) @( o. { - File flist[] = f.listFiles();
8 w! {* f$ @/ w; S6 g2 U - for (int i = 0; i < flist.length; i++)
% h6 b. F- H7 [; C$ L6 _ - {
2 ]! }# a4 Y' c - if (flist[i].isDirectory())( X+ t5 X2 s9 ?4 O( D" R4 D; X
- {
$ S/ o* @) D; U) _( G" x& w/ V - size = size + getFileSize(flist[i]);
+ I6 H+ l+ p3 F5 Q - } else( A0 k. ^0 t+ G4 d; L
- {5 p2 B/ q2 W8 P
- size = size + flist[i].length();- X7 h3 @) M2 y/ f0 p
- }
4 }1 I& s2 ]& m% c$ ` - }
0 a' u9 ~; E: s7 R( w7 g - return size;- B4 Y2 `& O2 t* x/ |
- }
4 v _6 T5 m8 U9 Y! P* ` - public static String FormetFileSize(long fileS) {//转换文件大小
1 E+ ^( F) A& p$ h8 T @" X; | - DecimalFormat df = new DecimalFormat("#.00");# s6 S0 }/ r; `/ H$ K, A
- String fileSizeString = "";$ F K& A8 @. t: ]2 f S2 d3 J
- if (fileS < 1024) {& w! s1 D& X2 P( v# D) O
- fileSizeString = df.format((double) fileS) + "B";( w, `; Q2 @) g* N
- } else if (fileS < 1048576) {
" G# x& O3 b* r, G% \ - fileSizeString = df.format((double) fileS / 1024) + "KB";
' u: z. ]4 Q( \( s/ g - } else if (fileS < 1073741824) {
3 t0 t! ^5 Y( @/ ~4 | - fileSizeString = df.format((double) fileS / 1048576) + "M";
7 A0 a. a+ ]- Y, q - } else {
_, f) F7 f( ^0 ~ - fileSizeString = df.format((double) fileS / 1073741824) + "G";
3 Q5 m% N+ D* r: E/ X' j4 h - }% B5 u- y$ K$ f4 w' Q: u
- return fileSizeString;
+ n. s! n( E+ q' c - }
$ g0 y, V$ e. m - % s+ p/ {; K4 r8 C# T
- public static long getlist(File f){//递归求取目录文件个数/ z8 V( E ^3 }( _3 F% D
- long size = 0;
. j8 i9 u' ~: C9 X8 y+ p - File flist[] = f.listFiles();7 w# C- R0 x/ L. }0 b3 S4 Z
- size=flist.length;
0 i, }7 T" h) M* h - for (int i = 0; i < flist.length; i++) {
& J$ F/ q+ k* ^ D! a* p4 A - if (flist[i].isDirectory()) {
8 \, r4 s6 {/ t9 K - size = size + getlist(flist[i]);* s1 O; q2 R! Y
- size--;
# m; p$ s7 U9 } - }
7 u1 ]. i5 [) \ - }
# N" ]& u, p7 {1 z$ l6 B; } - return size;
4 Q+ t" ?: [% X2 S; g! r - * u9 [& l4 J% ?$ N0 C# m0 o
- }
; q3 L7 A4 R8 ]) t - }
复制代码
- C: J E# c" D3 X% k, H( mJavaWeb实现显示本地文件目录项目源码解压码: 9 j6 s$ E) z3 G8 z& i' L
% N: y; P) e& Y( h
8 \& M4 C! ^: P5 v5 I" p- \! V, e |
|