JAVA—IO流

        存储数据的方案File和文件数据的操作IO流,学习字节流和字符流,了解框架和IO框架Commons IO

目录

1.File

(1)创建对象

(2)常用方法 

【1】判断类型,获取信息

【2】创建文件,删除文件

​编辑

【3】遍历文件夹

2.方法递归

(1)递归形式

(2)应用

(3)算法思想

(4)*文件搜索

3.字符集

(1)字符集介绍

(2)编码,解码操作

4.IO流

(1)IO流概述

【1】IO流介绍

【2】应用场景

 【3】分类

(2)字节流

【1】文件字节输入流

【2】文字字节输出流

【3】案例

(3)释放资源的方式

【1】try-catch-finally

【2】try-with-resource

(4)字符流

【1】文件字符输入流

【2】文件字符输出流

(5)缓冲流

【1】字节缓冲流

【2】字符缓冲流

【3】性能分析

(6)转换流

 【1】字符输入转换流

【2】字符输出转换流

(7)打印流

(8)数据流

(9)序列化流

(10)内容补充:IO框架


1.File

        是java.io包下的类,File类的对象,代表当前操作系统的文件。只能对文件本身进行操作,不能读写文件里存储的数据

(1)创建对象

构造器 说明
public File (String pathname) 根据文件路径创建文件对象
public File(String parent,String child) 根据父路径和子路径名字创建文件对象
public File(FIle parent,String child) 根据父路径对应文件对象和子路径名字创建文件对象
package File_IO.file;

import java.io.File;

public class Text {
    public static void main(String[] args) {
        //1.创建文件对象
        // 路径分割符 \\
        File f1 = new File("C:\\Users\\22935\\IdeaProjects\\JAVA_study\\data.txt");
        System.out.println(f1.length()); //文件大小 字节个数

        //File对象是可以之地啊一个不存在的文件路径
        File f2= new File("D:/resource");
        System.out.println(f2.length());
        System.out.println(f2.exists()); //判断是否为空文件 //false

        //需要定位的文件在模块里 如何定位
        //绝对路径 //带盘符
       //  File f4 = new File("C:\\Users\\22935\\IdeaProjects\\JAVA_study\\Collection\\src\\File_IO\\file\\data.txt");
        //相对路径(重点)不带盘符 默认到工程下去找文件
        File f4 = new File("JAVA_study\\Collection\\src\\File_IO\\file\\data.txt");
        System.out.println(f4.length());
    }
}

(2)常用方法 

【1】判断类型,获取信息
方法名 说明
public boolean exists() 判断当前文件对象,对应的的文件路径是否存在,存在返回ture
public boolean isFile() 判断当前文件对象指代的是否是文件,是则返回ture
public boolean isDirectory() 判断当前文件对象指代的是否是文件夹,是则返回true
public String getName() 获取文件的名称(包含后缀)
public long length() 获取文件的大小,返回字节个数
public long lastModified() 获取文件的最后修改时间
public String getPath() 获取创建文件对象时,使用的路径
public String getAbsolutePath() 获取绝对路径

package File_IO.file;

import java.io.File;
import java.text.SimpleDateFormat;

public class Text1 {
    public static void main(String[] args) {
        File f1 = new File("C:\\Users\\22935\\IdeaProjects\\JAVA_study\\data.txt");
        //public boolean exists()	判断当前文件对象,对应的的文件路径是否存在,存在返回ture
        System.out.println(f1.exists());

        //public boolean isFile()	判断当前文件对象指代的是否是文件,是则返回ture
        System.out.println(f1.isFile());

        //public boolean isDirectory()	判断当前文件对象指代的是否是文件夹,是则返回true
        System.out.println(f1.isDirectory());

        //public String getName()	获取文件的名称(包含后缀)
        System.out.println(f1.getName());

        //public long length()	获取文件的大小,返回字节个数
        System.out.println(f1.length());

        //public long lastModified()	获取文件的最后修改时间
        long time = f1.lastModified();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH :mm:ss");
        System.out.println(sdf.format(time));

        //public String getPath()	获取创建文件对象时,使用的路径
        System.out.println(f1.getPath());

        //public String getAbsolutePath()	获取绝对路径 //相对路径可以转换到绝对路径
        System.out.println(f1.getAbsoluteFile());
    }
}

【2】创建文件,删除文件
方法名 说明
public boolean creatNewFile()
创建一个新文件,内容为空 创建成功返回true
Public boolean mkdir() 
用于创建文件夹 注意只能创建一级文件夹
public boolean mkdirs()
用于创建文件夹 注意 可以创建多级文件夹
public boolean delete()
删除文件,空文件 注意 不能删除非空文件

package File_IO.file;

import java.io.File;
import java.io.IOException;

public class Text2 {
    public static void main(String[] args) throws IOException {
        //1.public boolean creatNewFile() 创建一个新文件,内容为空 创建成功返回true
        //如果文件已经创建 那么此时再进行创建会返回失败
        File f1  = new File("C:/Users/22935/IdeaProjects/JAVA_study/data2.txt");
        System.out.println(f1.createNewFile());

        //2.Public boolean mkdir() 用于创建文件夹 注意只能创建一级文件夹
        File f2 = new File("D:/resource");
        System.out.println(f2.mkdir());

        //3.public boolean mkdirs() 用于创建文件夹 注意 可以创建多级文件夹
        File f3 = new File("D:/resource/aaa/bb/cc");
        System.out.println(f3.mkdirs());

        //4.public boolean delete() 删除文件,空文件 注意 不能删除非空文件
        //空文件夹也可以删除
        System.out.println(f1.delete());
    }
}

【3】遍历文件夹
方法名 说明
Public string[ ] list()
获取当前目录下所有的一级文件名称到一个字符串数组
public File[ ] listFiles()
获取当前目录下所有等待一级文件对象到一个对象数组中
package File_IO.file;

import java.io.File;

public class Text3 {
    public static void main(String[] args) {
    //1.public String [] list() 获取当前目录下所有的一级文件名称到一个字符串数组
        File f1 = new File("D:/23130405班");
        String [] name = f1.list();
        for (String s : name) {
            System.out.println(s);
        }
    //2.public File [] listFile() (重点) 获取当前目录下所有等待一级文件对象到一个对象数组中
        File [] files = f1.listFiles();
        for (File file : files) {
            System.out.println(file.getAbsolutePath());
        }
    }
}

使用listfiles方法的注意事项

  • 当主调是文件或路径不存在时,返回null。
  • 当主调是空文件时,返回一个长度为零的数组。
  • 当主调是一个有内容的文件夹时,将里面一所有的一级文件和文件夹的路径都放在file数组中返回
  • 当主调是一个文件夹里面有隐藏文件时,将里面所有的文件和文件路径都放在file数组中,包括隐藏文件
  • 当主调是一个文件夹,但没有权限访问该文件夹时返回null。 

2.方法递归

        方法递归是一种算法,广泛使用,形式上来看是方法调用自身的形式

(1)递归形式

  •  直接递归:方法自己调用自己
  •  间接递归:调用其他方法,其他方法又调回自己

(2)应用

需求:计算n的阶乘

package File_IO.file;

public class Text4 {
    public static void main(String[] args) {
        System.out.println(fun(5));
    }

    public static int fun(int n){
        if(n == 1){return 1;}
        else {return fun(n-1)*n;}
    }
}

(3)算法思想

算法三要素

  • 递归公式
  • 递归的终结点
  • 递归的方向必须走向终结点

(4)*文件搜索

需求:从D盘中,搜索找到“QQ.exe”这个文件,找到后输出其位置

package File_IO.file;

import java.io.File;

public class Text5 {
    public static void main(String[] args) {
        search(new File("D:/"),"QQ.exe");
    }
     public static void search(File file,String filename){
        //1.拦截非法情况
         if(file == null || !file.exists() || file.isFile()){
             return;
         }
         File [] files = file.listFiles();
         if(files != null && files.length != 0){
             for (File f : files) {
                 if(f.isFile()){
                     if(f.getName().equals(filename)) {
                         System.out.println("已找到文件位置");
                         System.out.println(f.getAbsolutePath());
                     }
                 }
                 else{
                     search(f,filename);
                 }
             }
         }
     }
}

 需求:删除非空文件夹

package File_IO.file;

import java.io.File;

public class Text6 {
    public static void main(String[] args) {
        //目标 删除非空文件夹,独立功能独立成方法
      File file = new File("D:/");
      deleteDir(file);
    }

    public static void deleteDir(File dir){
    if(dir  == null ||!dir.exists()){
        return;
    }
    if(dir.isFile()){
        dir.delete();
        return;
    }
    File[] files = dir.listFiles();
    if(files == null){
        return;
    }

    if(files.length == 0){
        dir.delete();
        return;
    }
        for (File file : files) {
            if(file.isFile()){
                file.delete();
            }
            else{
                deleteDir(file);
            }
        }
        dir.delete();
    
    }
}

3.字符集

(1)字符集介绍

标准Ascll字符集

美国信息交换标准化码  英文,符号 共128个字符 首尾是0

GBK(汉字内码)

包含两万多个汉字字符(一个中文字符编码成两个字节的形式)兼容Ascll字符集

Uniccode字符集

(统一码,万国码)国际组织制定2,可以容纳世界上所有文字,所有字符集

  UTF-32 4个字节表示一个字符 空间占用比较大 通讯效率低

  UTF-8   采用可变编码方案 分四个长度区 1,2ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值