Java-进阶-day08-IO流_01
2020-01-12 13:23
197 查看
Java进阶-day08-IO流_01
今日内容
- File类
- 递归
一.File类
####.File类的概述和作用
- 什么是File类
File类是文件或者是目录(文件夹)的路径名抽象表现形式
我们只需要把字符串的路径封装成一个File类,至于这个路径到底存在不存在,File不知道
只能通过调用File类中的方法进行判断才能知道File类的路径是否是存在的
File类的构造方法 File类的常用构造方法
- File(String pathname)【重点掌握】 :将一个字符串路径封装成File对象
- File(String parent,String child) :传入一个父级路径和子级路径
- File(File parent,String child)【重点掌握】 :传入一个File类型的父级路径和子级路径
- 案例代码:
public class FileDemo01 { public static void main(String[] args) { File file = new File("D:\\test\\day07_作业.wmv"); // File file = new File("D:/test/day07_作业.wmv"); System.out.println(file); File f1 = new File("D:\\test","day07_作业.wmv"); System.out.println(f1); File srcFile = new File("D:\\test"); File f2 = new File(srcFile, "day07_作业.wmv"); System.out.println(f2); } }
File类之创建功能
- boolean createNewFile()【重点掌握】 :指定路径不存在该文件时时创建文件,返回true,否则返回false
- boolean mkdir() :当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false
- boolean mkdirs()【重点掌握】 :当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false
- 案例演示:
public class FileDemo02 { public static void main(String[] args) throws IOException { File f0 = new File("D:\\test\\abc.java"); boolean flag = f0.createNewFile(); System.out.println(flag); File f1 = new File("D:\\test\\itheima"); boolean flag1 = f1.mkdir(); System.out.println(flag1); File f2 = new File("D:\\test\\a\\b\\c"); System.out.println(f2.mkdirs()); } }
File类的判断功能
- boolean exists()【重点掌握】 : 判断指定路径的文件或文件夹是否存在
- boolean isDirectory()【重点掌握】: 判断当前的目录是否存在
- boolean isFile()【重点掌握】 : 判断当前路径是否是一个文件
File类之常用的获取方法
- public String getAbsolutePath() : 返回此File的绝对路径名字符串。
- public String getPath() : 返回构造方法中封装的路径字符串
- public String getName()【重点掌握】 : 获取的是文件或目录的名称。
- String[] list() : 以字符串数组的形式返回当前路径下所有的文件和文件夹的名称
- File[] listFiles()【重点掌握】 : 获取当前路径下所有的文件和文件夹,并将每一个文件或目录封装成File对象,并存入到File数组中
File类删除功能
- public boolean delete() : 删除由此抽象路径名表示的文件或目录
- 案例演示:
public class FileDemo03 { public static void main(String[] args) throws IOException { // abc.java 不带盘符的,就是相对路径,相对的路径就是当前project路径 // File f0 = new File("abc.java"); // File f0 = new File("day08\\abc.java"); // System.out.println(f0.createNewFile()); // 删除文件 delete不走回收站 // System.out.println(f0.delete()); // File f0 = new File("day08\\abc\\cde"); // f0.mkdirs(); // File f1 = new File(f0,"abc.java"); // f1.createNewFile(); // delete方法,删除的时候文件夹下的不能有内容 ,否则删不掉 File f0 = new File("day08\\abc"); System.out.println(f0.delete()); } }
总结:
绝对路径: 带盘符的路径
相对路径: 找多个文件或者是目录相同的路径
// 获取当前电脑中的所有的盘符 File[] files = File.listRoots(); System.out.println(Arrays.toString(files)); // boolean isHidden(): 判断一个文件是否是一个隐藏的文件 File file = new File("d:\\test\\day07_作业.wmv"); System.out.println(file.isHidden()); // long length(): 获取一个文件的大小 字节数 System.out.println(file.length());
二.递归
递归概述
- 什么是递归?
- 递归有哪些注意事项?
- 总结:
- 什么是递归
-
方法本身调用方法本身自己(自己玩自己)
- 注意事项
-
一定要有出口
- 递归的层次不要太深
-
递归的思想:
将一个大问题,分解成若干个小问题,再将若干个小问题,再去分解成若干个小问题
若干个小问题完成,最终这一个大的问题也就完成了
案例代码:
public static int dg(int n){ // 递归的出口 if (n == 1 || n == 2) return 1; return dg(n - 1) + dg(n - 2); }
递归求5的阶乘
- 需求: 5! -> 5 * 4 * 3 * 2 * 1 = 120
-
递归的思路:
5! = 5 * 4!
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1! -
案例代码:
public static int jc(int n) { if (n == 1) return 1; return n * jc(n - 1); }
递归遍历目录
- 案例需求:
给定一个路径(E:\itcast),通过递归完成遍历该目录下所有内容,并把所有文件的绝对路径输出在控制台
- 代码:
public class DiGuiDemo02 { public static void main(String[] args) { //根据给定的路径创建一个File对象 File srcFile = new File("E:\\教学视频\\web\\day01_MySQL基础"); //调用方法 getAllFilePath(srcFile); } //定义一个方法,用于获取给定目录下的所有内容,参数为第1步创建的File对象 public static void getAllFilePath(File srcFile) { //获取给定的File目录下所有的文件或者目录的File数组 File[] fileArray = srcFile.listFiles(); //遍历该File数组,得到每一个File对象 if(fileArray != null) { for(File file : fileArray) { //判断该File对象是否是目录 if(file.isDirectory()) { //是:递归调用 getAllFilePath(file); } else if (file.isFile()){ //不是:获取绝对路径输出在控制台 System.out.println(file.getAbsolutePath()); } } } } }
三.IO流
IO概述
- 问题: IO流是什么? 其作用又有哪些?
- 总结:
I: In 进入
O: Out 出
IO流的作用: 就是用来数据的持久化的
IO流的分类
-
按流向分:
输入流 - 输出流
按数据类型分:
-
字节流
IO体系结构顶层父类
字节流:
输入流 : InputStream输出流 : OutputStream
字符流:
-
输入流 : Reader
输出流 : Writer
字节输出流OutputStream介绍
- OutputStream的作用?
以字节流的形式 将内容写入到文件中
-
OutputStream定义了一些子类共性的成员方法:
public void close() :关闭此输出流并释放与此流相关联的任何系统资源。 public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。 public void write(byte[] b):将 b.length字节从指定的字节数组写入此输出流。 public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。 public abstract void write(int b) :将指定的字节输出流。
-
OutputStream 下的子类有哪些?
FileOutputStream - ObjectOutputStream
- BufferedOutputStream
FileOutputStream 构造方法:
-
FileOutputStream(String name)创建一个向具有指定名称的文件中写入数据的输出文件流。
直接写文件的路径
字节流写数据的三种方式
- void write(int b)将指定的字节写入此文件输出流 一次写一个字节数据
- void write(byte[] b)将 b.length字节从指定的字节数组写入此文件输出流 一次写一个字节数组数据
- void write(byte[] b, int off, int len)将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 一次写一个字节数组的部分数据
字节流写数据的两个小问题(理解即可)
- 字节流写数据如何实现换行?
windows:\r\n
linux:\n
mac:\n
- 这几个换行符不是跨平台的,在windows中写/r/n 不一定能在linux或mac中能使用
-
字节流写数据如何实现追加写入
FileOutputStream(String name,boolean append) - FileOutputStream(File file, boolean append)
- boolean append : 默认为false , 不追加数据,每一次写数据都是在文件的开头写,而不是末尾
- boolean append : true 追加数据
字节流读数据
- 字节输入流InputStream介绍
- FileInputStream 的作用?
从文件中读取数据的
-
构造方法 :
FileInputStream(File file) : 将要读取的数据源, 所在的目录位置, 以file对象的形式给出 - FileInputStream(String fileName) : 将要读取的数据源, 所在的目录位置, 以file对象的形式给出
一般方法 :
-
int read() : 从此输入流中读取一个字节数据。
InputStream 下的子类有哪些?
-
FileInputStream
- 一次读一个字节数据
-
步骤:
字节输入流读取数据的步骤 - 创建字节输入流对象
- 调用字节输入流对象的读数据方法
- 释放资源
案例演示:
public class FileInputStreamDemo01 { public static void main(String[] args) throws Exception { // 创建FileInputStream对象,并指定读取的文件 FileInputStream fis = new FileInputStream(new File("day08\\b.txt")); // 定义变量 记录读取的字节 int len; while ((len = fis.read()) != -1) { System.out.print((char)len); } // 释放资源 fis.close(); } }
- 一次读一个字节数组数据
- 总结:
数组的长度定义为多少?
1024 或 1024的整数倍
定义数组的作用是什么?
-
定义数组起到一个缓冲的作用
定义变量 len 的作用是什么?
-
记录了实际读取的字节数
- 一次读一个字节数组数据
- 总结:
数组的长度定义为多少?
1024 或 1024的整数倍
定义数组的作用是什么?
-
定义数组起到一个缓冲的作用
定义变量 len 的作用是什么?
-
记录了实际读取的字节数
new String(bys,0,len);
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Java基础进阶_day12_(其他IO流)
- Java基础--IO流_01
- Java语法进阶13-文件、IO流
- Java进阶01 String类
- Java笔记01——IO流
- Java进阶01 String类
- 网易云课堂Java进阶学习笔记系列01 -- 第3周 对象容器
- java基础学习_面向对象(下)01_day08总结
- Java进阶01 String类
- 01java基础进阶之抽象和封装
- JAVA进阶7.13——IO流补充
- Java进阶01 String类
- Java基础进阶_day08_(Map集合,可变参数)
- JAVA进阶-IO流(2)
- 0098 Java设计模式01--策略模式【进阶】
- Java-进阶-day10-IO流_03
- Java进阶01 String类
- java进阶8——IO流
- Java-进阶-day09-IO流_02
- Java进阶01 String类