Java 数据流专属和 标准输出流
数据流专属:DataOutputStream
package com.bjpowernode.java.io; import java.io.DataOutputStream; import java.io.FileOutputStream; /* java.io.DataOutputStream:数据专属的流。 这个流可以将数据连同数据的类型一并写入文件。 注意:这个文件不是普通文本文档。(这个文件使用记事本打不开。) */ public class DataOutputStreamTest { public static void main(String[] args) throws Exception{ // 创建数据专属的字节输出流 DataOutputStream dos = new DataOutputStream(new FileOutputStream("data")); // 写数据 byte b = 100; short s = 200; int i = 300; long l = 400L; float f = 3.0F; double d = 3.14; boolean sex = false; char c = 'a'; // 写 dos.writeByte(b); // 把数据以及数据的类型一并写入到文件当中。 dos.writeShort(s); dos.writeInt(i); dos.writeLong(l); dos.writeFloat(f); dos.writeDouble(d); dos.writeBoolean(sex); dos.writeChar(c); // 刷新 dos.flush(); // 关闭最外层 dos.close(); } }
数据流专属:DataInputStream
package com.bjpowernode.java.io; import java.io.DataInputStream; import java.io.FileInputStream; /* DataInputStream:数据字节输入流。 DataOutputStream写的文件,只能使用DataInputStream去读。并且读的时候你需要提前知道写入的顺序。 读的顺序需要和写的顺序一致。才可以正常取出数据。 */ public class DataInputStreamTest01 { public static void main(String[] args) throws Exception{ DataInputStream dis = new DataInputStream(new FileInputStream("data")); // 开始读 byte b = dis.readByte(); short s = dis.readShort(); int i = dis.readInt(); long l = dis.readLong(); float f = dis.readFloat(); double d = dis.readDouble(); boolean sex = dis.readBoolean(); char c = dis.readChar(); System.out.println(b); System.out.println(s); System.out.println(i + 1000); System.out.println(l); System.out.println(f); System.out.println(d); System.out.println(sex); System.out.println(c); dis.close(); } }
标准输出流:java.io.PrintStream
// 标准输出流不再指向控制台,指向“log”文件。
PrintStream printStream = new PrintStream(new FileOutputStream("zhangbltestlog"));
// 修改输出方向,将输出方向修改到"log"文件。
System.setOut(printStream);
package com.bjpowernode.java.io; import java.io.FileOutputStream; import java.io.PrintStream; /* java.io.PrintStream:标准的字节输出流。默认输出到控制台。 */ public class PrintStreamTest { public static void main(String[] args) throws Exception{ // 联合起来写 System.out.println("hello world!"); // 分开写 PrintStream ps = System.out; ps.println("hello zhangsan"); ps.println("hello lisi"); ps.println("hello wangwu"); // 标准输出流不需要手动close()关闭。 // 可以改变标准输出流的输出方向吗? 可以 /* // 这些是之前System类使用过的方法和属性。 System.gc(); System.currentTimeMillis(); PrintStream ps2 = System.out; System.exit(0); System.arraycopy(....); */ // 标准输出流不再指向控制台,指向“log”文件。 PrintStream printStream = new PrintStream(new FileOutputStream("log")); // 修改输出方向,将输出方向修改到"log"文件。 System.setOut(printStream); // 再输出 System.out.println("hello world"); System.out.println("hello kitty"); System.out.println("hello zhangsan"); } }
日志工具类
package com.bjpowernode.java.io; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; import java.text.SimpleDateFormat; import java.util.Date; /* 日志工具 */ public class Logger { /* 记录日志的方法。 */ public static void log(String msg) { try { // 指向一个日志文件 PrintStream out = new PrintStream(new FileOutputStream("log.txt", true)); // 改变输出方向 System.setOut(out); // 日期当前时间 Date nowTime = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); String strTime = sdf.format(nowTime); System.out.println(strTime + ": " + msg); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
package com.bjpowernode.java.io; public class LogTest { public static void main(String[] args) { //测试工具类是否好用 Logger.log("调用了System类的gc()方法,建议启动垃圾回收"); Logger.log("调用了UserService的doSome()方法"); Logger.log("用户尝试进行登录,验证失败"); Logger.log("我非常喜欢这个记录日志的工具哦!"); } }