IO流中的字节流和字符流

IO流分类

                输入          输出

字节       inputStream()抽象类 outputStream()

字符       reader()         writer()

常用方法read()如果不带参数的话就是返回字母的ASCLL表值

如果带参数返回的是一个int()值如果没有后面的数据则返回一个byte的数据长度把取出来的数据放入byte中,两个方法都是当没有数据的时候返回值为-1,这样可以作为循环退出的条件

Write方法把数据写入磁盘中不能写入文件夹,自能写入文件

会出现这样的错误解决办法为 

编码异常

因为中文占2个字节所以出现了读取的中文缺失或者多取的情况,造成了乱码

乱码还包括使用的编码的方式和取码的方式不同造成的情况

转换流

因为在前后端的交互中我们使用的是TCP协议,这样会造成文件通过字节流传输所以当我们编辑文本文件的时候却需要字符流来操作,就需要字节流转字符流,传输的时候为字符流转为字节流

JDK1.7中的流异常处理

Try{}catch(){}

Try(自动关闭的流){}catch(){}

package cn.jiedada.jdk7trycatch;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Test {
    /*
     * 正常的try{}catch{}fillnaly
     * 文件操作的
     * 1.7过后为try(想要关闭的流){}catch
     * */
    public static void main(String[] args) {
        try(FileInputStream fis=new FileInputStream("D:\JAVA上课学习内容\2019-07-31-IO-DAY19\video\01-课程介绍.avi");
            FileOutputStream fos=new FileOutputStream("F:\新建文件夹\a.doc");){
            byte[] b=new byte[1024];
            int n;
            while ((n=fis.read(b))!=-1) {
                fos.write(b,0,n);
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

常见的写入和存入

package cn.jiedada.ioopration;

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

public class Test {
    /*
     * 把文件取出来并且存放在一个新的文件中
     * */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        //先在内存中取出磁盘的文件
        FileInputStream fis = new FileInputStream("D:\JAVA上课学习内容\2019-07-31-IO-DAY19\video\01-课程介绍.avi");
        FileOutputStream fileOutputStream = new FileOutputStream("F:\新建文件夹\a.txt");
        byte[] b=new byte[1024];
        int n;
        while ((n=fis.read(b))!=-1) {
            fileOutputStream.write(b,0,n);
        }
        fis.close();
    }
    

}
View Code
原文地址:https://www.cnblogs.com/xiaoruirui/p/11285498.html