File类
1. 概述
-
代表当前操作系统的文件对象
- 是用来操作操作系统的文件对象的,删除文件,获取文件,创建文件(文件夹)...
-
创建对象的API
// 包: java.io.File // 构造器 public File(String pathname) public File(String parent,String child) public File(File parent, String child)
-
创建文件对象的格式
File f = new File("绝对路径/相对路径");
-
小结
- File创建文件对象,路径可以是绝对路径,相对路径,文件路径,文件夹路径
能用相对路径就用相对路径,相对路径只有项目中的文件才能用!!!
- File创建文件对象,路径可以是绝对路径,相对路径,文件路径,文件夹路径
2. 获取功能的方法
// 返回此File的绝对路径名字符串
public String getAbsolutePath();
// 获取创建文件对象的时候用的路径
public String getPath();
// 返回由此File表示的文件或目录的名称
public String getName();
// 返回由此File表示的文件的长度
public long length();
// 返回文件的最后修改时间
public long lastModified()
3. 判断功能的方法
// 此File表示的文件或目录是否实际存在
public boolean exists();
// 此File表示的是否为目录
public boolean isDirectory();
// 此File表示的是否为文件
publicboolean isFile();
4. 创建和删除的方法
// 当且仅当具有该名称的文件尚不存在时,创建一个新的空文件夹
public boolean createNewFile();
// 删除由此File表示的文件或目录(只能删除空目录)
public boolean delete();
// 创建由此File表示的目录.(只能创建一级目录)
public boolean madir();
// 创建由此File表示的目录,包括任何必须但不存在的父目录
public boolean madirs();
5. 目录的遍历
// 获取当前目录下所有的一级文件名称到一个字符串数组中去返回
public String[] list();
// 获取当前目录下所有的一级文件对象到一个文件对象数组中去返回(常用.重点)
public File[] listFiles();
// 这些API只能得到一级文件对象操作
递归
1. 概述
- 方法在方法中又调用了自己
- 直接递归: 自己的方法调用自己
- 间接递归: 自己的方法调用别的方法,别的方法又调用自己
- 递归如果控制的不恰当,会形成递归的死循环,从而导致栈内存溢出错误
2. 应用理论
-
核心三要素
- 递归的终结点
- 递归的公式
- 递归的方向必须走向终结点
有规律的递归可以直接创建公式套用方法,非规律的递归只能自己设计方法
3. 拓展: 文件的搜索
字符集
- 不同国家有不同的编码,中国默认是GBK编码,中文一般占2个字节.国际通用编码UTF-8,中文一般占3个字节,所以不同编码直接字节转换过程中可能会出现乱码现象
IO流
1. 概述
- IO流: 输入(Input)/输出(Output)
- File类只能操作文件对象本身,不能读写文件对象的内容
- 读写数据内容,应该使用IO流
- IO流是一个水流模型:IO理解成水管,数据理解成水流
-
IO流的分类
-
按照流的方向分为: 输入流, 输出流
-
输出流
- 以内存为基准,把内存中的数据写出到磁盘文件或者网络介质中去的流称为输出流
- 输出流的作用是写数据到文件,或者写数据发送给别人
-
输入流
- 以内存为基准,把磁盘文件中的数据或者网络中的数据读入到内存中去的流称为输入流
- 输入流的作业是读取数据到内存
-
输出流
-
按照流的内容分为: 字节流, 字符流
- 字节流: 流中的数据的最小单位是一个一个的字节,这个流就是字节流
- 字符流: 六中的数据的最小单位是一个一个的字符,这个流就是字符流
-
流大体分为四大类
-
字节输入流InputStream
- 以内存为基准,把磁盘文件中的数据或者网络中的数据以一个一个的字节的形式读入到内存中去的流称为字节输入流
-
字节输出流OutputStream
- 以内存为基准,把内存中的数据以一个一个的字节写出到磁盘文件或者网络介质中去的流称为字节输出流。
-
字符输入流Reader
- 以内存为基准,把磁盘文件中的数据或者网络中的数据以一个一个的字符的形式读入到内存中去的流称为字符输入流
-
字符输出流Writer
- 以内存为基准,把内存中的数据以一个一个的字符写出到磁盘文件或者网络介质中去的流称为字符输出流。
-
字节输入流InputStream
-
按照流的方向分为: 输入流, 输出流
2. 分类
-
字节输入流
文件字节输入流FileInputStream
-
作用是以内存为基准,把磁盘文件中的数据以一个一个的字节的形式读入到内存中的流
// 构造器 public FileInputStream(File file); public FileINputStream(String file); // 方法 public int read(); // 每次读取一个字节,返回这个字节的数据,读取完毕返回-1 int i = is.read(); public int read(byte[] b); //每次读取一个字节数组的数据到字节数组中去,返回读取了多少个字节数,读取完毕返回-1 // 方式一 byte[] buffer = new byte[length]; int len = 0 ; while((len = is.read(buffer)) !=-1){ String rs = new String(buffer, 0 , len); System.out.print(rs); } // 方式二 byte[] buffer = is.readAllBytes(); String rs = new String(buffer); System.out.println(rs); // 该方式无法避免中文乱码
-
字节输出流
文件字节输出流FileOutputStream
-
作用是以内存为基准,把内存中的数据以字节的形式写出到磁盘文件中去的流
// 构造器 public FileOutputStream(File file); public FileOutputStream(String file); public FileOutputStream(File file,boolean append); // 追加数据的管道 public FileOutputStream(String file,boolean append); //追加数据的管道 // 方法 public void write(int b); // 写一个字节出去 public void write(byte[] buffer); // 写一个字节数组出去 public void write(byte[] b,int off, int len); // 写一个字节数组的一部分出去 /* 输出流默认是覆盖之前全部内容!!!! 如果要追加数据应该在构造器的第二个参数加上: true */
-
字符输入流
- 文件字符输入流FileReader
- 作用是以内存为基准,把磁盘文件的数据以字符的形式读取到内存中去的流,一般用于读取文本文件
// 构造器 public FileReader(File file); public FileReader(String file); // 方法 public int read(); // 读取一个字符的编号返回,如果读取完毕返回的是-1 public int read(char[] cbuf); // 读取一个字符到一个字符数组中去,返回读取的字符个数,读取完毕了返回-1 // 读取文本文件建议用字符流
-
字符输出流
文件字符输出流FileWriter
-
作用是以内存为基准,把内存中的数据以字符的形式写出到磁盘文件中去,一般用于写数据到文本文件
// 构造器 public FileWriter(File file); public FileWriter(String file); public FileWriter(String file,boolean append); public FileWriter(String file, boolean append); // 方法 public void write(int c); // 写一个字符出去 public void write(String str); // 写一个字符串出去 public void write(char[] cbuf); // 写一个字符数组出去 public void write(String str,int off, int len); // 写一个字符串的一部分出去
- IO流是读写传输数据的,IO流有很多种,每种流有自己的功能特点。