Java遍历一个目录下的所有文件
 

Java工具中为我们提供了一个用于管理文件系统的类,这个类就是File类,File类与其他流类不同的是,流类关心的是文件的内容,而File类关心的是磁盘上文件的存储。

一,File类有多个构造器,常用的构造器有:

1,public File(String pathname){}

在pathname路径下创建文件对象

2,public File(String path,String name){}

在path参数指定的目录中创建具有给定名字的File对象,如果path为null,构造器将使用当前目录创建对象

3,public File(File dir, String name){}

File对象dir表示一个目录,在dir参数指定的目录中创建具有给定名字的File对象,如果dir为null,

构造器将使用当前目录创建对象

二,获得文件的权限属性:

1,表明文件是否可读,可写,可执行

boolean canRead()

boolean canWrite()

boolean canExecute()

2,设置文件的可读,可写,可执行

boolean setReadable(bollean state,bollean ownerOnly)

boolean setWritable((bollean state,bollean ownerOnly)

boolean setExecutable((bollean state,bollean ownerOnly)

3,删除文件

boolean delete()

如果文件被删除则返回true,否则返回false

void deleteOnExit()

在虚拟机关闭时将文件删除

4,判断文件是否存在

boolean exists()

5,获得文件路径名

String getCanonicalPath()

返回包含这个文件的规范路径名的字符串该方法会使用恰当的目录分隔符,并可以获得底层文件系统所选择的大小写处理方式

String getName()

返回包含这个File对象的文件名的字符串,但不包含路径信息

6,判断File为文件还是目录

boolean isDirectory()

判断是否为一个目录

boolean isFile()

判断是否为一个文件

7,获得File对象包含的文件名和目录名

String[] list()

返回这个File对象包含的文件名和目录名构成的字符创数组

String[] list(FilenameFilter filter)

返回有这个File对象包含的满足过滤器条件的文件名和目录名构成的字符串数组

File还有许多方法属性,跟多的可以查看API文档

现在,使用File类来遍历一个目录下的所有文件,我的程序过程为:

1,获取pathName的File对象

2,判断该文件或目录是否存在,不存在时在控制台输出提醒

3,判断如果不是一个目录,就判断是不是一个文件,时文件则输出文件路径

4,获取此目录下的所有文件名与目录名的字符串数组

5,如果是一个目录,搜索深度currentDepth+1,输出目录名后,进行递归

6,如果是文件,则直接输出文件名

程序如下:

  1. import java.io.File;
  2. import java.io.IOException;
  3. public class DirErgodic {
  4. private static int depth=1;
  5. public static void find(String pathName,int depth) throws IOException{
  6. int filecount=0;
  7. //获取pathName的File对象
  8. File dirFile = new File(pathName);
  9. //判断该文件或目录是否存在,不存在时在控制台输出提醒
  10. if (!dirFile.exists()) {
  11. System.out.println("do not exit");
  12. return ;
  13. }
  14. //判断如果不是一个目录,就判断是不是一个文件,时文件则输出文件路径
  15. if (!dirFile.isDirectory()) {
  16. if (dirFile.isFile()) {
  17. System.out.println(dirFile.getCanonicalFile());
  18. }
  19. return ;
  20. }
  21. for (int j = 0; j < depth; j++) {
  22. System.out.print("  ");
  23. }
  24. System.out.print("|--");
  25. System.out.println(dirFile.getName());
  26. //获取此目录下的所有文件名与目录名
  27. String[] fileList = dirFile.list();
  28. int currentDepth=depth+1;
  29. for (int i = 0; i < fileList.length; i++) {
  30. //遍历文件目录
  31. String string = fileList[i];
  32. //File("documentName","fileName")是File的另一个构造器
  33. File file = new File(dirFile.getPath(),string);
  34. String name = file.getName();
  35. //如果是一个目录,搜索深度depth++,输出目录名后,进行递归
  36. if (file.isDirectory()) {
  37. //递归
  38. find(file.getCanonicalPath(),currentDepth);
  39. }else{
  40. //如果是文件,则直接输出文件名
  41. for (int j = 0; j < currentDepth; j++) {
  42. System.out.print("   ");
  43. }
  44. System.out.print("|--");
  45. System.out.println(name);
  46. }
  47. }
  48. }
  49. public static void main(String[] args) throws IOException{
  50. find("D:\\MongoDB", depth);
  51. }
  52. }

测试截图:

Java遍历一个目录下的所有文件的更多相关文章

  1. Python:遍历一个目录下所有的文件及文件夹,然后计算每个文件的字符和line的小程序

    编写了一个遍历一个目录下所有的文件及文件夹,然后计算每个文件的字符和line的小程序,先把程序贴出来. #coding=utf-8 ''' Created on 2014年7月14日 @author: ...

  2. java压缩指定目录下的所有文件和文件夹的代码

    将代码过程较好的代码段备份一下,下边资料是关于java压缩指定目录下的所有文件和文件夹的代码,希望对码农有帮助. String sourceDir="E:\test";int pa ...

  3. Python读取一个目录下的所有文件

    #!/usr/bin/python # -*- coding:utf8 -*- import os allFileNum = 0 def printPath(level, path): global ...

  4. python 删除一个目录下的所有文件

    一个目录下有文件,文件夹,文件夹里又有文件.文件夹....用python脚本,实现,递归删除一个目录下的所有文件: 目录结构如下: 其中我们要删除所有文件 代码实现如下: import os CUR_ ...

  5. Linux递归解压缩一个目录下的全部文件

    gunzip -r hongchangfirst/data 怎样递归删除那些剩余的非log结尾的文件? 先列出确认一下: find hongchangfirst/data -type f ! -nam ...

  6. linux面试题:删除一个目录下的所有文件,但保留一个指定文件

    面试题:删除一个目录下的所有文件,但保留一个指定文件 解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10 十个文件 [root@oldboy xx]# touch ...

  7. java输出一个目录下的子目录

    java输出一个目录下的子目录 package com.vfsd.core; import java.io.File; public class ListDir { public static voi ...

  8. linux-删除一个目录下的所有文件,但保留某个或者多个指定文件

    Linux:删除一个目录下的所有文件,但保留一个指定文件 面试题:删除一个目录下的所有文件,但保留一个指定文件 解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10 ...

  9. Linux:删除一个目录下的所有文件,但保留一个指定文件

    面试题:删除一个目录下的所有文件,但保留一个指定文件 解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10  十个文件 [root@oldboy xx]# touc ...

随机推荐

  1. Android中的自定义注解(反射实现-运行时注解)

    预备知识: Java注解基础 Java反射原理 Java动态代理 一.布局文件的注解 我们在Android开发的时候,总是会写到setContentView方法,为了避免每次都写重复的代码,我们需要使 ...

  2. Eclipse开发Android应用 找不到平板

    1.驱动安装正确2.平板的连接方式正确,不要用大容量存储/sd卡模式这个设置在4.3上很难找呀.设置->存储->点右上角的菜单 3.打开USB调试.4.上述问题都检查后,在eclipse里 ...

  3. Appium 自动化测试(3)--Appium框架与流程介绍

    Appium介绍 Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的.可用于IOS和Android以及firefox的操作系统.原生的应用是指用andro ...

  4. UVA-1149 Bin Packing (贪心)

    题目大意:给定n个物品的重量,无限个容量为m的箱子,每个箱子最多装两个物品,要把所有的物品都装下,最少需要多少个箱子. 题目分析:贪心策略:每次将最重和最轻的两个物品放到一个箱子里,如果装不下,则将最 ...

  5. TCP握手及状态图

    为什么需要“三次握手”? 为了解决“网络中存在延迟的重复分组”的问题,即为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误. 例:“已失效的连接请求报文段”的产生在这样一种情况下:cli ...

  6. XMU 1246

    http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1246 求区间内素数个数,经典问题,区间长度10^6,数的取值最多能到10^12(此题范围稍小) 用 ...

  7. js实现trim()方法

    在面向对象编程里面去除字符串左右空格是很容易的事,可以使用trim().ltrim() 或 rtrim(),在jquery里面使用$.trim()也可以轻松的实现.但是在js中却没有这个方法.下面的实 ...

  8. tar格式 方法安装MySQL后,初次登录出现 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement

    参考: https://www.cnblogs.com/kerrycode/p/4368312.html http://blog.csdn.net/u014520039/article/details ...

  9. Buildroot 打包文件系统流程跟踪

    /********************************************************************************* * Buildroot 打包文件系 ...

  10. 转:MyISAM 和 InnoDB 讲解

    InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISA ...