java基础之IO流及递归理解
一、IO流(简单理解是input/output流,数据流内存到磁盘或者从磁盘到内存等)
二、File类(就是操作文件和文件夹的)
1、FIleFile类构造方法
注意:通过构造方法创建的file对象是在内存里面,而不是在磁盘里面。
File(String pathname) 根据指定的路径名创建file对象
File(String parent, String child) 根据 parent 路径名字和 child 路径名创建一个File对象
File(File parent, String child) 根据 parent 文件对象和 child 路径名 创建一个file对象。
相对路径 :相对于某个项目的根路径;
绝对路径 : 完整的路径。
1、 创建文件和文件夹相关的方法
boolean createNewFile(); 如果创建成功,则返回true。如果文件已存在,它不会再次进行创建,直接返回false
注意: 如果你的文件路径不存在,则直接抛出异常
boolean mkdir(); 创建文件夹,如果创建成功,直接返回true。如果文件夹已存在,它不会再次进行创建,直接返回false
注意:如果你的文件路径不存在,直接返回false
mkdir 1次只能创建1个文件夹,因此我们统一使用mkdirs来创建多级文件夹
createNewFile和mkdir的区别:
1.createNewFile只能创建文件,mkdir只能创建文件夹
2.使用createNewFile的时候,如果路径不存在,直接抛出异常, 而mkdir是直接返回false
3.createNewFile和mkdir如果路径都存在,并且文件或者文件夹已经有了,它不会再次进行创建,直接返回false。
3、删除方法
删除相关的方法:
boolean delete() 删除文件或者文件夹
删除文件:
文件存在,删除成功,返回true
文件不存在,返回false
删除文件夹(必须是空的):
文件夹存在,删除成功,返回true
文件夹不存在,直接返回false
删除文件夹特点: 如果文件夹嵌套多层,它只能删除最里层(只能删除空文件夹),不能删除嵌套层
4、正斜杠与反斜杠
获取分隔符相关的字段(智能选择/或者\):
static String separator 优点:兼容性非常好;缺点: 维护性可读性太差了,用起来非常麻烦
在windows操作系统里面 正斜杠和反斜杠它们都支持 ---》windows操作系统默认就是 反斜杠
在linux操作系统只支持/它不支持反斜杠
综上,我们统一使用正斜杠 /
1、File类常用方法
boolean createNewFile() 创建文件
String getPath() 获取路径名(构造方法传递什么值,你这个方法就获取到对应的值)
String getAbsolutePath() 获取文件或者文件夹的绝对路径,返回字符串表示形式
File getAbsoluteFile() 获取文件或者文件夹的绝对路径,返回文件对象
boolean delete() 删除文件或者文件夹
boolean exists() 判断文件或者文件夹是否存在
String getName() 获取文件名或者文件夹名
String getParent() 获取父文件夹对应的路径 以字符串的形式展示
File getParentFile() 获取父文件夹对应的路径 以文件对象的形式展示
boolean isDirectory() 判断file对象是否是一个文件夹
boolean isFile() 判断file对象是否是一个文件
boolean mkdirs() 创建文件夹(可以创建多级文件夹)
2、File类常用转为数组的方法
只能获取下一级:
String[] list() 获取指定文件夹下面的所有文件和文件夹名字(只针对一级) 以字符串的形式展示
File[] listFiles() 获取指定文件夹下面的文件或者文件夹对象(只针对一级) 以File对象的形式展示
static File[] listRoots() 获取当前系统系统的根盘符
3、File类常用转为数组的方法并且带有过滤器
过滤的相关方法(也只能获取下一级的文件或者文件夹)
String[] list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
FilenameFilter 、FileFilter 都是接口
三、递归(指的就是不断重复的调用方法自身,注意:递归必须要留出口)
示例代码:
public class 递归Test2 {
public static void main(String[] args) {
递归Test2 Test = new 递归Test2();
Test.delete(new File("D:/a.java"), "java"); }
/**
* 定义一个方法,删除传入的一个文件夹以及下面的所有以Java为后缀的文件或者文件
* @param file
* @param suffix
*/
public void delete(File file,String suffix){
//如果file不为空并且是一个文件,就将这个文件转为File类型的数组
if(file != null && file.isDirectory()){
File[] list = file.listFiles();
//如果这个数组不等于null,并且长度不为零,就进行循环
if(list != null && list.length != 0){
for (File file2 : list) {
//如果这个文件不是空的,比你高且是以Java结尾的,那么就删除这个文件
if(file2 != null && file2.getName().endsWith(suffix)){
file2.delete();
}else{
//否则这就是一个文件夹,那么久继续进行最初的if,也就是掉用自己本身这个方法(迭代)
delete(file2,suffix);
}
}
}
}else if(file != null && file.isFile()){
if(file.getName().endsWith(suffix)){
file.delete();
}
} } }
java基础之IO流及递归理解的更多相关文章
- java基础之IO流(二)之字符流
java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...
- java基础之IO流(一)字节流
java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典 ...
- Java基础之IO流整理
Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...
- 【java基础】]IO流
IO流 概念: 流的概念源于unix中管道(pipe)的概念,在unix中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备,外部文件等 一个流,一定能够会有源和去向(目的地),他 ...
- java基础之 IO流
javaIO流 IO流 : (input output) 输入输出流 :输入 :将文件读到内存中 输出:将文件从内存输出到其他地方. IO技术的作用:主要就是解决设备和设备之间的数据传输问题 ...
- Java基础:IO流之字节流和字符流
1. 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端 ...
- java基础44 IO流技术(输出字节流/缓冲输出字节流)和异常处理
一.输出字节流 输出字节流的体系: -------| OutputStream:所有输出字节流的基类(抽象类) ----------| FileOutputStream:向文件输出数据的输出字节流(把 ...
- java基础之io流总结一:io流概述
IO流概念: 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.io流是实现输入和输出的基础,可以方便的实现数据的输入和输出操作. IO流的分类: 根据处理数据类型的不同分为:字符流 ...
- 【Java基础】IO 流
IO 流 File 类 java.io.File 类是文件和文件目录路径的抽象表示形式,与平台无关. File 能新建.删除.重命名文件和目录,但 File 不能访问文件内容本身. 如果需要访问文件内 ...
随机推荐
- codeforces-1144 (div3)
赛后经验:div3过于简单,以后不做了 A.存在以下情况即为NO 1.存在相同字母 2.最大字母-最小字母 != 字符串长度 #include <map> #include <set ...
- JavaEEMybatis基础整理
一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记 ...
- [面试]StringBuilder StringBuffer源码粘贴(并非源码分析, 请绕道)
StringBuilder StringBuffer 源码 这里只是我个人笔记, 并没有在这篇文章里做任何技术分享, 请同学们绕道- -.如果需要我会后期补上的..... 本来是想分析源码来着, 但是 ...
- DirectX11 With Windows SDK--27 计算着色器:双调排序
前言 上一章我们用一个比较简单的例子来尝试使用计算着色器,但是在看这一章内容之前,你还需要了解下面的内容: 章节 26 计算着色器:入门 深入理解与使用缓冲区资源(结构化缓冲区/有类型缓冲区) Vis ...
- uCosII中的任务
任务基本概念 任务是一个接受操作系统管理的独立运行单元,在uCosII中类似与普通平台上的main()函数,需要自己来保护其因调用或中断二产生的断点,所以需要一个自己的私有堆栈,即任务堆栈: 任务有两 ...
- RAID 划分
RAID0:N块盘组成,逻辑容量为N块盘容量之和:RAID1:两块盘组成,逻辑容量为一块盘容量:RAID3:N+1块盘组成,逻辑容量为N块盘容量之和:RAID5:N块盘组成,逻辑容量为N-1块盘容量之 ...
- golang range遍历是新创建对象还是创建对象的引用
golang range遍历是新创建对象还是创建对象的引用,通俗的讲就是range对range出来的对象的修改会不会同步到被遍历的那个数组.先看如下代码: package main import ( ...
- Java 实现TCP/IP协议的收发数据(服务端)
功能如下: 注: 只有服务端,没有客户端,测试时采用第三方软件作为客户端的. 收发数据目前能正常收发数据,只是中文的会变成乱码显示. 采用Thread类实现一个收发数据的线程. 服务端代码: impo ...
- L1-Day11
1.问问他能不能来.[我的翻译]Ask him wether he can come.[标准答案]Ask him whether/if he can come.[对比分析]天呐 whether都能拼写 ...
- jmeter分布式测试教程和远程的代理机无法连接网络的问题解决方法
一.Jmeter分布式执行原理: 1.Jmeter分布式测试时,选择其中一台作为控制机(Controller),其它机器做为代理机(Agent). 2.执行时,Controller会把脚本发送到每台A ...