java数组字节文件对人类可读

时间:2019-11-13 22:22:51

标签: java

我有一个字节数组文件,试图将其转换为可读的文件。我尝试了以下方法:

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;
    }

这些代码正在编译中,但无法以人类可读的方式生成输出文件。请问这是一个重复的问题还是基本的问题。

有人可以纠正我在这里出问题的地方吗?

1 个答案:

答案 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)。 很有可能,如果找不到该文件的有效编码,那么在字节转换之前,它不容易被人读懂,或者传递给您的字节数组文件丢失了一些东西,使得该文件在途中可解码。