该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
& h. M$ U8 Q4 c3 o3 Y$ C
5 v6 q Q" {3 n& c7 s* w; X
5 t! W7 q1 I; F2 _+ ^' X5 [7 G' R8 d 工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
V }3 |3 Q( a/ u1 p - " }) x: U& Z' n7 T7 W6 n2 o& I7 \* S* N
- import java.io.File;* z% F; n }& p+ N# H6 M
- import java.io.FileInputStream;2 Y8 Y) J. q! ^+ B
- import java.text.DecimalFormat;5 b% {. k* e& m8 ^
- import java.util.ArrayList;
" G6 h2 v. p# L - import java.util.LinkedList;
/ N( u# t7 z2 ^; z - import java.util.List;+ i; [# M6 x5 v# r: b" H. f$ H
7 E9 o/ p+ @$ I( Z8 l9 v0 ^- import com.uudisk.domain.DirBean;
3 F3 N* q" U+ k% S3 T: H! e - import com.uudisk.domain.FileBean;
' d- g( Q% H* j/ j$ A - import com.uudisk.domain.RootBean;
! Y. N/ H) e1 a- |7 c - " V( b8 p! U( r% c. U: y5 r
- public class IterateDir {
0 k3 c& o- U# v( K. O - /*
6 m3 `$ c }8 K - * 获取根目录信息3 D: }& `! w5 E2 t% o' ^
- */$ `% S- C! ~) K/ }3 C1 ?
- public static List<RootBean> getDiskInfo(){7 \8 z" c0 R$ U" l
- //获取盘符
+ p- i/ p. Z# m$ O8 e2 }0 p: M$ z - File []files=File.listRoots();- v" l6 N1 A/ F$ W9 Y9 K! |! Q
- List<RootBean>roots=new ArrayList<RootBean>();0 L. g& G% {- Z- @4 c6 c; T% u3 |
- for(File file:files){3 I4 [' K& m! i
- if(file.getTotalSpace()!=0){; I5 X- T: {& t& @' k/ o
- RootBean rootBean=new RootBean();
2 k6 W+ |9 }! D$ ~ - rootBean.setDiskPath(file.getAbsolutePath());1 E( @/ R) b$ u
- rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");
# F6 ?+ X4 {0 F/ W9 {& F+ ~5 Y - rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
# c. }2 x+ H# s/ p. a - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
( A7 _( j4 S' M, T7 n - roots.add(rootBean);0 `" s; W+ {4 [- r
- }
9 L V5 T. X$ i+ ^ l7 S! c3 s, y1 m7 A - }
+ ?' Q4 G3 q m) O* U+ ]+ v - return roots;
" e. q; F4 V& r" J7 [ - }& R3 K0 F! e+ H7 C
- /*
1 g2 k! Y }: W& s6 K - * 通过递归得到某一路径下所有的目录及其文件3 y& p( t* f7 f- K2 S% L4 r
- */' A+ y9 T! Q9 F. C4 J8 f7 c
- public static DirBean getFiles(String dirPath) throws Exception{
+ h/ q% n. k$ @, P - File root = new File(dirPath);4 A A& I5 A+ o$ T* s
- DirBean dirBean=null;
8 l% ~" \* D" U5 q3 R, X% `+ l - if(root.exists()){, P9 x- u3 m1 ]% F- ~2 z' @# H
- dirBean=new DirBean();
0 K7 D6 }; k0 S, ~; Z: b - String dirSize="";* m7 ?, ~& O* J; y: `6 e
- int dirCount=0;; R/ ^; W# ^( E6 M4 W+ U. d2 A9 O3 q
- List<FileBean> filelist=new LinkedList<FileBean>();
; r; ~ A* ]) ?3 S+ Z - if(root.isDirectory()){
5 `$ E5 ]$ U p, }5 @( X - File[] files = root.listFiles();
8 Z9 Q/ ]1 Q3 v$ h }! ~$ p& b% R) i: q - for (File file : files) {
5 L) W4 X! U. p& ?, ^. |# ~ - FileBean fileBean=new FileBean();
0 t3 _: P0 g z7 |# h# [ l: a - String realPath=file.getAbsolutePath();% @- H1 G7 L3 g W1 G" P6 x% p
- fileBean.setFilePath(realPath);2 |5 _, u/ r1 {) `. Q* [! I! L
- fileBean.setFileName(getFileName(realPath));; _. W( c# ^; b M {
- if (file.isDirectory()) {' g8 j8 P% G" e9 ^* }# w3 G3 z
- fileBean.setFileType("DIR");9 S$ L6 B. w6 W+ ~
- //fileBean.setFileSize(FormetFileSize(getFileSize(file)));+ L4 F+ W- X% O( a9 h; k. N+ O
- fileBean.setFileSize("");
5 \& Q2 z. \% g5 H6 a$ X - }else{8 g6 h! s7 k2 X; L
- fileBean.setFileType(getFileType(getFileName(realPath)));
3 q: P. n8 ~% @! I, w: ` - fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
, F8 ]) c+ H/ t - }
4 ?6 q. ?. D" c1 Z# I - filelist.add(fileBean);
* t7 G8 O) O% q" V: ~" { - }# R& \9 |& W' j$ y. A# O
- }else{
/ O8 [( c+ j' ] - dirSize=FormetFileSize(getFileSizes(root)); i) U, ~6 f/ t- g3 n7 w
- }5 g4 O6 _+ I+ ^& @5 Z+ W$ c
- dirBean.setDirCount(dirCount);
9 H' m) w: x4 [7 q- o - dirBean.setDirSize(dirSize);
% f; g3 D$ P5 N/ n+ d5 P: p: z: ^+ T - dirBean.setDirPath(dirPath);
9 G$ Y$ z5 _" c* Z1 N8 p - dirBean.setFiles(filelist);
( \; ?( Q8 r' u" Y- y - }else{
( x- a/ _' ~9 E - System.out.println("文件或文件目录不存在");7 L! `8 S z6 C8 _" m) q U6 L. k
- } 0 N9 q. u* m4 C- {. y( v7 O
- return dirBean;
/ e6 A9 g9 `- y7 h - }
" {% c$ x0 ]. z# D - private static String getFileType(String fileName) {/ W- s* R/ F7 {1 U8 w, J4 c
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
4 s2 ^/ @& Y4 r7 |( C - }0 t! _0 y& b) X
- //获取文件名0 i4 h; y8 g4 r: ?% Z v" e0 F
- static String getFileName(String filePath) {
3 t1 Z1 {/ z6 C7 P - String [] fileItems=filePath.split("\\\");
% d& S! _7 J8 m - return fileItems[fileItems.length-1];
1 G7 V- F0 i i$ R, t - }9 { B) j$ h9 {( J
- //取得文件大小: R" R' x4 r3 [6 o: M
- public static long getFileSizes(File f) throws Exception{/ g& Y" e8 m6 a- V4 w o
- long s=0;" ?& U7 ^; K+ f+ ]$ E
- if (f.exists()) {) ~' O" A( M2 P( b2 [
- FileInputStream fis = null; j/ |' a: P- B" x0 n
- fis = new FileInputStream(f);) s0 R3 {$ y% Q0 j6 e; i
- s= fis.available();( {8 g. Q% ^* x* \" S4 V
- } else {
! G! U& K& ], L: C- O$ j3 D5 ?" n4 | - System.out.println("文件不存在");
6 o5 Y2 j7 F4 b5 Q& b8 H$ p2 U - }" j' L5 h W5 I
- return s;
0 v& Y0 K/ T3 g7 E7 w - }% B1 v4 C G. s, V: W5 q& Z
- //取得文件夹大小
9 g/ a7 i; c; L- z6 f. B - public static long getFileSize(File f)throws Exception1 ], Q7 G* i. f3 C3 K$ A
- {
! t! z- I& p- a N) @ - long size = 0;
G7 ^, O" p4 F/ W) d; V. ^ - File flist[] = f.listFiles();
0 d$ |: _$ P2 f; U6 d, ` - for (int i = 0; i < flist.length; i++)5 \* e; l0 K! _8 h& u
- {- Y; f3 J) ~ p& t# I1 @
- if (flist[i].isDirectory()). L" E! O( c8 ~# F
- {2 J1 F% _4 @& E0 h% _ d
- size = size + getFileSize(flist[i]);
& Z2 \ z2 N0 C0 X - } else1 h; ^: y& g6 r( G* E( K! v0 f
- {- N6 |: k& G0 D; m3 M* _
- size = size + flist[i].length();) V* p: x! C+ n) p/ X: `
- }
$ ?5 v, w. S9 { - }: T1 |- ?- q* S' P5 \
- return size;
2 [$ [) s3 X0 j5 ]0 A - }7 M2 R7 O) k) [
- public static String FormetFileSize(long fileS) {//转换文件大小+ h! n2 D1 p: K& w! n
- DecimalFormat df = new DecimalFormat("#.00");
7 V$ V$ H' k* D0 H# O0 q- m# ~ - String fileSizeString = "";) t! O2 Y7 w5 R1 p* W* V# U* R
- if (fileS < 1024) {+ |! ^& Z; S+ J
- fileSizeString = df.format((double) fileS) + "B";
& o9 I3 z* K. o% {, M% e" | - } else if (fileS < 1048576) {% B3 |3 h# |- [5 K) f n1 K
- fileSizeString = df.format((double) fileS / 1024) + "KB";# Y. t' a0 I4 X, l% v# s
- } else if (fileS < 1073741824) {
0 j7 Q! x" V$ B" [5 T# H; q - fileSizeString = df.format((double) fileS / 1048576) + "M";; L4 w- C# O- {7 F3 r7 g B! D
- } else {' F, t6 B! X/ M% H
- fileSizeString = df.format((double) fileS / 1073741824) + "G";0 L& ~ K1 }" ?+ K7 d
- }
9 t7 @, M7 `8 S) ~+ Q' _ - return fileSizeString;; L6 f% i7 C0 |% F# `* P
- }$ S) \# K5 h/ t
- ( ^3 ^0 S/ p2 ^& @8 ]- M. r% O
- public static long getlist(File f){//递归求取目录文件个数
- l* f8 P# E. g4 p1 l - long size = 0;
. ?5 q& I9 F7 X8 n1 K - File flist[] = f.listFiles();# M8 N; G( y) Y6 y
- size=flist.length;( \- C$ e& m8 W3 x+ ~8 ?. O( @
- for (int i = 0; i < flist.length; i++) {+ b. K: R9 Z! { F3 o$ S
- if (flist[i].isDirectory()) {
- L4 {% n5 h4 S' m - size = size + getlist(flist[i]);
; U! p3 i- K0 A" _) j$ Z - size--;' U! \0 b3 T/ Q$ N' r6 M5 a
- }3 B* W& H' a2 P3 y- G( U$ i
- }
8 b: K" J" U2 h( C( R - return size;6 I m5 S5 \9 c2 n# Z& D& @
& H9 t9 H: d5 T: Z- }5 @8 W& I p0 T- ?
- }
复制代码
2 x4 k R0 u" ~JavaWeb实现显示本地文件目录项目源码解压码:
* Y1 M8 w( _! ?6 o& b. B8 i; {9 F. R/ P& G! @; J
: ^2 G& u: L: z0 Q; z( v. d |
|