Java之IO流超级全的总结
文章目录
一、File类
1、File类的理解
1)File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹);
2)File类声明在Java.io包下;
3)File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法;
4)后续File类的对象会作为参数传递到流的构造器中,指明读取或写入的“终点”;
2、File类的实例化
2.1常用构造器
①File(String filePath) //filePath:文件的路径
File file1 = new File("hello.txt");//相对路径
File file2 = new File("D:\\java\\hello.txt");//绝对路径(下面有介绍)
System.out.println(file1);//直接打印内容就是一个绝对路径
//注意:new出来的File此时只是在内存层面,不在磁盘层面(不是持久化的)
②File(String parentPath,String childPath)
File file3 = new File("D:\\java","hel.txt");
③File(File parentFile,String childPath)
File file3 = new File(file3,"he.txt");
2.2路径的分类
相对路径:相较于某个路径下,指明的路径
绝对路径:包含磁盘在内的文件或文件目录的路径
说明:
IDEA中:①开发中使用JUnit中的单元测试方法测试,相对于路径即为当前Module下;②使用main()方法测试,相对路径即为当前的Project下。
eclipse:不管使用单元测试还是main()方法测试,相对路径都是当前的项目所在路径。
2.3路径分隔符
上面使用的:D:\\java\\hello.txt–>其中的\就是分隔符(我是windows系统)
windows和DOS系统默认使用“\”来表示
UNIX和URL使用“/”表示
3、File类的常见方法
1、File类的获取功能
public String getAbsolutePath():获取绝对路径
public String getPath():获取路径
public String getName():获取名称 public String
getParent():获取上层文件目录路径。若无,返回null public long
length():获取文件长度(即:字节数)。不能获取目录长度 public long
lastModifiled():获取最后一次的修改时间,毫秒值
2、File类的判断功能
public boolean isDirectory():判断是否是文件目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读 public
boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏
3、File类的重命名功能
public boolean renameTo(File dest):把文件重命名为指定的文件路径
4、File类的创建功能
public boolean createNewFile():创建文件。若文件存在,则不创建返回false,磁盘层面的存储
public boolean mkdir():创建文件目录,若文件目录存在,则不创建返回false,如果此文件目录的上层目录不存在,也不创建
public boolean mkdirs():创建文件目录,若文件目录存在,则不创建返回false,如果此文件目录的上层目录不存在,则一并创建
5、File类的删除功能
public boolean delete():删除文件或者文件夹
删除注意事项:Java中删除不走回收站。要删除一个文件目录,请注意文件目录内不能包含文件或者文件目录。
二、IO流原理及流的分类
1、IO流原理,内存针对于文件的操作
图来源于尚硅谷
2、流的分类
图解
IO流体系,主要用标蓝部分的流
三、IO流之节点流的读入+写出,字符流演示
1、FileReader(节点流,字符流)–>磁盘到内存(读入)
关于我项目中的Module(day0618)下的Hello.txt文件内容的读入程序中,并打印在控制台的演示说明:
1、read()理解:返回读入的一个字符,如果达到文件末尾,返回-1;
2、异常的处理:为了保证资源一定可以执行关闭操作,需要使用try-catch-finally处理,其中要先判断一下流是否成功被开启,要是存在流,才进行关闭,避免空指针异常;
3、读入的文件一定要存在,否则就会报FileNotFoundException(系统找不到此文件)。
演示Hello.txt:
演示代码:
package io;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderTest {
public static void main(String[] args) {
FileReader fr = null; //先把1-3步包起来进行try-catch机会自动的生成这句代码
try {
// 1、实例化File类的对象,指明要操作的文件
File file = new File("day0618\\Hello.txt");//day0618是我IDEAModule名
// 2、提供具体的流
fr = new FileReader(file);
// 3、数据的读入
//read()方法:空参
// int len;
// while ((len = fr.read()) != -1) {
// System.out.print((char) len);
// }
char[] cbuf = new char[10];
int len;
while ((len = fr.read(cbuf)) != -1) {
//方式一
// 错误方法:
// for (int i = 0; i < cbuf.length; i++) {
// System.out.println(cbuf[i]);
// }
// 正确方法:
// for (int i = 0; i < len; i++) { //加入多少数据进cbuf就遍历几个数据出来
// System.out.println(cbuf[i]);
// }
//方式二
//错误方法:
// String str = new String(cbuf);
// System.out.println(str);
// 正确方法:
String str = new String(cbuf,0,len);
System.out.print(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 4、流的关闭操作
try {