首页 > 代码库 > Java之IO转换流
Java之IO转换流
直接上码:
读取键盘录入数据代码演示:
import java.io.IOException;import java.io.InputStream; /** *读取键盘录入的数据,并打印在控制台上。 * *键盘本身就是一个标准的输入设备, *对于Java而言, */public class ReadKey { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException {// readKey(); readKey_2(); } public static void readKey() throws IOException { InputStream in = System.in; int ch = in.read(); System.out.println(ch); int ch1 = in.read(); System.out.println(ch1); int ch2 = in.read(); System.out.println(ch2); } /** * 获取用户键盘录入的数据, * 并将数据变成大写显示在控制台上, * 如果用户输入的是over,则结束键盘录入 * * 思路: * 1,因为键盘录入只读取一个字节,要判断是否是over,需要先将读到的字节拼成字符串 * 2,那就需要一个容器。可以使用StringBuilder * 3,在用户回车之前将录入的数据变成字符串判断即可。 * @throws IOException */ public static void readKey_2() throws IOException { //创建容器 StringBuilder sb = new StringBuilder(); //获取键盘读取流 InputStream in = System.in; //定义变量记录读取到的字节,并循环读取。 int ch = 0; while((ch = in.read())!=-1){ //在存储之前需要判断是否是换行标记,因为换行标记不存 if(ch == ‘\r‘) continue; if(ch == ‘\n‘){ String temp = sb.toString(); if("over".equals(temp)) break; System.out.println(temp.toUpperCase()); sb.delete(0,sb.length()); }else{ sb.append((char)ch); } } }}
流转换:
字节流转换成字符流InputStreamReader
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader; public class TransStreamDemo { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { //字节流 InputStream in = System.in; //将字节转换成字符的桥梁,即转换流。 InputStreamReader isr = new InputStreamReader(in); //字符流 BufferedReader bufr = new BufferedReader(isr); String line = null; while((line=bufr.readLine())!=null){ if("over".equals(line)){ break; } System.out.println(line.toUpperCase()); } }}
字符流转换成字节流OutputStreamWriter
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter; public class TransStreamDemo { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { //字节流 InputStream in = System.in; //将字节转换成字符的桥梁,即转换流。 InputStreamReader isr = new InputStreamReader(in); //字符流 BufferedReader bufr = new BufferedReader(isr); OutputStream out = System.out; OutputStreamWriter osw = new OutputStreamWriter(out); BufferedWriter bufw = new BufferedWriter(osw); String line = null; while((line=bufr.readLine())!=null){ if("over".equals(line)){ break; } bufw.write(line.toUpperCase()); bufw.newLine(); bufw.flush(); } }}
代码重写
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter; public class TransStreamDemo { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out)); String line = null; while((line=bufr.readLine())!=null){ if("over".equals(line)){ break; } bufw.write(line.toUpperCase()); bufw.newLine(); bufw.flush(); } }}
复制文件代码演示
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter; public class TransStreamDemo { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt"))); BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt"))); String line = null; while((line=bufr.readLine())!=null){ if("over".equals(line)){ break; } bufw.write(line); bufw.newLine(); bufw.flush(); } }}
转换流总结:
InputStreamReader : 字节到字符的桥梁,解码
OutputStreamWriter : 字符到字节的桥梁,编码
流的操作规律:
首先需弄清楚操作规律的原因是:流的对象太多啦,往往不知道用哪一个对象合适。
想要知道对象开发时用到哪些对象,只要通过四个条件去明确即可。
1, 明确源和目的(汇)
源:InputStream 和 Reader
目的:OutputStream 和 Writer
2,明确数据是否是纯文本数据。
源:
是纯文本:Reader
不是纯文本:InputStream
目的:
是纯文本:Writer
不是纯文本:OutputStream
此时就明确了需要使用哪个体系
3,明确具体的设备
源设备:
硬盘:文件File
键盘:System.in
内存:数组
网络:Socket流
目的设备:
硬盘:文件File
控制台:System.out
内存:数组
网络:Socket流
4,是否需要其他额外功能。
1)是否需要高效(缓冲区)
是就加上Buffer
2)转换
......
使用转换流的常见场景:
1,源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换流作为桥梁,提高对本文操作的便捷
2,操作文本涉及到具体的指定编码表时,必须使用转换流。
Java之IO转换流
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。