IO流学习笔记

简介:

  • IO:输入/输出 (Input/Output)

  • :是一种抽象概念,是对数据传输的总称,也就是说数据在设备之间的传输称为流,流的本质是数据传输

  • IO流就是用来处理设备之间的传输问题:

常见的应用:文件传输,文件复制,文件下载

作用:

  • 传输数据

  • 分类1:------按照流向分类

  • 输入流

  • 输出流

  • 分类二:------按照传输的数据分类

  • 字节流:传输的数据以字节(byte)为单位

  • 字符流:传输的数据以字符(char)为单位

  • 分类三:-----按功能分类

  • 包装流:对传参的数据进行加工

  • 节点流:直接从数据源到程序 或 从程序到指定位置

1、路径

  • 相对路径:

  • 从盘符的根目录开始书写

  • 相对路径:

  • 相对于当前文件的位置

  • 注意:

  • .(点)当前路径

  • ..(点点)上一级目录

  • java中的.起始与根项目下

2、字节流

  • 体系结构及其方法:

  • InputStream://字节输入流 //方法: //一次读取一个字节,返回值为读取到的字节,当返回值为-1时,表示读取结束 int read(); //一次读取一组字节,读取到数组b中,返回值为本次读取到的长度,将读取到的数据从0个位置开始存储 int read(byte b[]) //一次读取一组字节,读取带数组b中,返回值为本次读取到的长度,将读取到的数据从第 off个位置开始存储 len个 int read(byte b[], int off, int len) //关闭流 void close()

		     OutputStream://字节输出流
//方法

   //一次写入一个字节
   void write(int b)
        
    //一次写入一组字节   
    void write(byte[] b)
        
    //一次写入一组字节,从off位置开始写入len个    
    void write(byte[] , int off , int len)
        
    //冲刷管道    
    void flush()
    
    //关闭流    
    void.close()    
  • 文件流

  • 作用: 将数据写入到文件中 或 从文件中读取

  • FileInputStream:从文件中读取数据

  • FileOutputStream:将数据写入文件中

  • 注意:

  • //使用1惨构造器 当目标文件不存在,会帮助我们创建一级文件 当目标文件存在,会进行覆盖式创建; //使用 2 惨构造器 追加至目标文件

  • 内存流(字节数组流)

  • 作用:将数据写入到内存中,或 从内存中读取数据

  • ByteArrayInputStream

  • ByteArrayOutputStream

  • toByteArray()//获取内存流中的数据,返回一个数组形式

  • 缓冲流

  • 作用:提高代码的读写率

  • 注意,缓冲区默认的大写是8kb

  • BufferedInputStream

  • BufferedOutputStream

  • 对象流

  • 作用:读写对象

  • 注意:读写的对象所属的类必须实现序列号接口(Serializable),静态属性不参与序列号,瞬时属性(transient修饰)也不参与

  • ObjectInputStream

  • ObjectOutputStream

  • package ioflow.bytestream;


import java.io.*;

//对象流 ----  案例
public class ObjectStream {
    static String path = "./src/ioflow/bytestream/文本文件.txt";

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Person person = new Person("张三", "男", 18);

        read(person);
        write();

        File file = new File(path);
        file.delete();
    }

    static void read(Person person) throws IOException {
        FileOutputStream fileOutputStream = new FileOutputStream(path);

        ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
        objectOutputStream.writeObject(person);

        objectOutputStream.flush();
        objectOutputStream.close();
        String a = "11";
        String b = "22";
        String s = a + b;
        System.out.println(s);

    }

    static void write() throws IOException, ClassNotFoundException {
        FileInputStream fileInputStream = new FileInputStream(path);
        ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);

        Object o = objectInputStream.readObject();
        Person person = (Person) o;
        System.out.println(person);

        objectInputStream.close();
        fileInputStream.close();
    }

}

class Person implements Serializable {
    String name;
    String sex;
    int age;

    public Person(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }
}

3、字符流

  • 体系及其方法:

                              Reader:字符输入流
   //一次读取一个字符,返回值为读取到的字符数,当返回值为-1时,表示读取结束
    int read();
    
    //一次读取一组字符
    int read(char cbuf[])
    
    //一次读取一组字符长度,从off位置开始存储,读取len个,返回值为读取到的字符长度,当返回值为-1表示结束 
     int read(char cbuf[], int off, int len) 
     
     //关闭流   
     void close() 
                            Write:字符输出流
//方法

        //一次写入一个字符
        void write(int b)
            
        //一次写入一组字符  
        void write(char[] b)
            
        //一次写入一组字节,从off位置开始写入len个    
        void write(char[] , int off , int len)
            
        //一次写入一个字符串
        void write(String str)    
            
        //冲刷管道    
        void flush()
        
        //关闭流    
        void.close()    
  • 文件流

  • FileReaber

  • FileWriter

  • 注意:只能读取文本文件

  • 转换流

  • InputStreamReader

  • 将字节输入流 转换 为 字符输入流

  • OutputStreamWriter

  • 将字节输出流 转换 为 字符输出流

  • 注意:两惨的可以设定编码格式,编码格式要与文件的一致

  • 缓冲流

  • 作用:提高读写效率,应用于大形文件的读写

  • BufferedReader

  • readLine();读取一行

  • BufferedWriter

  • newLine();写入一个换行

  • 标准输出流

  • /r/n

4、文件(File)

  • 作用:

  • 表示文件 或 文件夹的类

1、//创建一个新文件
	createNewFile()
    
2、//创建一个新的一级目录   
	Mkdir()
    
3、//删除文件或空目录
    Delete()
    
4、//取得名字    
	getName()
    
5、//获取文件目录所在的目录  
	getParent()
    
6、//是否是文件    
	isFile()
    
7、//获取文件长度(字节大小)   
	length()
    
8、//修改文件名为
    renameTo() 

9、//判断File路径下的文件是否存在
    exists()    
    
10、//获取文件的绝对路径
    getAbsolutePath()
    
11、//获取文件上一级目录
	getParent()

12、//是否是目录
    ifDirectory()
    
13、//列出目录下所有的文件路径
    listFiles()
//案例
//递归查询文件操作
public class RecursiveQuery {
    //确定遍历的文件目录
    private static String path = "E:\\千锋学习资料23";
    public static void main(String[] args) {
        File file = new File(path);
        recursive(file);
    }
    private static void recursive(File file) {
        if (file.isFile()) {
            System.out.println(file.getAbsolutePath());
            return;
        }
        File[] files = file.listFiles();
        for (File f : files) {
            recursive(f);
        }
    }
}

5、文件过滤器

  • FileFilter:文件过滤器

  • FileNameFilter:文件名称过滤器

package ioflow.file;

import java.io.File;
import java.io.FilenameFilter;

//文件过滤器 ---------- 案例
public class FileFiltrationImplement {
    //确定遍历的文件目录
    private static String path = "E:\\千锋学习资料23\\day11\\笔记";

    public static void main(String[] args) {
        File file = new File(path);
        File[] files = file.listFiles(new FilenameFilter() {//实现匿名内部类FilenameFilter(文件名称过滤器)
            @Override
            public boolean accept(File dir, String name) {//dir是父级目录,name是列出后dir下的所有文件
                //判断如果文件以.md结尾的文件 返回为true 添加如数组 files
                if (name.endsWith(".md")) {
                    return true;
                }
                return false;//不添加如数组
            }
        });

        for (File f : files) {
            System.out.println(f.getAbsolutePath());
        }

    }
}

6、Properties

  • 作用:

  • 以键值对的形式 存储 一组数据

  • 方法:

  • load(输入流):加载 getProperty(key)通过key或去value store(输出流,注释):保存

package ioflow.properties;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

//properties应用 ------ 案例
public class PropertiesApplication {
    private static String path = "src//ioflow//properties//mysql.properties";

    public static void main(String[] args) throws IOException {
        Properties properties = new Properties();
        properties.put("userName", "root");
        properties.put("port", "8080");
        properties.put("password", "123456");

        //利用字符文件流(FileWriter) 保存properties内容
        FileWriter fileWriter = new FileWriter(path);
        properties.store(fileWriter, "MySql");//保存
        fileWriter.close();

        //读取后缀为properties配置文件的信息
        FileReader fileReader = new FileReader(path);
        properties.load(fileReader);//加载

        String userName = properties.getProperty("userName");//自动转换类型
        Object port = properties.get("port");//需要强转
        String password = properties.getProperty("password");

        System.out.println(userName);
        System.out.println(port);
        System.out.println(password);

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕清海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值