我必须阅读一个名为test.p2b的文件,其中包含以下内容:
我试着这样读:
static void branjeIzDatoteke(String location){
byte[] allBytes = new byte[10000];
try {
InputStream input = new FileInputStream(location);
int byteRead;
int j=0;
while ((byteRead = input.read())!=-1){
allBytes[j] = (byte)input.read();
}
String str = new String(allBytes,"UTF-8");
for (int i=0;i<=str.length()-8;i+=8){
//int charCode = Integer.parseInt(str.substring(i,i+8),2);
//System.out.println((char)charCode);
int drek = (int)str.charAt(i);
System.out.println(Integer.toBinaryString(drek));
}
} catch (IOException ex) {
Logger.getLogger(Slika.class.getName()).log(Level.SEVERE, null, ex);
}
}
我尝试打印出字符串(当我创建String str = new String(allBytes,“UTF-8”);)时,我得到的只是一个正方形的开头,然后70多个空白行没有文字。 然后我尝试了int charCode = Integer.parseInt(str.substring(i,i + 8),2);并打印出每个单独的字符,但后来我得到了一个NumberFormatException。 我甚至试过转换 最后我尝试了最后的Integer.toBinaryString,但在这种情况下,我获得了1和0。这不是我想要的,我需要阅读实际的文本,但似乎没有方法可行。 在使用我已经尝试过的方法之前,我实际上已经阅读了二进制文件: int charCode = Integer.parseInt(str.substring(i,i + 8),2); 的System.out.println((char)的则charCode); 但就像我说的,我得到一个NumberFormatException。 我不明白为什么这些方法不起作用。
答案 0 :(得分:1)
如果要读取所有字节,可以使用java.nio.file.Files
实用程序类:
Path path = Paths.get("test.p2b");
byte[] allBytes = Files.readAllBytes(path);
String str = new String(allBytes, "UTF-8");
System.out.print(str);
您对str
内容的迭代可能不起作用。某些UTF字符表示为代理对,代码点可以跨越多个char
(如here所述)。由于您使用的是UTF,因此您应该使用String#codePoinst()
方法迭代代码点而不是字符。