java基础学习IO流之其它流 十一 -6

来源:互联网 发布:安徽中港金融数据诈骗 编辑:程序博客网 时间:2024/05/16 18:49

标准的输入输出流

标准输入输出流介绍;

package io4;import java.io.InputStream;import java.io.OutputStream;/** * @author Angus *标准的输入输出流 * *System.in ------InputStream *System类 *public static final InputStream in *InputStream is = System.in * *System.out --- PrintStream - --OutPutStream *System类 *public static final PrintStream out *OutputStream os = System.out; * */public class SystemInDemo {public static void main(String[] args) {InputStream is= System.in;System.out.println(is); //java.io.BufferedInputStream@2a139a55OutputStream os = System.out;System.out.println(os); //java.io.PrintStream@15db9742}}

转换流InputStreamReader使用:

package io4;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;/** * @author Angus *数据源: *键盘录入 *目的地 *文本文件 * *InputStreamReader *InputStreamReader 是字节流通向字符流的桥梁 */public class SystemInDemo {public static void main(String[] args) throws IOException {//封装数据源InputStream is= System.in;//字节流转换字符流InputStreamReader isr = new InputStreamReader(is);//封装BufferedReader br = new BufferedReader(isr);//封装目的地BufferedWriter bw = new BufferedWriter(new FileWriter("at.txt"));String line = null;while((line = br.readLine()) != null){if("over".equals(line)){break;}bw.write(line);bw.newLine();bw.flush();}bw.close();br.close();}}

输入;


显示:

转换流OutputStreamWriter使用:

package io4;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;/** * @author Angus *需求:把文本文件的数据用过标准输出流的方式显示在控制台 * *数据源: * 文本文件----BufferedReader *目的地: *控制台 *OutputStreamWriter *OutputStreamWriter 是字符流通向字节流的桥梁: */public class SystemOutDemo {public static void main(String[] args) throws IOException{//数据源BufferedReader br = new BufferedReader(new FileReader("at.txt"));OutputStream os = System.out;//能实现,不完美String line = null;while((line = br.readLine()) != null){os.write(line.concat("\r\n").getBytes());}OutputStreamWriter osw = new OutputStreamWriter(os);BufferedWriter bw = new BufferedWriter(osw);String line2 = null;while((line = br.readLine()) != null){bw.write(line);bw.newLine();bw.flush();}bw.close();br.close();}}

打印流使用:

package io4;import java.io.FileNotFoundException;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;/** * @author Angus *PrintStream 字节打印流 *PrintWriter 字符打印流 * *打印流特点: *可以写入任意类型数据 *可以自动刷新,必须启动println、printf 或 format  任意一个方法 *可以对文件进行写入 *构造: *PrintWriter(String fileName) 创建具有指定文件名称且不带自动行刷新的新 PrintWriter。 * */public class PrintWriterDemo {public static void main(String[] args) throws IOException {PrintWriter pw = new PrintWriter("a.txt");//写数据//pw.write("hah"); //不能writer任意类型//pw.flush();//pw.close();//写入任意数据//pw.print(true);//pw.print(123.123);//pw.flush();//pw.close();//自动刷新 println、printf 或 format  需要构造启动PrintWriter pw2 = new PrintWriter(new FileWriter("at.txt"), true);pw2.println(true);}}

打印流复制文本:

package io4;import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;/** * @author Angus * 打印流复制文本 */public class PrintWriterDemo {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new FileReader("a.txt"));PrintWriter pw = new PrintWriter(new FileWriter("cc.txt"),true);String line = null;while((line = br.readLine()) !=null){pw.println(line);}pw.close();br.close();}}

序列化流的操作:

package io4;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;/** * @author Angus *序列化:把对象安装流一样的方式传输或者存储 *反序列化: 把网络中的流数据或者文件中的流数据还原成对象 * *ObjectInputStream  对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。  *ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。 *构造 ObjectOutputStream(OutputStream out)  * *Serializable接口,为序列化接口,类只要实现该接口,就可以序列化。。 */public class ObjectStreamDemo {public static void main(String[] args) throws IOException, ClassNotFoundException{//创建序列化流对象//ObjectOutputStream ocs = new ObjectOutputStream(new FileOutputStream("a.txt"));//////创建对象//Person p = new Person("哈哈哈", 11);////ocs.writeObject(p);//ocs.close(); //直接运行报错Exception in thread "main" java.io.NotSerializableException: io4.Person////需要实现Serializable接口才可以被序列化////但是这样村吃的也不是对象需要的数据  哈哈哈11  而是乱码。。 但是可以直接读取//读取数据ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.txt"));Object readObject = ois.readObject();ois.close();System.out.println(readObject);}}

存储的乱码内容:


但是不影响输出:



流读取写入中的编码问题:

package io4;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;/** * 字节流没有变化构造 * 字符流编码问题 * @author Angus * */public class StreamEncodeDemo {public static void main(String[] args) throws IOException{OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("a.txt"),"GBK");osw.write("中国");//我本身是utf-8   但是指定GBK了  这样就无法读懂了osw.close();//这样读取的时候也可以指定编码InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"GBK");char[] chs = new char[1024];int len = 0;while((len = isr.read(chs)) != -1){System.out.println(new String(chs,0,len));}}}

写入的数据:


但是读取的时候指定编码即可:


最后附上JDK使用文档API 下载



1 0
原创粉丝点击