该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。 # M/ `7 G- s, x5 B# |7 H4 ^
) N9 Z3 {. W( { C& |( g6 j8 M1 z6 e & a8 f) l8 {, v6 |2 B
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
" k/ u ?; y! _+ o1 p# U" F/ O# r - ) m& i$ S1 L9 X" x q& _& v% `+ I
- import java.io.File;3 x& ^ F: g2 N
- import java.io.FileInputStream;: R$ v0 P9 r; j" K' s# A8 p
- import java.text.DecimalFormat;+ A+ Y& @. J- U1 J
- import java.util.ArrayList;, I1 L. e* R; c- f% d9 h
- import java.util.LinkedList;
7 P% v8 M' G7 | b6 o - import java.util.List;. h [7 _4 c( A5 @
- % @- s" `( q9 \3 S) N% ~& s
- import com.uudisk.domain.DirBean;% c- g0 L: E# r f( z7 \' d9 v
- import com.uudisk.domain.FileBean;% b A6 b/ f0 b# d0 ?! I- j5 w
- import com.uudisk.domain.RootBean;& G1 E6 t6 {2 }2 \
l$ h: k" c& C4 `' {1 R5 x- public class IterateDir {
7 E9 j; \% _9 t - /*
% x( T6 i3 H3 m0 Z# h. l* w2 c - * 获取根目录信息' i0 {5 i9 m& R7 ~9 C& z8 `
- */
& z. a% y3 D: U5 U4 g - public static List<RootBean> getDiskInfo(){1 h& @* }6 G* E- n/ g0 B
- //获取盘符8 u' R9 k; P" s5 F& C
- File []files=File.listRoots();3 Q8 F; n- O/ s2 h7 v
- List<RootBean>roots=new ArrayList<RootBean>();' N# L" U2 R% S* \0 Z' b
- for(File file:files){( x8 h/ Z2 j# z+ j* @- {6 T& P
- if(file.getTotalSpace()!=0){) l2 |) e6 T& N8 q
- RootBean rootBean=new RootBean();, b: n) d3 [6 x# i
- rootBean.setDiskPath(file.getAbsolutePath());
* n, g" L4 ?; L4 { - rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");% n% Y+ V, i( R6 I7 `
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));* \0 n+ N: \" E8 C; m/ {+ v
- rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));* G8 w) K9 Q9 e
- roots.add(rootBean);
; m, |5 D, N" M" B8 Q - }
8 z4 |9 Y" k9 w: K - }
8 | r& |+ A# A+ | - return roots;! O, k; R1 l2 D8 g' Q% E
- }
6 A# x- s% {7 f+ C+ l' w - /*" ^; S: @9 K* L6 {# W' d S
- * 通过递归得到某一路径下所有的目录及其文件/ V! u% t0 r: J0 [7 ]8 l
- */
7 }+ B/ K! J9 x4 I4 b5 i - public static DirBean getFiles(String dirPath) throws Exception{
- @8 Y3 S: W6 @+ ~8 e3 W# M; k: A7 y - File root = new File(dirPath);. r6 E5 S+ Y: h6 M6 x0 t v+ }; o
- DirBean dirBean=null;
* K$ h/ Q" I: s9 J - if(root.exists()){ y, p% V& C2 w( {) i; d) F3 `
- dirBean=new DirBean();4 b1 m1 ?* u- Z; l5 D) g: K
- String dirSize="";
, |, K9 o$ @6 p+ v - int dirCount=0;3 U+ Y3 n$ Y5 Q
- List<FileBean> filelist=new LinkedList<FileBean>();( `3 t8 s. _1 O* K, ]' x
- if(root.isDirectory()){
4 _# M9 o; `# T+ z0 O7 M1 c1 l - File[] files = root.listFiles();( A8 e8 o3 n/ G* y; R
- for (File file : files) {6 u. U0 R2 N1 o. ~0 P2 y3 e
- FileBean fileBean=new FileBean();
6 f9 O. _2 S' _ - String realPath=file.getAbsolutePath();8 L s A! J# z
- fileBean.setFilePath(realPath);9 O M) O; P) i! \) w/ @1 n
- fileBean.setFileName(getFileName(realPath));2 ]2 J, M6 Q" Y, {9 `
- if (file.isDirectory()) {) \9 L( L. T. s
- fileBean.setFileType("DIR");
! k( D( T, U" [6 Z( h5 O - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));
/ J$ o" V) \5 _: W/ B0 B - fileBean.setFileSize("");8 r5 ]" J7 b, E9 k
- }else{* L5 b* Q: m2 r! p7 \: I& `
- fileBean.setFileType(getFileType(getFileName(realPath)));5 }- C* M( d& E: d. q7 z
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));( e/ w' P4 Z/ q1 g0 ?
- }, A8 g- b+ }" y
- filelist.add(fileBean);0 u+ n! f8 _9 v: P% B* ~+ x/ H& Z
- }
* x9 e" h4 s8 R/ N* z - }else{
7 V2 {1 q6 u6 B( K: v2 b - dirSize=FormetFileSize(getFileSizes(root));
. ]$ T4 c0 g1 C+ ~# K- F; p" F - }
; A" Q; S; ]8 ~8 c( H - dirBean.setDirCount(dirCount);
9 ?! v0 t- ~% t5 ~# v! {* { - dirBean.setDirSize(dirSize);. F1 Q8 {$ R" N. z T- `
- dirBean.setDirPath(dirPath);; M- s7 F. z3 {/ t5 L' D! E
- dirBean.setFiles(filelist);2 E( h n5 }' O. \& L1 z# g
- }else{
+ c/ r/ p# y. Q/ i7 F+ \1 I. \2 ? - System.out.println("文件或文件目录不存在");, j6 R( O0 l }" h: J7 l
- }
$ a2 u$ M0 L$ R6 O+ T2 |2 m, [ - return dirBean;% Z/ B2 i9 t7 m* ~
- }3 B9 w. Z, n# _, I3 L, O0 O; b
- private static String getFileType(String fileName) {8 o" p* W/ O8 B2 _. a) I) c0 v
- return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
5 K3 K8 y: B( r: Q s - }
: o# _0 y- E# o# [' Z8 @+ W - //获取文件名
; a' E, ~# C$ d" K - static String getFileName(String filePath) {
* v7 N: E: T; v0 [ f' v" U - String [] fileItems=filePath.split("\\\");
5 F3 W/ M( n+ |" U7 T$ M+ v - return fileItems[fileItems.length-1];
0 E, z& e: w& t' u9 [0 x# W - }& n! C6 d1 S% n$ v4 S Z$ x/ R
- //取得文件大小
' a8 l: a; I; X' O' [ - public static long getFileSizes(File f) throws Exception{
5 C {8 q, g7 w# U$ h5 I - long s=0;
, S2 C5 T$ o+ Q - if (f.exists()) {
! Z! _6 h# {. \$ Z p. ^ - FileInputStream fis = null;
6 }6 R9 G7 F% H8 s: T) s" B0 F. @ - fis = new FileInputStream(f);
/ z7 P. M! ^# w5 ]$ w9 A - s= fis.available();) k6 z1 A* U6 z. D" O
- } else {3 S* z2 [/ g& U/ Z/ b! r
- System.out.println("文件不存在");( O* j, w. k- m6 n+ A
- }9 Q2 F, i4 Z$ K7 q
- return s;
% Q6 | g3 O% D2 L/ v - }
, K0 O; K, F6 Y9 ~& H% h+ U* z, I - //取得文件夹大小
- i" \3 F( V5 ^! w: l, e1 ` - public static long getFileSize(File f)throws Exception
# f9 g( r% N. n6 Z! e - {
6 U8 Z% K% x! w; [ - long size = 0;2 k! V1 a/ D+ U* V3 O4 j6 ^3 ~2 J- ?
- File flist[] = f.listFiles();6 V9 V6 R5 O7 U# m
- for (int i = 0; i < flist.length; i++)1 L; n; w' D5 t, H2 h. ^* j3 z
- {
+ V' H9 n( _/ _! h8 v3 F0 G - if (flist[i].isDirectory())
' }( }$ p9 E- L# D/ }! m$ l - {
. K% u9 M8 h$ n4 T - size = size + getFileSize(flist[i]);4 C# N/ z, j2 j% G! h
- } else
$ L! P3 T0 A/ M- }+ q( g - {# w) O2 j! @( P0 H" U
- size = size + flist[i].length();' w5 X2 Y6 Z- W! j% |( C" K
- }5 _5 u, I6 f, C/ r5 v3 z; P
- }
7 _7 o* b- B% g2 o- R! | - return size;
% r y' t& a4 m! A* \ Z8 K - }& l/ T4 K, m; c% u( I4 O8 c
- public static String FormetFileSize(long fileS) {//转换文件大小
6 f" [8 X- K3 i: R - DecimalFormat df = new DecimalFormat("#.00");, L" ~: `* `7 p l! L
- String fileSizeString = "";% x/ A0 z: D; g: n
- if (fileS < 1024) {" T9 ^4 P7 p3 @3 E# G8 K$ z
- fileSizeString = df.format((double) fileS) + "B";
4 c/ }4 [+ c- t' h8 l4 a7 z5 n - } else if (fileS < 1048576) {3 h' D4 U3 X9 y
- fileSizeString = df.format((double) fileS / 1024) + "KB";
4 F1 @& K: A \5 ^ - } else if (fileS < 1073741824) {
1 S7 [( a$ K) o - fileSizeString = df.format((double) fileS / 1048576) + "M";
, @2 q9 p) L% b8 K - } else {
+ k* n8 ~3 o) m& [- @, d1 I - fileSizeString = df.format((double) fileS / 1073741824) + "G";" s8 h- U) F' V* ~$ c+ X
- }! c1 F, D) R, ?* n; k: J, Y
- return fileSizeString;
" o9 _2 ~* P; p+ t' q+ b) r, H - }
, g6 }6 q( t" w6 L - " S' G5 I( i' y, ~) I0 _
- public static long getlist(File f){//递归求取目录文件个数% s! A& J; u2 I$ l- f b7 z0 n
- long size = 0;6 i F( X P+ d. m# @1 K: e
- File flist[] = f.listFiles();' }% T* `0 _: a* l! r) Q) c( ?
- size=flist.length;. k6 `& E) h& T' [3 r1 ~7 N% q2 A
- for (int i = 0; i < flist.length; i++) {
/ y3 z; O; @$ O3 N ~ t" U6 | - if (flist[i].isDirectory()) {# x" Y$ T0 g0 l! a( H( m
- size = size + getlist(flist[i]);
L3 P$ a, A+ O" ]$ j) j - size--;
+ a3 p' l% v! F8 Y# \! ]- s) j. i - }' Z. r% B8 d M
- }
4 A1 X. ~8 `( {4 K - return size;2 N6 q9 Z5 T/ u# r2 m+ {5 Y0 f
- , {# [3 b3 w9 j2 l& [5 B4 u& T
- }
; ?8 [3 u8 L7 h - }
复制代码 + ]$ F7 Y c! I, f# o( V2 B( J' r+ Z
JavaWeb实现显示本地文件目录项目源码解压码: 2 D, W! F, C' r) J4 S5 Y4 G- t
0 B0 M. O6 z6 a: n' e% _ 5 |; [8 S, D) C) W
|
|