IO字节流

字节流会出现一个问题, 传输过程涉及中文时, 会出现乱码, 主要是因为不同编辑软件对文件的编码方式不同, 

Java.io.OutputStream字节输出流

此抽象类表示: 所有输出字节流的类的超类(父类)

子类共性的成员方法:

  • public void close() :  关闭输出流并释放与此相关的系统资源
  • public void flush() : 刷新输出流并强制输出缓冲的输出字节
  • public void write(byte[ ]  b) : 将b.length长度的字节从指定数组b输出(写入)到此输出流, 每次写入会覆盖掉文件中原本的数据
                                                       1、如果传入的是一个数字, 则文件中看到的是此数字对应的ascII字符                                             
                                                       2、如果字节数组中的数字是负的,  则和后面一个数字一起组成一个汉字
                                                       3、输入中文:中文字符串的getByte()
  • public void write(byte[ ] b,int off, int len) : 将指定数组b从 off 位置开始的len个字节输出(写入)到此输出流
  • public void 

Java.io.FileOutputStream extends OutputStream

文件字节输出流 :  将内存中的字节输出到硬盘的文件中

构造方法

  • FileOutputStream(String name) : 创建一个向路径为name的文件中写入数据的字节输出文件流
  • FileOutputSteam(File file) : 创建一个向指定对象file表示的文件中写入数据的字节输出文件流

写入文件的过程

java程序 -->  jvm虚拟机 -->  os --> os调用写数据的方法  --> 数据写入硬盘文件中

注意事项

  1. 每次写入会覆盖掉文件中原本的数据,如果想要续写而不覆盖,创建对象时new FileOutputStream(String str,boolean append),将append写为true
  2. 文件中要换行:fileOutputStream.write("\r\n".getByte());

java.io.InputStream

子类共性的成员方法:

  • public int read() : 一次读一个字节并返回, 直到读到文件的末尾则返回-1
  • public int read(byte[ ] b) : 从输入流中读取一定数量的字节,存储在缓冲区数组b中
                                             返回的是每次读取的字节个数, 如果到了文件末尾则返回-1
                                             b多大则每次读入多少个字节, 覆盖b中原有的数据, 直到文件末尾, -1不写入b中
                                             所以b一般设置为1024byte, 输出时先转换为字符串(只转换字符串的有效部分)

Java.io.FileInputStream extends InputStream

文件字节输入流: 将将硬盘文件中的数据读出(输入)到内存中

构造方法:

  • FileInputStream(File file) : 传入硬盘文件对应的文件对象
  • FileInputStream(String str) : 传入硬盘中文件的路径
/*
        读取整个文件的内容到内存
*/
public class DemoInputStream {
    public static void main(String[] args) throws IOException {
        int len ;
        FileInputStream fis = new FileInputStream("src\\com\\IO\\b.txt");  //建立字节流对象,指向文件
        while ((len = fis.read()) != -1){       //1\每次读取一个字节,读取直到文件末尾
            System.out.print((char) len);
        }
        //byte[] bt = new byte[1024];        //一次读取多个字节
        //while ((len = fis.read(bt)) != -1){
            //System.out.println(new String(bt, 0, len));
        //}
        fis.close();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值