• 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:UsersAdministrator>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();
    
        }
    
    
    
    }
  • 相关阅读:
    【mybatis】IF判断的坑
    QCheckBox控件
    对话框——文件对话框
    对话框——颜色对话框
    对话框——输入对话框
    事件和信号
    布局管理——复习示例
    布局管理——网格布局
    布局管理——盒式布局
    1.4 控制流
  • 原文地址:https://www.cnblogs.com/obge/p/12853735.html
Copyright © 2020-2023  润新知