标准输入输出流
类型 | 默认设备 | |
---|---|---|
System.in | InputStream | 键盘 |
System.out | PrintStream | 显示器 |
package com.standard;
import java.util.Scanner;
public class InputAndOutput {
public static void main(String[] args) {
//System 类的 public final static InputStream in = null;
//System.in 编译类型 InputStream
//System.in 运行类型 BufferedInputStream
//表示的是标准输入 键盘
System.out.println(System.in.getClass());
//System 类的 public final static PrintStream out = null;
//编译类型:PrintStream
//运行类型:PrintStream
//表示标准输出 显示器
System.out.println(System.out.getClass());
Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容:");
String word = scanner.next();
System.out.println("输入的内容是:"+word);
}
}
转换流
-
InputStreamReader:Reader的子类,可以将InputStream(字节流)包装(转换)成Reader(字符流)
package com.transformation; import java.io.*; //演示使用InputStreamReader转换流解决中文乱码问题 //将字节流 FileInputStream 转换成字符流 InputStreamReader,指定编码utf-8 public class InputStreamReader_ { public static void main(String[] args) throws IOException { String filePath = "E:\\JavaStudy\\a.txt"; // 1. 将FileInputStream 转成 InputStreamReader //2.指定编码 utf-8 InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath), "utf-8"); //3. 把InputStreamReader 传入 BufferedReader BufferedReader bufferedReader = new BufferedReader(isr); //将2 和 3 合在一起 //BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "utf-8")); //4. 读取 String s = bufferedReader.readLine(); System.out.println("读取内容:"+s); //5. 关闭外层流 bufferedReader.close(); } }
-
OutputStreamWriter:Writer的子类,实现将OutputStream(字节流)包装(转换)成Writer(字符流)
package com.transformation; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; //演示OutputStreamWriter使用 //把FileOutputStream 转成 OutputStreamWriter //指定处理的编码 gbk/utf-8 public class OutputStreamWriter_ { public static void main(String[] args) throws IOException { String filePath = "E:\\JavaStudy\\b.txt"; String charSet = "gbk"; OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(filePath),charSet); osw.write("你好,world"); osw.close(); System.out.println("按照 "+charSet+" 保存文件"); } }
-
当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换成字符流
-
可以在使用时指定编码格式(比如utf-8,gbk,gb2312,ISO8859-1等)
打印流
字节打印流PrintStream和字符打印流PrintWriter
PrintStream类图
PrintWriter类图
字节打印流PrintStream实例:
package com.printstream;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
//演示PrintStream(字节打印流/输出流)
public class PrintStream_ {
public static void main(String[] args) throws IOException {
PrintStream out = System.out;
//在默认情况下,PrintStream输出数据的位置是 标准输出 即 显示器
/*
public void print(String s) {
if (s == null) {
s = "null";
}
write(s);
}
*/
out.print("hello");
//因为print底层使用的是write,所以我们可以直接调用write进行打印/输出
out.write("大家好才是真的好".getBytes(StandardCharsets.UTF_8));
out.close();
//我们可以修改打印流输出的位置/设备
//1. 输出修改成到"E:\JavaStudy\c.txt"
System.setOut(new PrintStream("E:\\JavaStudy\\c.txt"));
System.out.println("修改打印流输出的位置为指定位置");
PrintStream out1 = new PrintStream(new FileOutputStream("E:\\JavaStudy\\d.txt"));
out1.print("这样也可以修改位置");
out1.close();
}
}
字符打印流PrintWriter实例
package com.printstream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class PrintWriter_ {
public static void main(String[] args) throws IOException {
PrintWriter printWriter = new PrintWriter(System.out);//传入标准输出
printWriter.print("你好呀~~~");
printWriter.close();
//修改输出位置
PrintWriter printWriter1 = new PrintWriter(new FileWriter("E:\\JavaStudy\\e.txt"));
printWriter1.print("字符打印流");
//必须要关闭流,才能输出到文件,否则无法输出 flush+关闭流
printWriter1.close();
}
}