java ----- I/O (五) 数据流读写文件
读写二进制文件常用的类DataInputStream 和 DataOutputStream
one、使用字节流(DataInputStream ) 读二进制文件
步骤:
1、导入相关类,并抛出异常
2、构造一个数据输入流对象,将文件输入流对象 (fileInputStream )与源数据源(E:\\obge\\Obge.class)关联起来
注意:要在路径 E:\\obge\\Obge.class 下弄点数据,如帅气的obge
3、利用数据输入流类的方法读取二进制文件中的数据
4、关闭流(close() 方法)
two、使用字节流(DataOutputStream )写二进制文件
步骤:
1、导入相关类,并抛出异常
2、构造一个数据输出流对象,将文件输出流对象 (fileOutpuStream)与源数据源(E:\\obge\\Obge.class)关联起来
注意:要在路径E:\\obge\\Obge.class 下弄点数据,如帅气的obge
3、利用数据输出流类的方法读取二进制文件中的数据
4、关闭流(close() 方法)
不过DataInputStream类与 DataOutputStream 类搭配使用,从一个编译好的二进制文件 obge.class 中读取数据,然后复制到另一个二进制文件 CopyObge.class 文件中。
package com.obge.test2; /*** * 从一个编译好的二进制文件 obge.class 中读取数据,然后复制到另一个二进制文件 CopyObge.class 文件中 */ import java.io.*; public class DataInputStreamStu { public static void main(String[] args) { try { //创建文件输入流与源文件关联 起来 FileInputStream fileInputStream = new FileInputStream("E:\\obge\\Obge.class"); //放到数据输入流中 DataInputStream dataInputStream = new DataInputStream(fileInputStream); //创建文件输出流 关联源文件 FileOutputStream fileOutputStream = new FileOutputStream("E:\\obge\\CopyObge.class"); //放到数据输出流中 DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream); //读写二进制文件 //定义一个变量做中转站 int temp; //将 Obge.class 中的内容,赋予到 临时中转小小变量中 while((temp = dataInputStream.read()) != -1) { //把读取的数据写到 CopyObge.class 文件中 dataOutputStream.write(temp); } //关闭流 fileInputStream.close(); dataOutputStream.close(); System.out.println("执行成功"); }catch (IOException e){ e.getMessage(); } } }
就是class 文件要通过jvm 识别运行,你用记事本打开就是一个乱码,心想就这叫二进制文件
翻译一下看看,好像也不怎么能看懂
C:\Users\Administrator>E: E:\>cd obge E:\obge>javap -v class Obge.class //将class 文件翻译成可读懂的字节码指令文件 错误: 找不到类: class Classfile /E:/obge/Obge.class Last modified 2020-5-13; size 415 bytes MD5 checksum 0ff5abeea5271dbddb23724d92215439 Compiled from "Obge.java" public class Obge minor version: 0 major version: 52 flags: ACC_PUBLIC, ACC_SUPER Constant pool: #1 = Methodref #6.#15 // java/lang/Object."<init>":()V #2 = Fieldref #16.#17 // java/lang/System.out:Ljava/io/PrintStream; #3 = String #18 // 浣犲ソObge #4 = Methodref #19.#20 // java/io/PrintStream.println:(Ljava/lang/String;)V #5 = Class #21 // Obge #6 = Class #22 // java/lang/Object #7 = Utf8 <init> #8 = Utf8 ()V #9 = Utf8 Code #10 = Utf8 LineNumberTable #11 = Utf8 main #12 = Utf8 ([Ljava/lang/String;)V #13 = Utf8 SourceFile #14 = Utf8 Obge.java #15 = NameAndType #7:#8 // "<init>":()V #16 = Class #23 // java/lang/System #17 = NameAndType #24:#25 // out:Ljava/io/PrintStream; #18 = Utf8 浣犲ソObge #19 = Class #26 // java/io/PrintStream #20 = NameAndType #27:#28 // println:(Ljava/lang/String;)V #21 = Utf8 Obge #22 = Utf8 java/lang/Object #23 = Utf8 java/lang/System #24 = Utf8 out #25 = Utf8 Ljava/io/PrintStream; #26 = Utf8 java/io/PrintStream #27 = Utf8 println #28 = Utf8 (Ljava/lang/String;)V { public Obge(); descriptor: ()V flags: ACC_PUBLIC Code: stack=1, locals=1, args_size=1 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return LineNumberTable: line 1: 0 public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: ACC_PUBLIC, ACC_STATIC Code: stack=2, locals=1, args_size=1 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #3 // String 浣犲ソObge 5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: return LineNumberTable: line 4: 0 line 5: 8 } SourceFile: "Obge.java" E:\obge>
java 文件
DataInputStream类与 DataOutputStream 类搭配使用,可以按照与平台无关的方式从流中读写基本数据类型(八大基本类型哦)的数据。
注意:
DataInputStream 的 readUTF() 方法能读取采用UTF-8 字符集编码的字符串,
DataOutputStream 的 writeUTF() 方法写入采用UTF-8 字符集编码的字符串
three、读写文本文件
package com.obge.test2; import java.io.*; public class DataInputStreamReadStringStu { public static void main(String[] args) throws IOException { //使用dataOutputStream.writeUTF 向datautf.txt 写文本 FileOutputStream fileOutputStream = new FileOutputStream("E:\\obge\\datautf.txt"); BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream); DataOutputStream dataOutputStream = new DataOutputStream(bufferedOutputStream); //采用utf-8 字符集编码编写字符串 dataOutputStream.writeUTF("obge帅"); //其他方式写 // dataOutputStream.writeByte(1); // dataOutputStream.writeChar('d'); dataOutputStream.close(); bufferedOutputStream.close(); fileOutputStream.close(); //使用 dataInputStream.readUTF() 读 采用utf-8 字符集编码编写的 datautf.txt文本文件 FileInputStream fileInputStream = new FileInputStream("E:\\obge\\datautf.txt"); BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream); DataInputStream dataInputStream = new DataInputStream(bufferedInputStream); //读取采用utf-8 字符集编码编写字符串 System.out.println(dataInputStream.readUTF()); //其他方式 读 //System.out.println(dataInputStream.readByte()); dataInputStream.close(); bufferedInputStream.close(); fileInputStream.close(); } }