IO流的简单使用

IO流主要是对磁盘或者服务器进行输入输出的操作Input、output。按照流向可以分为输入流和输出流,按照类型可以分为字节流和字符流

输入流输出流
字节流字节流抽象类InputStreamOutputStream
文件流FileInputStreamFileOutputStream
缓冲流BuferedInputStreamBuferedOutputStream
对象流ObjectInputStreamObjectOutputStream
内存流ByteArrayInputStreamByteArrayOutputStream
字符流字符流抽象类ReaderWriter
文件流FileReaderFileWriter
缓冲流BuferedReaderBuferedWriter
转换流InputStreamReaderOutputStreamWriter

字节流列子:

将文件读取到控制台

close() :关闭此输入流并释放与此流相关联的任何系统资源。

read(): 从输入流读取数据的下一个字节。

read(byte[] b): 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。

public class Demo39 {
    public static void main(String[] args) throws IOException {
        String path="D:\\Files\\Test\\a.txt";
        FileInputStream file = new FileInputStream(path);
        int num;
        //file.read()每次返回一个字节
        while ((num=file.read())!= -1){
            System.out.println((char) num);
        }
        file.close();
    }
}

 

 可通过byte[]设置一次性获取取数量

public class Demo39 {
    public static void main(String[] args) throws IOException {
        String path="D:\\Files\\Test\\a.txt";
        FileInputStream file = new FileInputStream(path);
        //设置存储数组
        byte[] bytes=new byte[1024];
        int num;
        while ((num=file.read(bytes))!= -1){
            System.out.println(new String(bytes,0,num));
        }
        file.close();
    }
}

 将数据读取到文件

close() :关闭此输出流并释放与此流相关联的任何系统资源。

flush() :刷新此输出流并强制任何缓冲的输出字节被写出。

write(byte[] b):将 b.length字节从指定的字节数组写入此输出流。

write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。

write(int b) :将指定的字节输出流

    public static void main(String[] args) throws IOException {
        String path="D:\\Files\\Test\\b.txt";
        FileOutputStream file = new FileOutputStream(path);
        //ASCLL码
        file.write(97);
        file.close();
    }

 

 public static void main(String[] args) throws IOException {
        String path="D:\\Files\\Test\\b.txt";
        FileOutputStream file = new FileOutputStream(path);
        // 字符串转换为字节数组
        byte[] bytes="神仙会飞吗".getBytes();
        file.write(bytes);
        file.close();
    }

    public static void main(String[] args) throws IOException {
        String path="D:\\Files\\Test\\b.txt";
        FileOutputStream file = new FileOutputStream(path);
        // 字符串转换为字节数组
        byte[] bytes="abcde".getBytes();
        //从第2个下标开始,写入3个
        file.write(bytes,2,3);
        file.close();
    }

 但是我们发现每次程序运行写入都会将旧的数据覆盖掉,因此我们希望追加的方式写入

new FileOutputStream(File file, boolean append)如果append为true则会以追加的方式写入
  public static void main(String[] args) throws IOException {
        String path="D:\\Files\\Test\\b.txt";
        FileOutputStream file = new FileOutputStream(path,true);
        // 字符串转换为字节数组
        byte[] bytes="神仙会飞吗".getBytes();
        file.write(bytes);
        file.close();
    }

 


字符流例子 :

将文件读取到控制台

 

   public static void main(String[] args) throws IOException {
        String path="D:\\Files\\Test\\a.txt";
        FileReader fileReader = new FileReader(path);
        int str;
        while ((str=fileReader.read())!=-1){
            System.out.println((char) str);
        }
        fileReader.close();
    }

    public static void main(String[] args) throws IOException {
        String path="D:\\Files\\Test\\a.txt";
        FileReader fileReader = new FileReader(path);
        char[] chars = new char[5];
        while (fileReader.read(chars)!=-1){
            System.out.println(new String (chars));
        }
        fileReader.close();
    }

 将数据读取到文件

这里要注意哦,写入时它会放入缓冲区并未正式写入文件,如果不关流是写不进去的

    public static void main(String[] args) throws IOException {
        String path="D:\\Files\\Test\\b.txt";
        FileWriter fileWriter = new FileWriter(path);
        fileWriter.write("我要进去咯");
        fileWriter.close();
    }

 不关流写不进去但是关流了我还想继续写怎么办,通过 flush() 方法

    public static void main(String[] args) throws IOException {
        String path="D:\\Files\\Test\\b.txt";
        FileWriter fileWriter = new FileWriter(path);
        fileWriter.write("现在看看");
        fileWriter.flush();
        //fileWriter.close();
    }

 有时候我们根据业务情况创建了许多流,但是关闭流的时候一个一个关很麻烦,而且看起来也不够牛逼怎么办,建一个统一关流的方法吧

    public static void main(String[] args) throws IOException {
        String path="D:\\Files\\Test\\b.txt";
        FileWriter fileWriter = new FileWriter(path);
        FileReader fileReader = new FileReader(path);
        closes(fileReader,fileWriter);
    }

    private static void closes(Closeable ...closeables){
        for (Closeable closeable:closeables) {
            try {
                closeable.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值