Java—IO(学习至二哥的Java进阶之路)

本文详细介绍了JavaIO流的分类(字节流和字符流)、特性(先进先出、顺序存取和单向性)、以及FileInputStream、FileOutputStream、Reader和Writer的使用示例,展示了如何进行文件读写操作。
摘要由CSDN通过智能技术生成

深入了解 Java IO:各种流的分类与实际应用 | 二哥的Java进阶之路 (javabetter.cn)

指的是一连串的数据(字符或者字节),以一种以先进先出的方式发送消息的通道。

流的特性:

  • 先进先出:最先写入输出流的数据最先被输入流读取到。

  • 顺序存取:可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据。(RandomAccessFile除外)。

  • 只具有读或者只具有写的功能:每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作,对输出流只能进行写操作。

流的传输方式:

  • UTF-8 编码下,一个英文字母(不分大小写)为一个字节,一个中文汉字为三个字节;

  • 在 Unicode 编码中,一个英文字母为一个字节,一个中文汉字为两个字节。

字节流
  • 字节(byte)是计算机中用来表示存储容量的一个计量单位,通常情况下,一个字节有 8 位(bit)。

  • 字节流用来处理二进制文件,比如说图片、MP3 、视频等等。

字符流
  • 字符(char)可以是计算机中使用的字母、数字、和符号,比如说 A 1 $ 这些。

  • 字符流用来处理文本文件,文本文件可以看作是一种特殊的二进制文件,只不过经过了编码,便于人们阅读。

IO类

inputStream
int read() //用于顺序读取数据
int read(byte b[], int pos, int len) //从pos位置开始读取数据,读取长度为len然后放入到b数组中
long skip(long n) //跳过指定长度的字节数
int available() //返回可读的字节数
void close() //关闭流资源
ouputSream
void wirte(int b) //写入一个字节的数据
void write(byte b[], int pos, int len) //将数组b中从pos位置开始写入数据,长度为len
void flush() //强制刷新,将缓冲区中的数据写入到文件中
void close() //关闭流资源
Reader
int read() //读取单个字符数据
int read(char cbuf[], int pos, int len) //从pos位置开始读取数据,读取长度为len然后放入到cbuf数组中
long skip(long n) //跳过指定长度的字符数
int ready() //用于标志缓冲区是否是可读状态
void close() //关闭流资源
Writer
void wirte(int c) //用于顺序读取数据
void write(char b[], int pos, int len) //将数组b中从pos位置开始写入数据,长度为len
void flush() //强制刷新,将缓冲区中的数据写入到文件中
void close() //关闭流资源

示例:

FileInputStream和FileOutputStream的示例
  • FileInputStream和FileOutputStream的示例

  • outputStream = new FileOutputStream(fileName2);第二个参数为true的时候,指定追加写入

package com.cj.filestream;
​
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
​
/**
 * 读取一个文件的示例
 * 写入一个文件的示例
 */
public class InputOutputFile {
    /**
     * 读取文件
     */
    public static void readFile() throws IOException {
        FileInputStream fileInputStream = null;
        try {
            //声明一个int变量用于存储读取到的字节
            int b;
            //创建一个字节输入流,读取文件
            fileInputStream = new FileInputStream("file1.txt");
            //循环获取文件中的数据
            b = (char)fileInputStream.read();
            while(b != -1){
                System.out.println(b);
                b = (char)fileInputStream.read();
            }
        }catch (FileNotFoundException e){
            e.printStackTrace();
            System.out.println("文件读取异常");
        }
        catch (IOException e) {
            e.printStackTrace();
            System.out.println("文件读取数据输出异常...");
        }finally {
            fileInputStream.close();
        }
    }
​
    /**
     * 将fileName1写入到fileName2中
     * @param fileName1
     * @param fileName2
     */
    public static Boolean writeFile(String fileName1, String fileName2) throws IOException {
        //读取文件fileName1
        FileInputStream inputStream = null;
        try {
            inputStream = new FileInputStream(fileName1);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("文件读取异常" + fileName1);
            return false;
        }
​
        //创建一个文件输出流,用于存放读取的文件信息
        FileOutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream(fileName2);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("文件读取异常" + fileName2);
            return false;
        }
        //使用文件输出流的write方法将信息写入fileName2中
        try {
            int temp = inputStream.read();
            // temp == -1 的时候数据读取结束
            while(temp != -1){
                outputStream.write(temp);
                temp = inputStream.read();
            }
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("文件写入异常...");
            return false;
        }finally {
            inputStream.close();
            outputStream.close();
        }
        return true;
    }
    public static void main(String[] args) throws IOException {
        Boolean flag = writeFile("file1.txt", "file2.txt");
        if(flag){
            System.out.println("文件写入成功...");
        }else{
            System.out.println("文件写入失败...");
        }
    }
}
Reader和Writer的示例
  • Reader和Writer的示例

  • writer = new FileWriter(file2, true); 第二个参数可以省略,用于指定是否追加写入

package com.cj.fileReadWrite;
​
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
​
public class fileReadWrite {
    /**
     * 通过文件流读取数据
     * @param filename
     */
    public static void readFile(String filename) throws IOException {
        FileReader fileReader = null;
        try {
            //创建一个FileReader对象用于读取文件到流中
            fileReader = new FileReader(filename);
            //定义一个int变量存储读取的数据
            int temp = fileReader.read();
            while(temp != -1){
                System.out.println((char)temp);
                temp = fileReader.read();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("文件读取异常..." + filename);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("数据获取异常...");
        }finally {
            //关闭资源
            fileReader.close();
        }
    }
​
    /**
     *将file1的数据写入到file2中
     * @param file1
     * @param file2
     * @return
     */
    public static Boolean writeFile(String file1, String file2) throws IOException {
        //读取file1
        FileReader reader = null;
        try {
            reader = new FileReader(file1);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("文件读取异常..." + file1);
            return false;
        }
        //写入file2
        FileWriter writer = null;
        try {
            writer = new FileWriter(file2, true);
            //创建一个int变量存储读取数据
            int temp = reader.read();
            while(temp != -1){
                writer.write(temp);
                temp = reader.read();
            }
​
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("文件读取异常..." + file2);
            return false;
        }catch (IOException e) {
            e.printStackTrace();
            System.out.println("文件写入异常..."+ file2);
            return false;
        } finally {
            reader.close();
            writer.close();
        }
        return true;
    }
    public static void main(String[] args) throws IOException {
        readFile("file1.txt");
        Boolean flag = writeFile("file1.txt", "file3.txt");
        if(flag){
            System.out.println("文件写入成功...");
        }else{
            System.out.println("文件写入失败...");
        }
    }
}
  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值