该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 ; L( }" [2 d. b" m8 K
; N0 i$ j$ G ~, i$ ^
3 J% E& V" i' ~. m
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
2 B3 h# ? ]6 w4 E- L/ R) b3 k6 m
# L# ?5 Z* x7 @7 Q. |) o8 \" ]: Q- import java.io.File;& t) r1 w) l4 {# W* ]* F5 ^. z; R6 I
- import java.io.FileInputStream;8 v7 Q( I- ~ }# I8 {+ }2 |
- import java.text.DecimalFormat;! T. T: y& x& x1 {) {
- import java.util.ArrayList;9 w; ~5 a0 T9 _# M' ?9 B u
- import java.util.LinkedList;
- B8 k& G5 d2 q0 _ - import java.util.List;
( d. ^- B u! w- @& x
2 \) ?0 k3 R" F5 x! C4 n- import com.uudisk.domain.DirBean;
5 A$ P; C6 F3 H. x - import com.uudisk.domain.FileBean;$ K' A" H( Y- ]
- import com.uudisk.domain.RootBean;
; K7 ^! E: x; H3 N
/ j8 z8 |6 y' V2 w F- public class IterateDir {: w n& C$ b |6 S ^0 z/ c; c# T
- /*
7 I9 N8 m8 l9 o - * 获取根目录信息 X) z: {7 O1 j5 V: F
- */3 V/ j K n# c
- public static List<RootBean> getDiskInfo(){
/ @" ^5 \: a; x! h5 k# L( K# h4 X' I - //获取盘符) q+ g5 e5 |, C2 x; ?( _
- File []files=File.listRoots();5 T& j. ?4 D" n, ?* [
- List<RootBean>roots=new ArrayList<RootBean>(); g8 Q, p. v. c9 E) G
- for(File file:files){
( L( e& b+ a7 N- w+ }3 h - if(file.getTotalSpace()!=0){
! Q$ _6 {3 ]8 K4 { - RootBean rootBean=new RootBean();
, J& K2 @4 D3 T4 F8 R2 d$ ^ - rootBean.setDiskPath(file.getAbsolutePath());
8 }* L$ A: {# w1 g - rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");8 I7 x# C' Y" |
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
* S f% p) K- d- w i - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));
" e. @/ v6 J4 w; x# V* H - roots.add(rootBean);7 Y8 T2 O& q: |
- }
; T4 Z& Z9 {, a- c: Y2 Z - }
6 h# l1 g0 |0 r2 Z9 X# N2 F/ j - return roots;% N9 T% r- [' n G
- }
q6 j; ^& Y Y; m& b* E - /*2 z) `# D+ n$ F4 c
- * 通过递归得到某一路径下所有的目录及其文件" n" e4 f: K# t
- */9 R# s1 m2 ^! i
- public static DirBean getFiles(String dirPath) throws Exception{
& N$ C8 Y: u5 a& v) { - File root = new File(dirPath);- ]1 ^1 G. H4 w: f
- DirBean dirBean=null;3 a2 S F+ B" {* Y+ D5 R" e
- if(root.exists()){3 |, H+ \2 W" F7 ~! F3 ]7 f" f
- dirBean=new DirBean();. a) v6 V& P9 X
- String dirSize="";
6 A3 g- J2 O: Q) u* r) I - int dirCount=0;: s& P" \8 J R. ?5 Z" B
- List<FileBean> filelist=new LinkedList<FileBean>();
: t. X5 ]$ v k: @; B, X6 z ? - if(root.isDirectory()){
- v5 U% F7 W/ {9 ?6 G/ T. H6 j0 H8 z - File[] files = root.listFiles();2 @0 p$ }4 w D* b
- for (File file : files) {+ x1 O6 j8 i7 _6 J; n9 u% ^
- FileBean fileBean=new FileBean();" p4 ]9 E1 t M+ i& o
- String realPath=file.getAbsolutePath();
5 l2 N. o! Y2 W - fileBean.setFilePath(realPath);
5 T8 Q) P0 Q3 P" K8 C9 w+ I+ m - fileBean.setFileName(getFileName(realPath));
/ W$ u: M1 o6 @; o; ? - if (file.isDirectory()) {5 O0 L" L# L' a8 L7 E @4 J7 H. r+ q
- fileBean.setFileType("DIR");
g. Z" p& v4 h( W) j0 h - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));1 |9 Q5 e# z& ?/ ~
- fileBean.setFileSize("");
$ Z' n% k% g. b5 ]1 {7 L8 }; \ - }else{
+ {6 ~- T. b% C0 Q. b( L2 V. p - fileBean.setFileType(getFileType(getFileName(realPath)));5 ` o! M6 j0 x( {' F
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));
/ ~3 u9 }( u# ~2 D! E: s - }$ {; F2 W, ?0 q% x4 Q. l- y
- filelist.add(fileBean);
; a6 {$ Z0 m' A; i - }
- L q1 A; p1 X; P6 L' T+ K+ e - }else{
& l i: Y3 G/ O6 e% E - dirSize=FormetFileSize(getFileSizes(root));
3 q1 l L+ N* f- L+ s) d. a( j, y" {$ e - }9 d" V/ f* m$ M5 n
- dirBean.setDirCount(dirCount);
7 n' m% q' z4 I# W - dirBean.setDirSize(dirSize);" m( n/ d1 x% i9 G) C" r# f% s& p
- dirBean.setDirPath(dirPath);
7 I3 w3 N; O0 X0 ^ \ - dirBean.setFiles(filelist);) ~% P1 |6 c9 |
- }else{
; ^; N z' E% k6 Z `5 p4 [ - System.out.println("文件或文件目录不存在");
6 l4 s1 A" J& c. r7 @, ?% r - }
[' L$ D, T" k4 S2 d3 P - return dirBean;& A& @3 O! S) t, s
- }( v9 q$ T! X0 \
- private static String getFileType(String fileName) {+ [ o9 u% m M7 u X* M# i
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();0 T' i, z* ^/ { R. q# ^ a+ _
- }
0 v: I3 g! s J. A6 j - //获取文件名
/ ~& d3 R# W3 z$ ]6 I/ h - static String getFileName(String filePath) {
2 D! E# Z, A4 R* I, Q% h/ l6 H5 H - String [] fileItems=filePath.split("\\\");4 j! d5 G( c7 L. H
- return fileItems[fileItems.length-1];
2 a$ [" E; }. @4 p - }% v' o. Q0 u! A2 x; h
- //取得文件大小
. Y% o, e: p+ P e1 x8 m K3 E7 m - public static long getFileSizes(File f) throws Exception{
: q7 Y' A) U0 K - long s=0;1 k7 L8 z( P/ `" f7 k N, j/ }
- if (f.exists()) {
1 ~. E$ K4 l$ |7 j - FileInputStream fis = null;
! D4 U# d8 ?# J* u6 h& N5 C - fis = new FileInputStream(f);
6 k8 e* c6 S7 l' p! c - s= fis.available();! o/ F" j: g: `' F; U- ^9 a+ F
- } else {
( E+ Z T6 H- j2 Q - System.out.println("文件不存在");
3 f9 r' w; R" P! q- x0 v - }
6 f6 L8 i: I+ A/ l6 }: @ - return s;
) X: j% R3 t3 t! X5 ]# j" Z+ B) B - }
( k1 o$ O0 d. \& { - //取得文件夹大小
4 ]8 o: e! } I- Y3 y - public static long getFileSize(File f)throws Exception
- W, ]. m9 q5 ^* ?6 L: Z: ^; f - {
1 w# q# j% P. U% n% M% U - long size = 0;6 f- I& g" A4 g5 I9 x5 \( C
- File flist[] = f.listFiles();1 x) R/ \2 r+ Z: b
- for (int i = 0; i < flist.length; i++)
5 Y: c U E( U2 g - {6 E1 o" m0 g7 I+ L- o' Y7 x
- if (flist[i].isDirectory())
0 T2 _4 W6 L, X7 W7 z o - {
+ k3 s1 s0 e( P0 b9 u - size = size + getFileSize(flist[i]);7 f( z& _5 C& m" T& @( W9 _
- } else
) u, i `& o; S3 o3 m. h6 i - {5 j+ ~' D. ^ [2 B& W
- size = size + flist[i].length();/ |, q% s, [* z3 C+ t
- }( F8 H6 l3 W5 ^+ i
- }
* b3 f" u. M% z# a% Z: A l - return size;
1 B4 z ]' ?+ c4 ` - }
1 j( \7 ^1 G( C5 q6 [$ x - public static String FormetFileSize(long fileS) {//转换文件大小
) X) a3 ]2 `# ^3 l7 x6 t! M0 _6 ` - DecimalFormat df = new DecimalFormat("#.00");
& [. a4 A, u, G) I7 A - String fileSizeString = "";
* W# n, g% b; ], M! T# b( m0 P - if (fileS < 1024) {
4 y9 \- l. a" N' M* m - fileSizeString = df.format((double) fileS) + "B";0 ^, A1 J5 \, s1 [2 ]
- } else if (fileS < 1048576) {
3 x& E1 Q' l) S( N) z- ? - fileSizeString = df.format((double) fileS / 1024) + "KB";7 |- G. r/ p) j* g& N; ^( k( D% V. d8 F
- } else if (fileS < 1073741824) {
6 ?; F, _% _3 u9 G - fileSizeString = df.format((double) fileS / 1048576) + "M";- |0 [) U! L \/ ~1 H, H) j
- } else {! I( e9 C* p7 }) A) S4 i7 W% n# G
- fileSizeString = df.format((double) fileS / 1073741824) + "G";; U+ ?+ s5 U+ W" b, ?" j; c
- }
( R3 M+ C$ L5 a0 ^% |) C - return fileSizeString;( g5 C/ f4 H+ T8 J1 {; f
- }
( ~2 k, K" w( m. b( ~ -
# p( s4 J# J, G+ v/ O) I - public static long getlist(File f){//递归求取目录文件个数
9 n' Q* ^. D1 B) c" O3 u! }$ w* N - long size = 0;% G+ s$ P6 t& n6 @) G3 w+ F" b' x7 m: |
- File flist[] = f.listFiles();
- P) T, D& s1 E0 ^( V - size=flist.length;5 t+ y4 z# a2 e* b! A
- for (int i = 0; i < flist.length; i++) {
- H; m0 v. i7 u7 {( s: m - if (flist[i].isDirectory()) {
, ?0 e/ U: V0 H* R: @% ^ - size = size + getlist(flist[i]);- l4 t8 \8 l6 E
- size--;+ C/ t+ d+ H, X& g0 ^6 j
- }
/ W0 S: e$ O7 ?) Z - }! _) q/ B+ E7 ?5 K b& S3 I
- return size;" V @& B z( j; l$ I% e. \% E: M2 D
* }( P0 n: @! K5 f; x$ q- }
& m3 u: B t# g - }
复制代码
! L2 u; n2 m8 a. K( s1 UJavaWeb实现显示本地文件目录项目源码解压码:
+ z% K4 k4 F9 F' _0 m5 [- Q, d3 h% M7 U- d5 L
" H* C3 M7 _# T# z/ R+ S% s4 K0 O |
|