使用java从二进制文件中提取数据

时间:2015-10-12 16:11:13

标签: java file binary ascii extract

我想创建一个包含目录文件检查的二进制文件,例如one我尝试使用此代码读取此文件

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class ZeroFileDecryptor {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String file_name = "0";
        try {

            FileInputStream fos = new FileInputStream(file_name);
            DataInputStream os = new DataInputStream(fos);

            System.out.println("os read");

            // Header
            System.out.println(os.readShort());
            System.out.println(os.readInt());

            // 0 file size
            System.out.println(os.readInt());

            // separator
            System.out.println(os.readShort());

            // 1 folder path - custom description
            System.out.println(os.readUTF());

            os.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

它包含一个标题,文件大小,一个分隔符(不确定),包含文件的文件的路径,校验和crc32(不确定)和循环抛出文件文件名 - 文件扩展名 - 文件名 - 文件校验和crc32(不确定)当它使用os.readUTF()来读取文件名时,我得到了一个java.io.UTFDataFormatException。 是解析这个文件的正确方法吗? 我怎样才能得到缺失值? 如何在没有错误的情况下读取文件名?

1 个答案:

答案 0 :(得分:0)

您是否需要知道文件名的长度才能准确读取?

无论如何,我建议查看有关阅读二进制文件的this question。基本上:将文件的一部分 - 或整个事物 - 读入字节数组,然后您可以使用它将字节转换为更合理的数据类型。所以你可以为文件名执行此操作:

byte[] bytes = new bytes[filenameLength];
try {
    fos.read(bytes);
} catch(IOException e) {
}
String filename = new String(bytes);