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

    xiaoxiao2021-03-25  76

    标准的输入输出流

    标准输入输出流介绍;

    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@2a139a55 OutputStream 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 下载

    转载请注明原文地址: https://ju.6miu.com/read-38994.html

    最新回复(0)