JAVA- IO流

目录流的分类文件流案例一:FileReaderFileWriter文件复制FileInputStream非文本文件复制( FileInputStream、FileOutputStream)缓冲流非文本文件复制 BufferedInputStream、BufferedOutputStream文本复制(BufferedReader、BufferedWriter)文件加密转换流字符集标准输入输出流 \打印流\数据流对象流随机存取文件流JDK9新特性 NIO.2中Path、Paths、Files类的使用按数据单位分
摘要由CSDN通过智能技术生成

目录

File类 

File类的使用

构造器

 常用方法

IO流

流的分类

文件流

案例一:FileReader

FileWriter

文件复制

FileInputStream

非文本文件复制( FileInputStream、FileOutputStream)

缓冲流

非文本文件复制 BufferedInputStream、BufferedOutputStream

文本复制(BufferedReader、BufferedWriter)

文件加密

转换流

字符集

标准输入输出流 \打印流\数据流

对象流

随机存取文件流

JDK9新特性 

NIO.2中Path、Paths、Files类的使用


File类 

File类的使用

1、File类的一个对象,代表一个文件或一个文件目录(俗称文件夹)

2、 File类生命在java.io包下

3. File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,
    并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用I0流来完成。

4.后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的”终点".

构造器

 

 代码:输出文件路径,并没有创建文件

    public static void main(String[] args) {
        //构造器1:
        File file1=new File("hello.txt");  //相对路径,相对于当前nodule
        File file2=new File("D:\\IDEA项目\\hi.txt"); //绝对路径
        System.out.println(file1);//hello.txt
        System.out.println(file2);//D:\IDEA项目\hi.txt

        //构造器2
        File file3=new File("D:\\IDEA项目","1.txt");
        System.out.println(file3);//D:\IDEA项目\1.txt

        //构造器3
        File file4=new File(file3,"2.txt");
        System.out.println(file4);//D:\IDEA项目\1.txt\2.txt

    }

 常用方法

public String getAbsolutePath():获取绝对路径

public String getPath():获取路径

public String getName():获取名称

public String getParent():获取上层文件目录路径,若无,返回null

public Long Length():获取文件长度(字节数)。不能获取目录长度

public Long lastModified() :获取最后一次修改的时间,毫秒数

下面两个方法都适用于文件目录

public String[ ] List():获取指定目录下的所有文件或者文件目录的名称数组

public File[ ] ListFiles():获取指定目录下的所有文件或者文件目录的File数组

public boolean isDirectory():判断是否是文件目录

public boolean isFile() :判断是否是文件

public boolean exists():判断是否存在

public booLean canRead() :判断是否可读

public boolean canWrite():判断是否可写

public boolean isHidden() :判断是否隐藏

 移动文件:

public boolean renameTo(File dest):把文件重命名为指定的文件路径

比如:file1.renameTo(file2)为例,将file1重命名为file2

要想保证返回true,需要file1在硬盘中是存在的,file2是不存在的

创建硬盘中对应的文件或文件目录

public boolean createNewFile() :创建文件。若文件存在,则不创速,返回false

public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建

public boolean mkdirs() :创建文件目录。如果上层文件目录不存在,一并创建

删除磁盘中的文件或文件目录
public boolean delete(): 删除文件或者文件夹

删除文件夹时必须先把文件夹内的文件删光才可以删除文件夹
删除注意事项:
Java中的删除不走回收站。

 代码:

    public static void main(String[] args) throws IOException {
        File file1 = new File("hi.txt");
        if (!file1.exists()) {
            file1.createNewFile();
            System.out.println("创建成功");
        } else {//文件存在
        file1.delete();
        System.out.println("删除成功");
    }

IO流

流的分类

按数据单位分为字节流和字符流

按照流向分为输入流和输出流

按照角色为节点流和处理流

                                                                  IO流体系

文件流

访问文件的那行是节点流 (文件流)

FileInputStream 方法: ( read(byte[ ]  buffer) )

FileOutputStream  方法: ( write(byte[ ]  buffer,0,len) )

FileReader  方法: ( read(char[ ]  cbuf) )

FileWrite 方法: ( write(char[ ]  cbuf,0,len) )

案例一:FileReader

read():返回读入的一个字符,如果达到文件末尾返回-1

异常的处理,要用到try-catch-finally,否则流出异常会无法关闭,或者没有读取到文件时关闭时空指针异常。

读入的文件不存在会出现FileNotFoundException

 FileReader fileReader = null;
        try {
            File file = new File("D:\\IDEA项目\\day106\\hello.txt");

            //提供具体的流
            fileReader = new FileReader(file);

            //数据读入
            //read():返回读入的一个字符,如果达到文件末尾返回-1
            int data = fileReader.read();
            while (data != -1) {
                System.out.print((char) data);
                data = fileReader.read();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4、回收流
            try {
                if(fileReader!=null) //判断不为空才释放
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

 read()的重载:read(char[] cbuf):返回每次读入cbuf数组中每个字符的个数,达到文件末尾,返回-1。

注意:cbuf [ 5 ] 数组每次从file中读取5个字符,如果文件中剩余字符不足五个,那就把从0开始读进数组中,但是数组后面的上次读取的数据不会清空。

例:helloworld123,输出的字符数组分别为hello   world   123ld

FileWriter

从内存中写出数据到硬盘的文件里

 1、输出操作,对应的File可以不存在,并不会报异常

2、File对应的硬盘中文件如果不存在,在输出的过程中,会自动创建此文件

      File对应的硬盘中文件如果存在:

              如果构造器是FileWriter(file,false)/ FileWriter(file):对原有文件覆盖

               如果流使用的构造器是FileWriter(file,true):不会对原文件覆盖,而是在原文件上追加

public static void main(String[] args) {
        FileWriter fw = null;
        try {
            //1、提供File类对象,指明写出到的文件
            File file = new File("hello1.txt");

            //2、提供FileWriter对象,用于数据写出
            fw = new FileWriter(file);

            //3、写出操作
            fw.write("hello!");
            fw.write("hello!");

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //4、资源关闭
            try {
                if(fw!=null)
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

文件复制

例:从一个文件中读取内容放入另一个文件中

注:不能使用字符流处理字节文件(例如图片)

public static void main(String[] args) {
        FileReader fr = null;
        FileWriter fw = null;

        try {
            //1、提供File类对象,指明写出\读入的文件
            File file1 = new File("hello.txt");
            File file2 = new File("hello1.txt");

            //2、提供FileWriter\FileReader对象,用于数据写出\读入
            fr = new FileReader(file1);
            fw = new FileWriter(file2);

            //3、操作
            char[] cbuf = new char[5];
            int len;  //记录每次读取到cbuf数组中的长度
            while ((len = fr.read(cbuf)) != -1) {//判断没有读取到末尾
                fw.write(cbuf
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值