我想创建一个包含目录文件检查的二进制文件,例如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。 是解析这个文件的正确方法吗? 我怎样才能得到缺失值? 如何在没有错误的情况下读取文件名?
答案 0 :(得分:0)
您是否需要知道文件名的长度才能准确读取?
无论如何,我建议查看有关阅读二进制文件的this question。基本上:将文件的一部分 - 或整个事物 - 读入字节数组,然后您可以使用它将字节转换为更合理的数据类型。所以你可以为文件名执行此操作:
byte[] bytes = new bytes[filenameLength];
try {
fos.read(bytes);
} catch(IOException e) {
}
String filename = new String(bytes);