【发布时间】:2020-03-09 19:22:32
【问题描述】:
我有一个字节数组文件,我正在尝试将其转换为人类可读的文件。我尝试了以下方法:
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;
}
这些代码正在编译,但没有以人类可读的方式生成输出文件。如果这是一个重复的或基本的问题,请原谅。
有人可以纠正我这里哪里出错了吗?
【问题讨论】:
-
"但它没有以人类可读的方式产生输出文件" - 你认为什么是人类可读的方式?你能提供一个示例输入和输出吗?而且,如果这对您来说是一个选择,我强烈建议您尝试
FileChannel而不是原始的FileInputStream- 它们可以神奇地处理字节、缓冲区和编码。 -
感谢您的回复。我的意思是说输出文件中的数据不应该是二进制文件或任何加密方式——我称之为人类可读的。对不起。我无法在此处附加我的数组字节文件。
-
您向我们展示的上述代码的人类可读版本应该是什么?请最后一次向我们展示示例二进制文件内容和预期输出。
-
有些可疑。如果我们能看到生成输入文件的代码可能会有所帮助。
-
文件是文本文件还是二进制文件?如果是前者,请将
FileInputStream包装在Reader中,指定适当的编码,并将数据作为字符读取。如果是后者,那么实际上就没有人类可读的形式,除了可能是十六进制值。
标签: java