IO-File 文件 目录 基本操作 递归 遍历
创建和删除
//创建文件File file1 = new File("不存在的文件.txt");//注意,这一步并没有创建文件,只是把磁盘中的文件封装成了一个对象System.out.println(file1.exists() + "--" + file1.createNewFile());//false--true。这一步是将File对象写入到磁盘中的文件中。如果文件不存在,则创建System.out.println(file1.exists() + "--" + file1.createNewFile() + "\n");//true--false。如果文件已存在,则不创建//创建目录File dir1 = new File("e:/a/aa");File dir2 = new File("e:/a/bb");System.out.println(dir1.exists() + "--" + dir1.mkdir());//false--false。mkdir只能创建最后一级目录,若父目录不存在则最后一级肯定创建失败,但不报异常System.out.println(dir2.exists() + "--" + dir2.mkdirs());//false--true。mkdirs可以同时创建多级目录,我们一般直接用它就行了System.out.println(dir1.exists() + "--" + dir1.mkdir());//false--true//创建带目录的文件//System.out.println(new File("e:/a/demo.txt").createNewFile());//一定要注意:createNewFile只能创建文件,不能创建目录;如果目录不存在,会报异常File dirPath = new File("e:/不存在的目录/b");if (!dirPath.exists()) dirPath.mkdirs();//如果目录不存在则先创建目录File file = new File(dirPath, "demo.txt");//再在此目录中创建文件System.out.println("创建带目录的文件:" + file.createNewFile() + "\n");//true//删除文件和目录System.out.println(dirPath.list().length);//获取指定目录下的文件名称列表,包含目录文件,但不包含目录文件中的文件。1System.out.println(dirPath.delete());//如果目录中有文件,则删除失败。falseSystem.out.println(file.delete() + "--" + dirPath.delete());//true--trueSystem.out.println(dirPath.exists() + "--" + new File("e:/不存在的目录").exists());//false--true。注意:仅仅是删掉了最里层的目录,而其父目录并没有删除
get和判断
public static void main(String[] args) throws IOException {File file1 = new File("a.txt");System.out.println(file1.length());//0System.out.println(file1.getName());//a.txtSystem.out.println(file1.getPath());//a.txtSystem.out.println(file1.getAbsolutePath());//绝对路径,D:\workspace_bqt\JAVA\a.txtSystem.out.println(file1.getParent() + "\n");//null。注意,这里仅指[相对路径]中的父路径,如果此路径名没有指定父目录,则返回 nullFile file2 = new File("e:\\demo.java");System.out.println(file2.length());//195System.out.println(file2.getName());//demo.javaSystem.out.println(file2.getPath());//注意并不是仅指最后一级目录,而是指 new File() 时传进去的路径。e:\demo.javaSystem.out.println(file2.getAbsolutePath());//绝对路径,e:\demo.javaSystem.out.println(file2.getParent() + "\n");//e:\DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);System.out.println(dateFormat.format(new Date(file2.lastModified())) + "\n");//2016年5月20日 下午04时54分00秒System.out.println(file1.exists() + "--" + file1.createNewFile() + "--" + file1.exists());//false--true--trueSystem.out.println(file1.isFile() + "--" + file1.isDirectory());//true--falseSystem.out.println("重命名:" + file1.renameTo(new File("e:/demo3.txt")));//重命名时须指定重命名后存放的路径,否则会移动到默认路径file1 = new File("e:/aa\\bbb");System.out.println(file1.mkdirs() + "--" + file1.isFile() + "--" + file1.isDirectory());//true--false--true}
目录相关操作
public class Test {public static void main(String[] args) throws IOException {System.out.println("*********************************************************************************获取系统【根目录】名称列表");File[] fileRoots = File.listRoots();System.out.println(Arrays.toString(fileRoots));//[C:\, D:\, E:\]System.out.println("*********************************************************************************获取某一【磁盘】的容量信息");File myFile = new File("e:/");//注意,只能获取整个磁盘的容量,而不能获取此磁盘子目录的容量,子目录的容量只能通过计算得到System.out.println(formatDataSize(myFile.getFreeSpace()));//248.45GBSystem.out.println(formatDataSize(myFile.getTotalSpace()));//285.74GBSystem.out.println(formatDataSize(myFile.getUsableSpace()));//248.45GBSystem.out.println("***************************************************************************获取指定目录下的【文件名称列表】");//如果目录存在但是没有内容,会返回一个长度为0的数组;如果目录不存在或目录其实是一个文件,返回nullString[] fileNames = myFile.list();//包含所有文件夹以及隐藏文件System.out.println(fileNames.length);System.out.println("****************************************************************获取指定目录下后缀名为.txt的【文件名称列表】");String[] fileNames2 = myFile.list(new MyFilenameFilter(".txt", 0));//不包含子目录中的文件,如果需要,请使用递归深度遍历for (String name : fileNames2) {System.out.println(name);//string.txt}System.out.println("******************************************************获取指定目录下大于100Kb、后缀名为.mp3的【文件列表】");File[] files = myFile.listFiles(new MyFilenameFilter(".mp3", 1024 * 100));for (File f : files) {System.out.println(f);//e:\Tfboys - 大梦想家.mp3}}/*** 格式化硬盘容量* 注意1024默认是【int】类型的,2^32=(2^2)*(2^30)=4*(1024^3),所以int类型能表示的数最大为4G,所以绝对不能用int表示1024^4*/public static String formatDataSize(long size) {DecimalFormat formater = new DecimalFormat("####.00");if (size < 1024) return size + "bytes";else if (size < Math.pow(1024, 2)) return formater.format(size * Math.pow(1024, -1)) + "KB";else if (size < Math.pow(1024, 3)) return formater.format(size * Math.pow(1024, -2)) + "MB";else if (size < Math.pow(1024, 4)) return formater.format(size * Math.pow(1024, -3)) + "GB";else if (size < Math.pow(1024, 5)) return formater.format(size * Math.pow(1024, -4)) + "TB";else return "啥玩意啊,有这么大的硬盘吗?";}//******************************************************************************************// 检索规则//******************************************************************************************public static class MyFilenameFilter implements FilenameFilter {private String type;private long size;/*** 检索规则* @param type 指定后缀名的文件* @param size 不小于指定大小的文件,单位:字节*/public MyFilenameFilter(String type, long size) {this.type = type;this.size = size;}public boolean accept(File dir, String name) {long fileSize = new File(dir, name).length();//System.out.println("检索过程:" + dir.getAbsolutePath() + "--" + name + "--" + fileSize);return fileSize >= size && name.endsWith(type);}}}
获取指定目录下的全部文件
public static void main(String[] args) {List<String> filesNames = new ArrayList<String>();getDirFilesNames("E:/KuGou", filesNames, null);List<File> files = new ArrayList<File>();getDirFiles("E:/baiqiantao/doudou/src", null, true, files);for (String name : filesNames) {System.out.println(name);}for (File file : files) {System.out.println(file.getName() + "--" + file.length());}}/*** 对指定目录中的文件进行深度遍历,并按照指定过滤器进行过滤,将过滤后的内容存储到一个指定的集合中* @param dirPath 要遍历的目录,必须是一个目录* @param filter 只遍历目录中的指定类型的文件,如果要遍历所有文件请设为null* @param isContainDir 是否包含目录文件* @param fileList 将结果保存到指定的集合中。由于要递归遍历(不能定义为局部变量,否则每次递归时都是把结果放到了一个新的集合中) ;* 并且是静态方法(定义为静态成员时,下次调用此方法时此集合还包含之前调用后保存的值),所以最后保存到指定的集合中* @return 遍历到的文件数量,也即集合的大小*/public static int getDirFiles(String dirPath, FilenameFilter filter, boolean isContainDir, List<File> fileList) {File dir = new File(dirPath);if (!dir.exists() || !dir.isDirectory()) throw new RuntimeException("目录不存在或不是一个目录");if (fileList == null) throw new RuntimeException("指定的集合不存在");File[] files = dir.listFiles();//也可以使用dir.listFiles(filter)在获取列表时直接过滤,注意这种方式检索时不要遗漏了目录文件for (File file : files) {//遍历if (file.isDirectory()) {//目录if (isContainDir) {//返回集合中是否要包含目录fileList.add(file);}getDirFiles(file.getAbsolutePath(), filter, isContainDir, fileList);//递归} else {//文件if (filter == null || filter.accept(dir, file.getName())) {//是否满足过滤规则fileList.add(file);}}}return fileList.size();}/*** 获取指定目录及其子目录下的指定格式文件的文件名,并对文件名进行格式化,并存储到一个指定的集合中* @param dirPath 要遍历的目录,必须是一个目录* @param filter 只遍历目录中的指定类型文件,如果要遍历所有文件请设为null* @param filePathList 将结果保存到指定的集合中。由于要递归遍历(不能定义为局部变量,否则每次递归时都是把结果放到了一个新的集合中);* 并且是静态方法(定义为静态成员时,下次调用此方法时此集合还包含之前调用后保存的值),所以最后保存到指定的集合中* @return 遍历到的文件数量,也即集合的大小*/public static int getDirFilesNames(String dirPath, List<String> filePathList, FilenameFilter filter) {return getDirFormatFilesNames(dirPath, filePathList, filter, true, true, true, 0, 0);}/*** 获取指定目录及其子目录下的指定格式文件的文件名,并对文件名进行格式化,并存储到一个指定的集合中* @param dirPath 要遍历的目录,必须是一个目录* @param filePathList 将结果保存到指定的集合中* @param filter 只遍历目录中的指定类型文件,如果要遍历所有文件请设为null* @param isContainDir 是否包含目录文件* @param isFormat 是否格式化文件名* @param isShowNum 是否显示编号;isFormat=true时才有效* @param maxLeval 要遍历的最大层级(多少层目录),0代表遍历到最后一层;isFormat=true时才有效* @param currentLvel 递归调用时结束标记,请直接设为0;isFormat=true时才有效* @return 遍历到的文件数量,也即集合的大小*/private static int getDirFormatFilesNames(String dirPath, List<String> filePathList, FilenameFilter filter, boolean isContainDir, boolean isFormat,boolean isShowNum, int maxLeval, int currentLvel) {File dir = new File(dirPath);if (!dir.exists() || !dir.isDirectory()) throw new RuntimeException("目录不存在或不是一个目录");if (filePathList == null) throw new RuntimeException("指定的集合不存在");if (0 == maxLeval || currentLvel < maxLeval) {currentLvel++;File[] files = dir.listFiles();String filePath;for (int x = 0; x < files.length; x++) {if (isFormat) {if (isShowNum) filePath = getSpace(currentLvel) + currentLvel + "." + (x + 1) + ". " + files[x].getAbsolutePath();else filePath = getSpace(currentLvel) + files[x].getAbsolutePath();} else {filePath = files[x].getAbsolutePath();}if (files[x].isDirectory()) {//如果是目录if (isContainDir) {if (isFormat) {filePath = filePath + "\t\t★★★★★ 目录 ★★★★★";}filePathList.add(filePath);}getDirFormatFilesNames(files[x].getAbsolutePath(), filePathList, filter, isContainDir, isFormat, isShowNum, maxLeval, currentLvel);//递归} else { //如果是文件if (filter == null || filter.accept(dir, files[x].getName())) {//是否满足过滤规则filePathList.add(filePath);}}}}return filePathList.size();}/**** 格式化目录* @param level 目录层次,也即"| _ _"的个数*/private static String getSpace(int level) {StringBuilder sb = new StringBuilder();for (int x = 0; x < level; x++) {sb.append("| _ _ ");}return sb.toString();}
删除指定目录下的全部文件
/*** 删除一个带内容的目录。必须从里面往外删。* @param dirPath 要删除的目录,可以是文件。文件不存在时调用delete()方法不会报异常,但是返回false* @param isDeleateDir 是否删除目录*/public static void deleateDirFiles(String dirPath, boolean isDeleateDir) {File dir = new File(dirPath);if (dir.isDirectory()) {File[] files = dir.listFiles();//如果dir是文件的话,dir.listFiles()返回空for (File file : files) {if (file.isDirectory()) {deleateDirFiles(file.getAbsolutePath(), isDeleateDir);//递归} else {System.out.println("文件【" + file + "】删除结果:" + file.delete());}}System.out.println(" ★★★★★ 目录【" + dir.getAbsolutePath() + "】中的文件已全部删除");if (isDeleateDir) {System.out.println(" ★★★★★ 目录【" + dir + "】删除结果:" + dir.delete());//删除所有内部文件后再删除目录}} else {System.out.println("删除结果:" + dir.delete());}}
IO-File 文件 目录 基本操作 递归 遍历的更多相关文章
- Java File类应用:递归遍历文件夹和递归删除文件
要求: 1)采用递归遍历文件夹下的所有文件,包括子文件夹下的文件 2)采用递归删除文件下的所有文件 注意: 以下递归删除文件的方法,只能删除文件,所有的文件夹都还会存在 若要删除正文文件夹,可以在递归 ...
- Java IO file文件的写入和读取及下载
一.FileWriter 和BufferedWriter 结合写入文件 FileWriter是字符流写入字符到文件.默认情况下,它会使用新的内容代替文件原有的所有内容,但是,当指定一个true值作为F ...
- VC/MFC 下 递归遍历目录下的所有子目录及文件
在MFC下要实现文件夹的递归遍历,可用CFileFind类,依次读取文件夹下的子文件夹和文件,并判断通过判断是文件夹还是文件来决定递归遍历.递归遍历代码如下: /******************* ...
- 13、IO (File、递归)
File File类的概述和作用 * A:File类的概述和作用 * a: File的概念 * File类是文件和目录路径名的抽象表示形式 * Java中把文件或者目录(文件夹)都封装成File对象 ...
- 21_java之File对象和递归遍历
01IO技术概述 * A:IO技术概述 * a: Output * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 * b: Input * 把持久设备上的数据读取到内存中的这 ...
- java File基本操作,以及递归遍历文件夹
java 的文件操作,相对来说是比较重要的,无论是编写CS还是BS程序,都避免不了要与文件打交道,例如读写配置文件等.虽然现在很多框架都直接帮你做好了这一步! java.io.File 底层是调用与c ...
- IO流-递归遍历目录下指定后缀名结尾的文件名称
/* *自定义遍历目录下指定后缀名结尾文件的名称的方法: * * param file:指定目录 name:指定后缀名 */ 1 public static void FileName(File fi ...
- Java中递归的优缺点,Java写一个递归遍历目录下面的所有文件包括子文件夹里边的文件。
题目: 遍历出aaa文件夹下的文件 首先分析思路: 1.首先判断这个文件夹是否为文件,通过isFile()函数可以判断是否为文件. 2.然后通过isDirectory判断是否为目录. 3.如果是目录就 ...
- [19/03/29-星期五] IO技术_File(文件)类(可操作文件,不能操作其里边内容,位于Java.io 包中)&递归遍历
一.概念 java.io.File类:代表文件和目录. 在开发中,读取文件.生成文件.删除文件.修改文件的属性时经常会用到本类. 以pathname为路径创建File对象,如果pathname是相对路 ...
随机推荐
- MySQL命令mysqldump参数大全
参数参数说明--all-databases , -A导出全部数据库.mysqldump -uroot -p --all-databases--all-tablespaces , -Y导出全部表空 ...
- MyEclipse汉化后问题
今天为了教学生如何汉化MyEclipse10.7,所以讲IDE汉化了一下. 个人还是喜欢用英文版,所以就将D:\MyEclipse\MyEclipse 10目录下的配置文件myeclipse.ini里 ...
- new date() 函数在浏览器中的兼容问题!!
引言: 同一种语言javascript,在不同的浏览器中,存在语言兼容性问题,本质上是由于不同的浏览器是支持的语言标准和实现上各有差异.本文将基于new Date来创建Date对象来分析这个问题. v ...
- Secure CRT 如何连接虚拟机里面的CentOS系统 当主机没有网的时候 作者原创 欢迎转载
当家里没有网络的时候: 1.第一步:首先保证主机所有的网卡都没有分享连接给VM8这一块网卡 如图:这个设置就保证了无线网络连接这块网卡没有分享给VM8这一块网卡 第二步:启用VM8这一块网卡,右键en ...
- 自定义控件学习之菜鸟笔记一(Hello World)
一:引言 正在学习自定义控件的开发内容,做为菜鸟勤做笔记自然是必要任务了.本篇为本人学习自定义控件的学习笔记,借此和大家分享一下学习过程吧. 本人学习喜欢先看到具体的实例,然后再深入学习,故先从一个简 ...
- extjs中grid中行内文本或图片居中显示
我是看了网上写的方法调试自己的代码来实现的,实现的方式是当加载store数据时改变grid的行样式,源码如下: html代码: <div id="weatherP_grid-body& ...
- 记一次 nginx 504 Gateway Time-out
今天程序在执行一项excel导出任务的时候 出现了nginx超时的提示 nginx 504 Gateway Time-out 排查过程: 查看该任务 发现内容是一个数据量20000条信息 每条信息有5 ...
- Python自动化运维之5、内置函数
python3.x内置函数 官网详解 一些例子:后期慢慢接触到再补充 # help() 详细查看某个类有那些方法或者方法的具体使用 >>> help(str) >>> ...
- Android上传文件之FTP
android客户端实现FTP文件(包括图片)上传应该没什么难度.写下来就了为了记录一下,望能帮到新手. 需要用到 commons-net-3.0.1.jar,后面附上jar包. 直接上代码: /** ...
- 17 个 Linux 下用于 C/C++ 的最好的 IDE
C++,一个众所周知的 C 语言的扩展,是一个优秀的.强大的.通用编程语言,它能够提供现代化的.通用的编程功能,可以用于开发包括视频游戏.搜索引擎.其他计算机软件乃至操作系统等在内的各种大型应用. C ...