Java基础总结-IO流


流是什么?
流是程序与外部的数据传输通道。输入流可以看作一个输入通道,输出流可以看作一个输出通道。

输入流,输出流

按照流的方向分为:输入流,输出流。
流入流出是针对内存而言,流出内存就是输出流,向内存写入就是输入流。

输入流示例:

//获取⽤键盘输⼊数据的常⽤方法
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String s = input.readLine();

输出流示例:

未完待续…

OutPutStreamWriter

OutPutStreamWriter 将字节流转成字符流

字节流,字符流

按处理数据单位不同分为字节流、字符流
字节流:每次读取(写出)一个字节
字符流:每次读取(写出)两个字节

字符流的由来:

字符流是由Java虚拟机把字节转换而来的,过程耗时,不知道编码类型会出现乱码.为了更加方便读写字符类型的文件,提供了一个直接操作字符的接口.
(我的理解是,字符流就是在字节流的基础上多了转码的操作)

字节流:可以直接操作字节数据(byte数据)的流对象
字符流:可以直接操作字符数据(char数据)的流对象
https://blog.csdn.net/itqcyyl/article/details/81531801
https://blog.csdn.net/jc_benben/article/details/80196502
https://blog.csdn.net/qq_39304441/article/details/99670966

字符流与字节流转换(字符流输入输出原理)

文本文件在硬盘中是以字节流的形式存储,通过InputStreamReader读取字节转化为字符流给程序处理,程序处理的字符流通过OutputStreamWriter转换为字节流保存。

InputStreamReader 是字节到字符的桥梁,完成byte流解析为char流,按照编码解析
OutputStreamWriter 是字符到字节的桥梁,提供char流到byte流,按照编码处理

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class IOTest {

    public static void main(String[] args) {
        String result = null;

        File fileIn = new File("E:/test/test1.txt");
        File fileOut = new File("E:/test/test2.txt");

        InputStreamReader inStream = null;
        OutputStreamWriter outStream = null;
        try {
            inStream = new InputStreamReader(new FileInputStream(fileIn),
                    "UTF-8");
            outStream = new OutputStreamWriter(new FileOutputStream(fileOut),
                    "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        BufferedReader reader = new BufferedReader(inStream);
        BufferedWriter writer = new BufferedWriter(outStream);

        try {
            while ((result = reader.readLine()) != null) {
                writer.write(result);
                writer.newLine();
                writer.flush();
            }
            reader.close();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (reader != null) {
                    reader.close();
                }
                if (writer != null) {
                    writer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
字节流,字符流的区别:
  1. 使用范围: 字节流可以对所有类型的数据输入输出,字符流只能输入输出字符类型的数据
  2. 操作单元: 字节流一次操作一个字节,字符流一次操作两个字节
  3. 缓存: 节流没有缓冲区,是直接输出的,而字符流是输出到缓冲区的。因此在输出时,字节流不调用colse()方法时,信息已经输出了,而字符流只有在调用close()方法关闭缓冲区时,信息才输出。要想字符流在未关闭时输出信息,则需要手动调用flush()方法。
四种最基本流类型:

字节流: InputStream,OutputStream
字符流: Reader,Writer

参考:
Java-IO流
Java:字节流和字符流(输入流和输出流)

File

File是文件和目录路径名的抽象表示。一旦创建, File对象表示的抽象路径File永远不会改变。

file.exists()

file.exists()是判断file对象所指向的文件或目录是否存在,并不是判断file对象是否存在。
如:new File(“/filea.txt”) 并不会创建一个叫filea.txt的文件,只是创建了一个对象指向了filea.txt这个文件。只有当filea.txt这个文件存在时,file.exists()才会返回true。
fileb.createNewFile()才是创建了一个文件。

package com.cmb.cpc.cpc2.util;

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

public class dmm {
    public static void main(String[] args){
        //创建一个指向"/APP/filea.txt"的文件对象
        File filea = new File("/APP/filea.txt");
        System.out.println(filea.exists());
        //创建一个指向"/APP/fileb.txt"的文件对象
        File fileb = new File("/APP/fileb.txt");

        try {
            //创建一个在路径“/D/APP/”下名叫“fileb.txt”文件
            fileb.createNewFile();
        } catch(IOException e) {
            e.printStackTrace();
        }
        System.out.println(fileb.exists());

        //删除掉fileb指向的文件
        fileb.delete();
        System.out.println(fileb.exists());
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值