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();
}
}
}
运行结果: