Java I/O 之输入流、输出流

Java输入 、输出流

什么是流

计算机编程时,经常使用“流”这个抽象概念,它是指不同设备间数据传输内容的抽象。当需要从一个数据源读取或是像一个目标写入数据时,就可以使用流。

按照流的传输操作类型划分,可以分为输入流和输出流。输入流是指从一个数据源读取数据对象;输出流是指向一个目的地传输数据对象。

输入流

Java中用来表示输入流的类分为两种,分别是字节输入流InputStream类和字符输入流Reader类。

InputStream类

InputStream类中所有方法在调用时都会抛出IOException异常,表示在处理输入、输出流时发生的问题异常。

package com.IO.demo01;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * InputStream类
 */
public class Demo01 {
    public static void main(String[] args) {
        try {
            InputStream inputStream;
            inputStream = new FileInputStream("data.json");
            System.out.println("创建输入流:"+inputStream.toString());
            System.out.println("输入流读取字符:"+inputStream.read());
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Reader类

InputStream类是用来处理字节流的,但是在Java环境中,字符文本都是Unicode编码,是双字节的,不适合使用InputStream来进行处理。java.io包中提供了Reader类,专门用来处理字符流,降低了开发者的开发成本。

package com.IO.demo01;
import java.io.*;

/**
 * Reader类
 */
public class Demo02 {
    public static void main(String[] args) {
        try {
            Reader Reader = new FileReader("data.json");
            System.out.println("创建输入流:"+Reader.toString());
            System.out.println("读取字符:"+Reader.read());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

输出流

Java中用来表示输出流的类分为两种,分别是字节输出流OutputStream和字符输出流Writer类。

OutputScream类

OutputScream类中的所有成员方法均定义为void,没有返回参数,遇到错误异常时也会抛出IOException异常。

package com.IO.demo01;
import java.io.*;
public class Demo03 {
    public static void main(String[] args) {
        try {
            File inputFile=new File("Data.json");
            File outputFile=new File("output.json");
            InputStream inputStream=new FileInputStream(inputFile);
            OutputStream outputStream=new FileOutputStream(outputFile);
            int i=0;
            while(i!=-1){
                i=inputStream.read();
                outputStream.write(i);
            }
            inputStream.close();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Writer类

Writer是所有字符输出类的父类,是一个抽象类。

package com.IO.demo01;
import java.io.*;

/**
 * Writer类
 */
public class Demo03 {
    public static void main(String[] args) {
        try {
            Reader reader=new FileReader("Data.json");
            Writer writer = new FileWriter("output.json");
            int i=0;
            while(i!=-1){
                i=reader.read();
                writer.write(i);
            }
            reader.close();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在相对路径下的output.json文件内写入了与Data.json相同的内容。

系统预定义流

在Java中,系统预先定义好了几个流变量。在Java程序运行时,会自动导入java.lang包,其中定义了System类,该类封装了程序运行的各种参数。它们都被public和static关键字修饰,可以在不引用特定的System对象的情况下,在程序特定地方直接被调用。

System.in表示标准输入流,对应键盘的输入或者控制台的输入。System.in为InputStream类型的对象。

System.out表示标准输出流,对应计算机的显示器。System.out为PrintStream类型的对象。

System.err表示标准错误输出流,一般情况下,错误输出流在系统运行时就已打开准备接收数据。

package com.IO.demo01;
import java.io.*;

/**
 * 系统预定义流
 */
public class Demo04 {
    public static void main(String[] args) {
        try {
            BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
            System.out.println("请输入字符串,回车结束");
            System.out.println("输入内容为:"+reader.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果:
示例图片

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不读研

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值