Java之IO流超级全的总结 File类 InputStream OutputStream Reader Writer

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、流的分类

**2.1 按操作数据单位不同分为:字节流(8bit),字符流(16bit)****2.2 按数据流的流向不同分为:输入流、输出流****2.3 按流的角色的不同分为:节点流、处理流**
图解
在这里插入图片描述
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 {
   
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值