该用户从未签到
|
前段时间为是练习JQuery和 java遍历目录,写了一个JavaWeb(使用Jsp+Servlet)的例子。 源码是Myeclipse新建的项目,需要配置一些环境,比如JRE路径,以下是运行截图,界面模仿新浪微盘。
) u( @2 n: G* O1 d6 Y, T+ \
1 `( u" N' ~: \. @+ u$ i- B 8 x$ h% Q, O, S2 u- d5 G
工作原理就是通过Java遍历系统(Windows)的目录,前台通过点击图标以ajax方式触发事件,后台以json数据的形式把文件结构返回给前台,前台通过JS解析JSON数据内容,展示不同的图片。目前尚存在的问题有无法显示C盘目录下的文件。 下面贴出其中核心的代码,即遍历目录的工具类IterateDir.java - package com.uudisk.utils;
( v& B) e: w" d2 i) I! c - 7 Y" {9 S F4 U8 y% |# |
- import java.io.File;
9 ]6 v9 v6 B$ V E! | - import java.io.FileInputStream;) B& A0 e4 J& B/ w5 p: I
- import java.text.DecimalFormat;
, B2 d% [- l* G( S7 h% y, r9 P - import java.util.ArrayList;1 Y; ~$ j# K1 ]& q. ?' H" A3 s
- import java.util.LinkedList;
- X: a/ ~ C3 ]* g- _" u - import java.util.List;
- D- t3 i9 X. Y( c. p& Z4 a8 \; M
. Q$ v. x! N' {; ^0 A, Y- import com.uudisk.domain.DirBean;. K F0 W" b c" f% J% I- A) r) z
- import com.uudisk.domain.FileBean;
L; R1 y2 m) [ U - import com.uudisk.domain.RootBean;
/ x! ?' s' k& b2 ~ - - m; D+ v& ~9 o
- public class IterateDir {; T9 P5 i3 h* z. z) x& y
- /*
+ m0 f( w' G$ T8 j4 ^4 c - * 获取根目录信息% m4 Y" Q; X& ?2 n
- */
g, O/ ~1 q3 f - public static List<RootBean> getDiskInfo(){
; X! z0 Z: i- c. {! E - //获取盘符
9 B s/ d8 I& x8 K) C' q- Z - File []files=File.listRoots();
' I! |! P D: b @# R - List<RootBean>roots=new ArrayList<RootBean>();
1 n8 @7 G) e2 P I7 n8 p k2 w2 Y. B5 m - for(File file:files){
3 o+ g/ D8 d& F* w - if(file.getTotalSpace()!=0){
% P0 c! o) s" T+ _ - RootBean rootBean=new RootBean();- j. @, y% Q3 _4 Y' B5 w
- rootBean.setDiskPath(file.getAbsolutePath());
+ i A8 X5 N v3 S8 Y9 x2 u - rootBean.setDiskName(file.getAbsolutePath().charAt(0)+"");* Y# Q) I+ l9 J4 y. ~
- rootBean.setDiskSize(FormetFileSize(file.getTotalSpace()));
; Y' t, X7 J" l - rootBean.setAvilableSize(FormetFileSize(file.getFreeSpace()));, T9 u- w6 k2 n5 e
- roots.add(rootBean);
+ a% s" j8 P F - }
; n. W9 k+ W0 X% j. i - }* F& n& O' P8 ]* C
- return roots;8 x& M2 d: O/ c2 Y5 i2 ]
- }
, F- Y& q1 Y3 U: s# @* g6 ~ S+ _ - /*
8 M6 v( ?5 L% S# N4 V# H$ ~( z _ - * 通过递归得到某一路径下所有的目录及其文件
! w' b) a! t& S3 Y - */
1 Y! X/ T0 W- j% F$ S' V( ]# ~ - public static DirBean getFiles(String dirPath) throws Exception{- d" B! `1 |: P
- File root = new File(dirPath);2 t: Y, O9 U+ H" x
- DirBean dirBean=null;
3 X. Z, m% [" U - if(root.exists()){
" F' T0 H6 U( e; ` - dirBean=new DirBean();* K7 d$ U2 V, y: @+ C
- String dirSize="";
" n! `0 y& w: |3 M- \5 J8 ~ - int dirCount=0;" b5 Z9 K: m Z b$ E4 z3 m
- List<FileBean> filelist=new LinkedList<FileBean>();
7 t8 s2 i: {! `! Q0 k! ] - if(root.isDirectory()){
* N( V" p$ R2 q - File[] files = root.listFiles();
A) `3 i: p/ d. @ - for (File file : files) {& [" s% j) f$ f. c2 T6 ?: T. j0 b
- FileBean fileBean=new FileBean();
% W F, ]) z5 y" f) M! Z3 f# M5 T - String realPath=file.getAbsolutePath();
* n" h# ?' c; I6 B6 y% L! g. Z# {2 [ - fileBean.setFilePath(realPath);
. ]0 | ]2 N9 O0 J8 y - fileBean.setFileName(getFileName(realPath));) P" q8 _4 L0 C. |. z6 B
- if (file.isDirectory()) {5 ~2 n5 z& D0 k2 k4 l
- fileBean.setFileType("DIR");
8 P& w# R. ^5 z1 ^- R4 r - //fileBean.setFileSize(FormetFileSize(getFileSize(file)));- B% E, H; z* O! x
- fileBean.setFileSize("");9 i6 E0 N( K9 z
- }else{
, O% ]& o+ a' r; z2 e" P6 ~ - fileBean.setFileType(getFileType(getFileName(realPath)));1 k/ t' C2 A* E( _
- fileBean.setFileSize(FormetFileSize(getFileSizes(file)));0 u! K0 C" H* Z9 v
- }
: x* J9 I% h" v2 b5 Z - filelist.add(fileBean);7 j' Z- _ ^) W' P2 Q
- }4 |+ X* ^5 I- h- L [9 b' C! S: [ b t; S; {
- }else{6 ~8 V, Z; e( e4 q
- dirSize=FormetFileSize(getFileSizes(root));+ \2 H' [- S F- B/ J- O9 I* |2 J: x& z4 z
- }0 N4 D/ G5 L% h' `0 X; ]& U
- dirBean.setDirCount(dirCount);
- r) l6 i7 U# W4 N) u; Z - dirBean.setDirSize(dirSize);# j6 |8 T4 D. |
- dirBean.setDirPath(dirPath);
& `' o6 g3 H L0 I! a; h7 d' Y - dirBean.setFiles(filelist);
( C. o. R V: Z1 Z0 y - }else{
% T6 |7 Y8 K. @0 U6 _. S; F - System.out.println("文件或文件目录不存在");
4 @& K5 j6 X0 C4 h; k - }
, S7 C; l; ]$ o3 e# { - return dirBean;
( t7 _6 s1 ? @. p/ Q - }- f0 i) ` C$ ]) ~
- private static String getFileType(String fileName) {
- y/ |* g# x2 m' T$ }% r. E - return fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase();
8 P( m. N; W8 Y4 j9 C/ h$ N - }
. j/ P- B0 C* `& C - //获取文件名. K8 J$ R( g4 d1 @4 C2 v
- static String getFileName(String filePath) {
8 P" p" H) b# m- j" ~; x9 n" g3 o - String [] fileItems=filePath.split("\\\");' e4 z. R; Z# z8 Q/ j/ ^
- return fileItems[fileItems.length-1];$ q$ O! e* v; p" W2 k! M
- }. C3 R I& s% V
- //取得文件大小- p) @1 L _+ F: E9 m' n5 S5 J
- public static long getFileSizes(File f) throws Exception{
; U2 L) {2 B. _$ x7 @& ~! v8 @8 A' j - long s=0;- g3 S. p" i# c( s
- if (f.exists()) {
O6 i5 {4 U }5 i5 l! D3 T - FileInputStream fis = null;
7 z) L; Z. p/ ~% h. J9 n4 V' \ - fis = new FileInputStream(f);2 `) F7 a6 X- H |
- s= fis.available();# I0 O' x6 P2 }
- } else {
$ _8 N* J7 q K! J - System.out.println("文件不存在");% u+ L0 ?! I" ~
- }
+ c0 n ^% O' {2 b' |% I5 ]) \ - return s;
" N, D& A1 e- `! f2 t6 [) m - }6 n/ b4 A1 R# [* J
- //取得文件夹大小
) O ^; W2 c0 Y - public static long getFileSize(File f)throws Exception
r. j) T; |% j5 U9 b( s - {1 w. V+ f9 k* t7 H
- long size = 0;! N2 D2 D5 y( q
- File flist[] = f.listFiles();/ o& T; W4 T5 q ~+ J, t
- for (int i = 0; i < flist.length; i++)2 C9 G/ i4 V; V- h, q2 d, R- ?& p
- {6 K% u! i l9 w$ B1 E/ u
- if (flist[i].isDirectory())
8 N" {8 N7 L& ?' j5 r5 z - {) C7 U, ~3 ]/ y3 U8 p. l
- size = size + getFileSize(flist[i]);- s! B: o& h H9 Y9 e8 g9 P% M d
- } else
7 E1 O% P' z/ M5 f - {
; L0 F2 M. V' b' Y - size = size + flist[i].length();% B% o, j2 h4 s4 Z
- }* D- s6 r6 o- M( s, V5 i) H
- }9 F) L% Q6 ^! B3 U" s* F f6 H
- return size;; V4 ~- g9 e" F2 C& L7 ^
- }1 G3 o2 }& F% U W: u2 I! `; E& c3 l
- public static String FormetFileSize(long fileS) {//转换文件大小
6 P3 e% Z' W7 w - DecimalFormat df = new DecimalFormat("#.00");
2 u9 [. i* E( H9 P+ T - String fileSizeString = "";
5 }' a7 ~' r6 t: \ M4 f, ? - if (fileS < 1024) {0 S$ L9 y: d& m
- fileSizeString = df.format((double) fileS) + "B";
, U; S* [) j0 n- m$ H - } else if (fileS < 1048576) {: A& U$ u1 X% N- b& T
- fileSizeString = df.format((double) fileS / 1024) + "KB";
9 \ ?5 y1 `; x* j# w% T - } else if (fileS < 1073741824) {$ r. y1 ~! f: p) p" f
- fileSizeString = df.format((double) fileS / 1048576) + "M";
+ i3 B0 S" x8 I& |5 G - } else {0 e1 M, n' S0 ^9 m; o
- fileSizeString = df.format((double) fileS / 1073741824) + "G";
; `$ J" T; ?4 I! Y9 y8 x: F1 g - }5 H* w6 |7 W) B- G3 C) n) v, j$ y
- return fileSizeString;7 x* E$ ~9 p/ u8 v
- }
' X9 x5 h- w+ j0 L2 M7 X, ~9 u -
9 e# L. ]1 k1 u/ y' [4 m - public static long getlist(File f){//递归求取目录文件个数
" @2 x$ W u0 m& q: W y* [0 x - long size = 0;
* w$ r7 f; \5 j - File flist[] = f.listFiles();/ ~/ `# P. C/ d! s
- size=flist.length;8 V& J9 L' Z, o
- for (int i = 0; i < flist.length; i++) {
9 v$ ]: w, I/ T5 |$ x0 O - if (flist[i].isDirectory()) {
5 w! |% g% x: P, @) m' ^ - size = size + getlist(flist[i]);% o' J2 T9 d, N6 `- C0 P
- size--;0 d* ]3 b+ o' S* Z I% o: h, j+ _
- }4 h) c# T6 D7 J/ F
- }+ `: Y, c$ l1 | |; `% q6 m! D
- return size;2 y7 R: ~* [" N4 `4 b6 C f
- " j7 w$ z7 c: [
- }
* x) I4 o$ A' @% P4 h - }
复制代码 3 ^/ H# d2 N" l/ u: ~9 d4 P: v
JavaWeb实现显示本地文件目录项目源码解压码: 2 u0 t5 e+ H7 c' x4 C
( b5 a7 T7 O5 k8 v# W- G! X, c! R
' n* `/ ^5 P) w! p) D& G6 [ |
|