深入理解Java IO流( 二 )

2.DataInputStream(1)DataInputStream:数据字节输入流 。
(2)DataOutputStream写的文件 , 只能使用DataInputStream去读 。并且读的时候你需要提前知道写入的顺序;读的顺序需要和写得顺序一致 。才可以正常取出数据  。
package com.bjpowernode.java.io;import java.io.DataInputStream;import java.io.FileInputStream;public class DataInputStreamTest01 {public static void main(String[] args) throws Exception {// 创建数据专属的字节输入流(读)DataInputStream dis = new DataInputStream(new FileInputStream("file"));// 开始读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);System.out.println(l);System.out.println(f);System.out.println(d);System.out.println(sex);System.out.println(c);// 关闭流dis.close();}}聾标准输出流1.PrintStream(1)jva.io.PrintStream:标准的字节输出流 。默认输出到控制台 。
(2)标准输出流 不需要手动close()关闭  。
(3)可以 通过System.setOut()方法改变输出流的方向
package com.bjpowernode.java.io;import java.io.FileOutputStream;import 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 world");// 可以改变标准输出流的输出方向;// 例如:标准输出流不在指向控制台 , 指向log文件PrintStream printStream = new PrintStream(new FileOutputStream("log"));// 修改输出方向System.setOut(printStream);// 输出System.out.println("Hello World"); //不会再输出到控制台 , 而是到log文件}}2.日志工具类那么标准输出流PrintStream有什么用呢?我们不妨写一个简单的日志工具类!
日志框架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 nowDate = new Date();// 格式类型转换SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");String myNowdate = sdf.format(nowDate);// 打印System.out.println(myNowdate+":"+msg);} catch (FileNotFoundException e) {e.printStackTrace();}}}日志测试package com.bjpowernode.java.io;public class LoggerTest {public static void main(String[] args) {// 测试日志工具类Logger.log("调用了System类的gc()方法 , 建议启动垃圾回收");Logger.log("调用了UserService的doSome()方法");Logger.log("用户尝试进行登录 , 验证失败");// 在log.txt打印的结果/* 2022-07-22 08:47:49 667:调用了System类的gc()方法 , 建议启动垃圾回收2022-07-22 08:47:49 703:调用了UserService的doSome()方法2022-07-22 08:47:49 714:用户尝试进行登录 , 验证失败*/}}聾File类的理解java.io.File
1、File类和四大家族没有关系 , 所以File类不能完成文件的读和写 。
2、File对象代表什么?
文件和目录路径名的抽象表示形式 。
C:Drivers 这是一个File对象
C:DriversLanRealtekReadme.txt 也是File对象 。
一个File对象有可能对应的是目录 , 也可能是文件 ;File只是一个路径名的抽象表示形式; 不能通过File完成文件的读和写
1.常用方法1(1) exists() 方法:判断当前文件是否存在
(2) creatNewFile() 方法:以文件的形式创建出来
(3) mkdir() 方法:以目录的形式创建出来; 创建多重目录mkdirs() 方法
(4)获取当前文件的父路径:方法1: 使用 getParent()  , 返回的是一个 String
方法2:使用 getParentFile()
 , 返回的是一个
File
;和上面效果是一样的
(5) getAbsolutePath() 方法:获取当前文件的绝对路径
package com.bjpowernode.java.io;import java.io.File;public class FileTest01 {public static void main(String[] args) throws Exception {// 创建File对象File f1 = new File("D:\file");// 1、判断当前文件是否存在;exists()方法System.out.println(f1.exists()); // false// 2、如果D:file不存在 , 则以文件的形式创建出来;createNewFile()方法if (!f1.exists()) {f1.createNewFile();}// 3、如果D:file不存在 , 则以目录的形式创建出来;mkdir()方法if (!f1.exists()) {f1.mkdir();}// 4、创建多重目录;mkdirs()方法File f2 = new File("D:/a/b/c/d");if (!f2.exists()) {f2.mkdirs();}// 5、获取当前文件的父路径File f3 = new File("D:\Python/ target=_blank class=infotextkey>Python学习\PyCharm Community Edition 2021.2.2");// 第一种:使用getParent() , 返回的是一个StringString parentPath = f3.getParent();System.out.println(parentPath); // D:python学习// 第二种:使用getParentFile() , 返回的是一个File;效果是一样的File parentFile = f3.getParentFile();System.out.println(parentFile); // D:python学习// 6、获取当前文件的绝对路径File f4 = new File("file");System.out.println(f4.getAbsolutePath()); // C:Users86177IdeaProjectsJavaSe1file}}


推荐阅读