java中流的基本使用

(IO)流

Io流的理解

IO流的理解

通过IO可以完成硬盘文件的读和写

/*
* 文件的输入和输出都是基于内存为参照物的
* 文件的输入就是硬盘中的文件读到内存中
* 文件的输出就是内存中的文件写的硬盘中
*/

IO 分类

有多种分类方式:

  • 一种方式是按照流的方向进行分类:
  1. 以内存作为参照物

    • 往内存中去,叫做输入(Input)。或者叫做读
    • 从内存中出来,叫做输出(Output)或者叫做写
  2. 另一种方式是按照读取数据方式不同进行分类

    有的流是按照字节的方式读取文件,一次读取一个字节,等同于一次读取8个二进制位,这种流是万能的,什么类型的文件都可以读取,包括:文件文件,视频,声音,图片等。

    有的流是按照字符的方式读取数据的,一次只能读取一个字符,这种流是为了方便读取普通文本文件而存在的,这种流不能读取:图片,声音,视频等文件。只能读取单纯的文本文件,word文件也不能读取

javaIO有四大家族

四大家族的首领 :都是抽象类

java.io.InputStream 字节输入流

java.io.OutputStream 字节输出流

java.io.Reader 字符输入流

java.io.Writer 字符输出流

注意 :在java中只要类名以Stream结尾的都是字节流。以Reader/Writer结尾的都是字符流

所有的流都实现了:

java.io.Closeable 接口,都是可关闭的,都有close()方法。

用完流之后一定要关闭

所有的输出流都实现了:

java.io.Flushable 接口 ,都是可刷新的,都有flush()方法。

用完输出流的时候要刷新。刷新的作用就是清空管道。

需要掌握的流

文件专属(掌握)

java.io.FileInputStream

java.io.FIleOUtStream

java.io.FileReader

java.io.FileWriter

转换流:(将字节流转成字符流)

jav.io.InputStreamReader

java.io.OutputStreamWriter

缓存流专属

java.io.BufferedReader

java.io.BufferedWriter

java.io.BufferedInputStream

java.io.BufferedOutputStream

数据流专属

​ java.io.DataInputStream

​ java.io.DateOutputStream

对象专属流(掌握)

java.io.ObjectInputStream

java.io.ObjectOutputStream

标准输出流(掌握)

java.io.PrintWriter

java.io.PrintStream

文件专属(流)

文件的读

// 文件的输入流 就是从硬盘到内存中去
FileInputStream fileInputStream=new FileInputStream("D:\\word\\temp.txt");
int readData=0;
while ((readData=fileInputStream.read())!=-1){
    System.out.println(readData);
}

fileInputStream.close();

反编译的结果为:

package com.aaa.javase.io;

import java.io.*;

public class InputStreamTest
{

    public InputStreamTest()
    {
    }

    public static void main(String args[])
        throws IOException
    {
        FileInputStream fileInputStream = new FileInputStream("D:\\word\\temp.txt");
        for(int readData = 0; (readData = fileInputStream.read()) != -1;)
            System.out.println(readData);

        fileInputStream.close();
    }
}

最终版:

FileInputStream fileInputStream=new FileInputStream("D:\\word\\temp.txt");

byte [] bytes=new byte[4];
int recount=0;

while ((recount=fileInputStream.read(bytes))!=-1){
    System.out.print(new String(bytes,0,recount));
}


fileInputStream.close();

文件的写

public static void main(String[] args) throws  Exception {
    //这个true代表在原文件中追加,不覆盖
    FileOutputStream os=new FileOutputStream("D:\\word\\temp.txt",true);

    //开始写
    os.write(98);
    String s="我是一个中国人,我骄傲";
    //将字符串转成bytes数组
    byte[] bytes = s.getBytes();
    os.write(bytes);


    os.flush();
    os.close();
}

文件的复制

public static void main(String[] args)  throws  Exception{
    //文件的读
    FileInputStream is=new FileInputStream("D:\\word\\1.txt");
    //进行写
    FileOutputStream os=new FileOutputStream("D:\\word\\2.txt");
    byte[] b=new byte[4];
    int reCount=0;
    //一遍读一遍写
    while ((reCount=is.read(b))!=-1){
        os.write(b,0,reCount);
    }
    os.flush();
    is.close();
    os.close();

}

FileWriter和FileReader中的操作方式和FileInputStream以及FileOutStream相似

FileWriter和FileReader文件的复制

 public static void main(String[] args) throws Exception {
        //读
        FileReader fileReader=new FileReader("D:\\word\\1.txt");
        //写
        FileWriter fileWriter=new FileWriter("D:\\word\\3.txt");
        char [] chars=new char[4];
        int count=0;
        while ((count=fileReader.read(chars))!=-1){
        fileWriter.write(chars,0,count);

        }

        fileWriter.flush();
        fileReader.close();
        fileWriter.close();

    }

缓冲流

读:

FileReader fileReader=new FileReader("D:\\word\\1.txt");
BufferedReader reader=new BufferedReader(fileReader);
String s2=null;
 while ((s2=reader.readLine())!=null){
     System.out.println(s2);
 }

reader.close();
public static void main(String[] args)  throws  Exception{

    //字节流
    FileInputStream in=new FileInputStream("D:\\word\\1.txt");
    //转换流
    InputStreamReader isr=new InputStreamReader(in);
    //处理流/包装流
    BufferedReader reader=new BufferedReader(isr);

    String s = reader.readLine();
    System.out.println(s);

    reader.close();
}

写:

public static void main(String[] args)  throws  Exception{

    //节点流
    FileWriter fileWriter = new FileWriter("D:\\word\\1.txt",true);
    //包装流
    BufferedWriter bufferedWriter=new BufferedWriter(fileWriter);
     //换行  每次写入换行
    bufferedWriter.newLine();
    bufferedWriter.write("小明");


    bufferedWriter.flush();
    bufferedWriter.close();


}

标准输出流

标准输出流默认输出到控制台

  //标准输出流不再指定控制台,执行log文件
        PrintStream pr=new PrintStream(new FileOutputStream("log"));
        //修改输出方向,将输出方向修改到log文件
        System.setOut(pr);
        System.out.println("xhang");
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值