How can I write a byte array to a file in Java?

后端 未结 8 2053
野的像风
野的像风 2020-12-08 09:07

How to write a byte array to a file in Java?

相关标签:
8条回答
  • 2020-12-08 09:27

    To write a byte array to a file use the method

    public void write(byte[] b) throws IOException
    

    from BufferedOutputStream class.

    java.io.BufferedOutputStream implements a buffered output stream. By setting up such an output stream, an application can write bytes to the underlying output stream without necessarily causing a call to the underlying system for each byte written.

    For your example you need something like:

    String filename= "C:/SO/SOBufferedOutputStreamAnswer";
    BufferedOutputStream bos = null;
    try {
    //create an object of FileOutputStream
    FileOutputStream fos = new FileOutputStream(new File(filename));
    
    //create an object of BufferedOutputStream
    bos = new BufferedOutputStream(fos);
    
    KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
    kgen.init(128); 
    SecretKey key = kgen.generateKey(); 
    byte[] encoded = key.getEncoded();
    
    bos.write(encoded);
    
    } 
    // catch and handle exceptions...
    
    0 讨论(0)
  • 2020-12-08 09:30

    You can use IOUtils.write(byte[] data, OutputStream output) from Apache Commons IO.

    KeyGenerator kgen = KeyGenerator.getInstance("AES");
    kgen.init(128);
    SecretKey key = kgen.generateKey();
    byte[] encoded = key.getEncoded();
    FileOutputStream output = new FileOutputStream(new File("target-file"));
    IOUtils.write(encoded, output);
    
    0 讨论(0)
  • 2020-12-08 09:31

    No need for external libs to bloat things - especially when working with Android. Here is a native solution that does the trick. This is a pice of code from an app that stores a byte array as an image file.

        // Byte array with image data.
        final byte[] imageData = params[0];
    
        // Write bytes to tmp file.
        final File tmpImageFile = new File(ApplicationContext.getInstance().getCacheDir(), "scan.jpg");
        FileOutputStream tmpOutputStream = null;
        try {
            tmpOutputStream = new FileOutputStream(tmpImageFile);
            tmpOutputStream.write(imageData);
            Log.d(TAG, "File successfully written to tmp file");
        }
        catch (FileNotFoundException e) {
            Log.e(TAG, "FileNotFoundException: " + e);
            return null;
        }
        catch (IOException e) {
            Log.e(TAG, "IOException: " + e);
            return null;
        }
        finally {
            if(tmpOutputStream != null)
                try {
                    tmpOutputStream.close();
                } catch (IOException e) {
                    Log.e(TAG, "IOException: " + e);
                }
        }
    
    0 讨论(0)
  • 2020-12-08 09:34

    Apache Commons IO Utils has a FileUtils.writeByteArrayToFile() method. Note that if you're doing any file/IO work then the Apache Commons IO library will do a lot of work for you.

    0 讨论(0)
  • 2020-12-08 09:43

    As Sebastian Redl points out the most straight forward now java.nio.file.Files.write. Details for this can be found in the Reading, Writing, and Creating Files tutorial.


    Old answer: FileOutputStream.write(byte[]) would be the most straight forward. What is the data you want to write?

    The tutorials for Java IO system may be of some use to you.

    0 讨论(0)
  • 2020-12-08 09:44

    As of Java 1.7, there's a new way: java.nio.file.Files.write

    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    KeyGenerator kgen = KeyGenerator.getInstance("AES");
    kgen.init(128);
    SecretKey key = kgen.generateKey();
    byte[] encoded = key.getEncoded();
    Files.write(Paths.get("target-file"), encoded);
    

    Java 1.7 also resolves the embarrassment that Kevin describes: reading a file is now:

    byte[] data = Files.readAllBytes(Paths.get("source-file"));
    
    0 讨论(0)
提交回复
热议问题