Java文件到二进制转换

时间:2011-08-19 08:50:34

标签: java file binary io

如何将文件转换为二进制文件?我只需要它用于我的项目。我需要通过二进制文件加密文件。

4 个答案:

答案 0 :(得分:13)

如果你指的是访问ACTUAL BINARY表格,那么读入文件并将每个字节转换为二进制表示......

编辑:

这里有一些代码可以将字节转换为带有位的字符串:

String getBits(byte b)
{
    String result = "";
    for(int i = 0; i < 8; i++)
        result += (b & (1 << i)) == 0 ? "0" : "1";
    return result;
}

如果您指的是访问文件中的字节,那么只需使用以下代码(您也可以将其用于第一种情况):

File file = new File("filename.bin");
byte[] fileData = new byte[file.length()];
FileInputStream in = new FileInputStream(file);
in.read(fileData):
in.close();
// now fileData contains the bytes of the file

要使用这两段代码,您现在可以遍历每个字节并使用位创建一个String对象(比原始文件大小大8倍!!):

String content = "";
for(byte b : fileData)
    content += getBits(b);
// content now contains your bits.

答案 1 :(得分:0)

使用FileInputStream,您可以从文件中获取字节

来自JavaDoc:

  

FileInputStream从文件中的文件获取输入字节   系统。可用的文件取决于主机环境。

     

FileInputStream用于读取原始字节流,例如   图像数据。要读取字符流,请考虑使用   的FileReader。

答案 2 :(得分:0)

        try {
            StringBuilder sb = new StringBuilder();
            File file = new File("C:/log.txt");
            DataInputStream input = new DataInputStream( new FileInputStream( file ) );
            try {
                while( true ) {
                    sb.append( Integer.toBinaryString( input.readByte() ) );
                }
            } catch( EOFException eof ) {
            } catch( IOException e ) {
                e.printStackTrace();
            }
            System.out.println(sb.toString());
        } catch( FileNotFoundException e2 ) {
            e2.printStackTrace();
        }

答案 3 :(得分:0)

用于编码/解码的简单说明代码:

要编码:

// Encode Character | char
Integer.toBinaryString(myByte);
// Encode Byte | byte
Integer.toBinaryString(myCharacter);

要解码:

// Use BigInteger insted of Integer beacause it can decode large binary code(2)
new BigInteger(data, 2).toByteArray()

编码文件:

private static void encodeToBinary(File inputPath, File outputPath) throws IOException {

        // Read all the bytes from the input file

        InputStream inputData = new FileInputStream(inputPath);
        ByteArrayOutputStream fileData = new ByteArrayOutputStream();
        inputData.transferTo(fileData);

        // StringJoiner to store binary code(2) encoded

        StringJoiner binaryData = new StringJoiner(" ");

        // Convert every byte into binaryString

        for(Byte data : fileData.toByteArray()) {
            binaryData.add(Integer.toBinaryString(data));
        }

        // (File)OutputStream for writing binary code(2)

        OutputStream outputData = new FileOutputStream(outputPath);
        outputData.write(binaryData.toString().getBytes());

        // [IMPORTANT] Close all the streams

        fileData.close();
        outputData.close();
        inputData.close();
    }

解码文件:

private static void decodeToFile(File inputPath, File outputPath) throws IOException {
        // -->>Just reverse the process

        // Read all the bytes from the input (binary code(2)) file to string

        InputStream inputData = new FileInputStream(inputPath);
        ByteArrayOutputStream fileData = new ByteArrayOutputStream();
        inputData.transferTo(fileData);

        // ByteArrayOutputStream to store bytes decoded

        ByteArrayOutputStream originalBytes = new ByteArrayOutputStream();

        // Convert every binary code(2) to original byte(s)

        for(String data : new String(fileData.toByteArray()).split(" ")) {
            originalBytes.write(new BigInteger(data, 2).toByteArray());
        }

        // (File)OutputStream for writing decoded bytes

        OutputStream outputData = new FileOutputStream(outputPath);
        outputData.write(originalBytes.toByteArray());

        // [IMPORTANT] Close all the streams

        inputData.close();
        fileData.close();
        originalBytes.close();
        outputData.close();
    }