Java重点 | IO流中的数据流专属和标准输出流
【摘要】 经过上篇文章,我们已经学会了IO流中的缓冲流专属和转换流专属,那么我们下面继续学习,本文主要介绍的是IO流中的数据流专属和标准输出流,通过代码实战配合着理解,让我们更快的理解数据流专属和标准输出流,并且通过代码实战利用标准输出流做出一个记录日志工具。
数据流专属
DataOutputStream 写
java.io.DataOutputStream:数据专属的流。这个流可以将数据连同数据的类型一并写入文件。
注意:这个文件不是普通文本文档。(这个文件使用记事本打不开。)
public class 数据流_写 {
public static void main(String[] args) throws IOException {
// 创建数据专属的字节输入流
DataOutputStream dos = new DataOutputStream(new FileOutputStream("JAVAse进阶/src/IO流/aa"));
// 写数据
byte b = 100;
short s = 200;
int i = 300;
long l = 400;
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();
}
}
DataInputStream 读
DataInputStream:数据字节输入流。
DataOutputStream写的文件,只能使用DataInputStream去读。并且读的时候你需要提前知道写入的顺序。读的顺序需要和写的顺序一致。才可以正常取出数据。
public class 数据流_读 {
public static void main(String[] args) throws IOException {
//创建对象
DataInputStream dis = new DataInputStream(new FileInputStream("JAVAse进阶/src/IO流/aa"));
//开始读
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();
dis.close();
System.out.println(b);
System.out.println(s);
System.out.println(i);
System.out.println(l);
System.out.println(f);
System.out.println(d);
System.out.println(sex);
System.out.println(c);
}
}
输出结果:
标准输出流
//联合起来写
System.out.println("hello world!");
//分开写
PrintStream ps =System.out;
ps.println("hello world!");
标准输出流不需要手动close()关闭。可以改变标准输出流的输出放向
public class PringtStream标准输出流 {
public static void main(String[] args) {
PrintStream printStream = null;
try {
//标准输出流不在指向控制台,指向log输出流文件
printStream = new PrintStream(new FileOutputStream("log输出流文件",true));
//修改输出方向,将输出方向修改到“log输出流文件”文件
System.setOut(printStream);
//下面输出的 ,就不会再控制台显示了,会写入到“log输出流文件”这个文件
System.out.println("你好");
System.out.println("iedsoafj");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
执行结果
会发现没有输出到控制台,而是输出到了指定文件
利用标准输出流做一个记录日志工具
/*
日志工具
*/
public class logger {
/**
* 记录日志的方法
* @param msg 发生了神什么事
*/
public static void log(String msg) {
//PrintStream printStream = null;
try {
//指向一个日志文件
PrintStream printStream = new PrintStream(new FileOutputStream("JAVAse进阶/src/IO流/输出流日志/log.txt",true));
//PrintStream printStream = new PrintStream(new FileOutputStream("JAVAse进阶/src/IO流/输出流日志/log.txt"),true);
//改变输出方向
System.setOut(printStream);
//日期当前时间
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
String format = sdf.format(date);
//什么时间发生了什么事件
System.out.println(format+":"+msg);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
public class 测试日志方法 {
public static void main(String[] args) {
//测试工具类
logger.log("有灰正在编写java代码");
logger.log("有灰正在测试日志工具类");
logger.log("写一上午代码的有灰,眼睛好累,好模糊!");
}
}
运行后输出结果
会发现已经在文件中记录
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)