我有一个字节数组文件,试图将其转换为可读的文件。我尝试了以下方法:
public static void main(String args[]) throws IOException
{
//System.out.println("Platform Encoding : " + System.getProperty("file.encoding"));
FileInputStream fis = new FileInputStream("<Path>");
// Using Apache Commons IOUtils to read file into byte array
byte[] filedata = IOUtils.toByteArray(fis);
String str = new String(filedata, "UTF-8");
System.out.println(str);
}
另一种方法:
public static void main(String[] args) {
File file = new File("<Path>");
readContentIntoByteArray(file);
}
private static byte[] readContentIntoByteArray(File file) {
FileInputStream fileInputStream = null;
byte[] bFile = new byte[(int) file.length()];
try {
FileInputStream(file);
fileInputStream.read(bFile);
fileInputStream.close();
for (int i = 0; i < bFile.length; i++) {
System.out.print((char) bFile[i]);
}
} catch (Exception e) {
e.printStackTrace();
}
return bFile;
}
这些代码正在编译中,但无法以人类可读的方式生成输出文件。请问这是一个重复的问题还是基本的问题。
有人可以纠正我在这里出问题的地方吗?
答案 0 :(得分:0)
您的用于将字节文件解码为UTF-8文本文件的代码(从第一个片段开始)对我来说似乎是正确的(假设FileInputStream fis = new FileInputStream(“ Path”)产生了正确的fileInputStream)。
如果您期望文本文件格式,但是不确定文件格式是哪种编码(也许不是UTF-8),则可以使用下面的库进行查找。
https://code.google.com/archive/p/juniversalchardet/
或只是探索Charset库中的一些不同的Charset,并查看它们在String初始化行中产生的结果以及产生的结果:
new String(byteArray, Charset.defaultCharset()) // try other Charsets here.
您显示的第二种方法将捕获与字节转换为char关联,具体取决于字符,如此处所讨论(Byte and char conversion in Java)。 很有可能,如果找不到该文件的有效编码,那么在字节转换之前,它不容易被人读懂,或者传递给您的字节数组文件丢失了一些东西,使得该文件在途中可解码。