首页 > 解决方案 > 在JAVA中读取二进制文件

问题描述

好的,所以我正在学习在 java 中编写和读取二进制文件,这是我在谷歌搜索到的所有地方都建议使用的方法 这是加权类

    public Writer(String fileName, String text) throws IOException {
        ObjectOutputStream output = null;
        try{
            output = new ObjectOutputStream(new FileOutputStream(fileName, true));
        } catch (FileNotFoundException e) {
            System.out.println("File not found!");
            System.exit(0);
        } catch (IOException e) {
            System.out.println("IO Exception!!");
            System.exit(0);
        }//THE TEXT HERE IS "test"
        output.writeChars(text);
        output.close();
        System.out.println("Successful writing!");
    }

这是阅读课

    public Reader(String fileName) throws IOException {
         ObjectInputStream in = null;
         try {
             in = new ObjectInputStream(new FileInputStream(fileName));
         } catch (FileNotFoundException e) {
             System.out.println("File Not found!");
             System.exit(0);
         } catch (IOException e) {
             System.out.println("IO Exception!!");
             System.exit(0);
         }
         int i;
         while ((i = in.read()) != -1){
             System.out.print((char) i);
         }
         in.close();
    }

但后来我的输出是测试“每个字符之间都有正方形”

标签: javafileiobinarydata-storage

解决方案


对于二进制、非文本,文件DataInputStream/DataOutputStream更清晰。

try (FileOutputStream fos = new FileOutputStream("test.bin");
        DataOutputStream dos = new DataOutputStream(fos)) {
    dos.writeUTF8("La projekto celas ŝtopi breĉojn en Vikipedio");
    dos.writeInt(42);
    dos.writeDouble(Math.PI);
}

try (FileInputStream fis = new FileInputStream("test.bin");
        DataInputStream dis = new DataInputStream(fis)) {
    String s = dis.readUTF8(); // "La projekto celas ŝtopi breĉojn en Vikipedio"
    int n = dis.readInt(); // 42
    double pi = dis.readDouble() // Math.PI
}

writeUTF8写入一个长度和一个 UTF-8 编码的字符串。Unicode 格式,因此可以编写任何脚本。可以混合使用日语、希腊语、表情符号和保加利亚语。


推荐阅读