I/O流基础

I/O流基础

I/O流分为很多种,按照操作数据的不同,可以分为字节流和字符流,按照数据传输的方向又可以分为输入流和输出流,程序从输入流中读取数据,向输入流中写入数据。

I/O流概述

在I/O包中:

  • 字节流的输入/输出分别用java.io.InputStreamjava.io.OutputStream表示。
  • 字符流的输入/输出分别用java.io.Readerjava.io.Writer表示。
    I/O流分类

字节流

在计算机中,无论是文本、图片还是音频和视频,都是以字节的形式存在的,因此要对这些文件进行传输就需要使用字节流,字节流是程序中最常用的流

根据数据传输方向的不同可将其分为字节输入流和字节输出流,在JDK中提供了两个抽象类InputStreamOutputStream表示字节输入流字节输出流,他们是字节流的两个顶级父类。

InputStream的常用方法:

方法声明功能描述
int read()从输入流中读取数据的下一个字节
int read(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中
int read(byte[] b,int off,int len)从输入流中读取若干字节,把它们保存到参数 b 指定的字节数组中,off 指定字节数组开始保存数据的起始下标,len 表示读取的字节数目
void close()关闭此输入流并释放与该流关联的所有系统资源

与InputStream对应的是OutputStream。OutputStream用与写数据,因此OutputStream提供了一些与写数据有关的方法。

InputStream的常用方法:

方法声明功能描述
void write(int b)将指定的字节写入此输出流
void write(byte[] b)将b.length个字节从指定的byte数组写入此输出流
void write(byte[] b,int off,int len)将指定byte数组中从偏移量off开始的len个字节写入输出流
void flush()刷新此输出流并强制写出所有缓冲的输出字节
void close()关闭此输出流释放与此流有关的所有系统资源

字节流的读/写操作

字节流的读操作:

import java.io.File;
import java.io.FileInputStream;

public class IORead {
    public static void main(String[] args) {
        FileInputStream stream = null;
        try {
        	// 文件的路径
            File file = new File("D:\\ideaCode\\testdemo\\src\\Test.txt");
            stream = new FileInputStream(file);
            int i = 0;
            while (true) {
                i = stream.read();
                if (i == -1) {
                    break;
                }
                // 十进制数据
                System.out.println(i);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

io流运行结果1
字节流的写操作:

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

public class IOWrite {
    public static void main(String[] args) {
        FileOutputStream stream = null;
        try {
            File file = new File("D:\\ideaCode\\testdemo\\src\\Test1.txt");
            stream = new FileOutputStream(file);
            String s = "hello";
            byte[] bytes = s.getBytes();
            for (byte aByte : bytes) {
                stream.write(aByte);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (stream!=null) {
                try {
                    stream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

字符流

字符流的目标通常是文本文件。Reader和Writer是java.io包中所有字符流的抽象父类。在java中,字符采用的是Uniocde字符编码,常见的字符输入/输出流是由Reader和Writer抽象类派生出来的,处理数据时以字符为基本单位。

字符流的读/写操作

字符流的读操作:

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

public class IORead {
    public static void main(String[] args) {
        FileReader stream = null;
        try {
            File file = new File("D:\\ideaCode\\testdemo\\src\\Test1.txt");
            stream = new FileReader(file);
            int i;
            while ((i=stream.read())!=-1) {
                System.out.println((char) i);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                stream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

io流结果2
字符流的写操作:

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;

public class IOWrite {

    public static void main(String[] args) {
        FileWriter stream = null;
        try {
            File file = new File("D:\\ideaCode\\testdemo\\src\\Test1.txt");
            stream = new FileWriter(file);
            String s = "hello,你好";
            stream.write(s);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (stream!=null) {
                try {
                    stream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

io流结果3

本文就说这么多,关于IO流还有缓冲流,文件删除等其他操作,感兴趣可以接着下去了解一下。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值