IO流学习笔记

 

一、FileInputStream:从文件系统中的文件获取输入字节,读取诸如图像数据的原始字节流。

1.创建文件字节输入流对象的时候,可以用绝对路径的方式。

2.其中read()方法返回的是字节本身。例如文件中是字符a,那么程序中读到的就是97。

3.注意:读取数组的时候。read()读取到的是字节数量,最大为数组长度。如果一个字节也没有就返回-1.

实操:

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

public class A {
    public static void main(String[] args) {
        FileInputStream fis=null;
        try {
            fis=new FileInputStream("src/temp1");
            byte[] a=new byte[4];
            int datacount=0;
             while((datacount=fis.read(a))!=-1)
             {
                 System.out.print(new String(a,0,datacount));
             }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
              if(fis!=null)
              {
                  try {
                      fis.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
        }
    }
}

 4.其他常用方法:

available():返回剩下多少个字节没有读。这个方法的作用就是在开始的时候获取文件中的字节数。这样可以不用循环,读一遍就可以了。但这种方法不适合大文件,因为byte数组不能太大

 skip():跳过几个字节不读取

二、FileOutputStream:文件字节输出流,负责写。从内存到硬盘

1.如果文件不存在,会创建文件

2。如果在创建的时候,加上true就代表以追加的方式从文件末尾写入,不会清空文件内容。

3.如果要写出一个字符串的话,可以使用getBytes()方法把字符串转换成byte数组。

实操:

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

public class A {
    public static void main(String[] args) {
        FileOutputStream fos=null;
        try {
             //如果文件不存在,会自动创建
            fos=new FileOutputStream("D:/temp1",true);
            byte[] a={97,98,99,100};
            fos.write(a);//将a数组全部写出
            fos.write(a,0,2);//将a数组部分写出,从0开始,写出2个
            String s="哈哈哈哈";
            //将字符串转换成byte数组
            byte[] bs=s.getBytes();
            fos.write(bs);
            fos.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
             if(fos!=null)
             {
                 try {
                     fos.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
        }
    }
}

 

 三、拷贝文件:采用边读边写,任何类型的文件都可以拷贝。

实操:

import java.io.*;

public class A {
    public static void main(String[] args) {
        FileInputStream pis=null;
        FileOutputStream pos=null;
        try {
            pis=new FileInputStream("C:\\Users\\SHIJINTAO\\Pictures\\2021-08\\IMG_2368.JPG");
            pos=new FileOutputStream("D:\\IMG_2368.JPG");

            byte[] a=new byte[1024*1024];//一次最多拷贝1MB
            int readcount=0;
            while((readcount=pis.read(a))!=-1)
            {
                pos.write(a,0,readcount);//读了多少写多少
            }
            pos.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally
        {
            if(pos!=null) {
                try {
                    pos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(pis!=null) {
                try {
                    pis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

 四、FileReader和FileWriter与上面两个基本上差不多。区别在于:

1.把byte[]数组改成了char[]数组

2.可以直接传入字符串

五、BufferedReader:带有缓冲区的字符输入流,使用这个流的时候不需要自定义char数组或者byte数组。它的构造方法中不是一个路径而是一个字符流。

1、当一个流的构造方法中需要一个流的时候,这个被传进来的流叫做:节点流

2.外部负责包装的这个流叫做:包装流/处理流。

3.对于包装流来说,只需要关闭最外层流就行,里面的节点流会自动关闭。

4.常用方法:readline():读取第一个文本行,但不带换行符。读取失败返回null

实操:

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

public class A {
    public static void main(String[] args) throws IOException {
       FileReader reader=new FileReader("D:/temp");//节点流
       BufferedReader br=new BufferedReader(reader);//包装流
       String s=null;
       while((s=br.readLine())!=null)//直接读取一行
       {
           System.out.println(s);
       }
       br.close();//关闭包装流
    }
}

六、InputStreamReader:将字节输入流转换成字符输入流

例如:BufferedReader中必须传入字符流,那我们可以先用FileInputStream创建字节流,然后用InpuerStreamReader将字节流转换成字符流,然后传入BufferedReader中。

实操:

 七、OutputStreamwriter:带有缓冲的字符输出流。用法和转换与InputStreamReader差不多。

八、OutputStreamWriter:将字节输出流抓换成字符输出流

九、DataOutputStream:数据专属的字节输出流。它所写的文件不是普通文件,用记事本打开是乱码。它是将数据以及其类型一并写入到文件中。因此读入只能用DataInputStream。

 十、DataInputStraem:数据专属字节输入流,读出的顺序必须和写入的顺序相同。

十一、 PrintStream:标准输出流   

1.常用方法:setOut():默认方向是控制台,而此方法可以修改输出方向 

   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值