developer tip

Java에서 파일에 바이트 배열을 어떻게 쓸 수 있습니까?

copycodes 2020. 11. 3. 08:17
반응형

Java에서 파일에 바이트 배열을 어떻게 쓸 수 있습니까?


Java에서 파일에 바이트 배열을 쓰는 방법은 무엇입니까?


Apache Commons IO 에서 IOUtils.write (byte [] data, OutputStream output)사용할 수 있습니다 .

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

으로 세바스찬 REDL는 가장 정직하고 지금 지적 java.nio.file.Files.write을 . 이에 대한 자세한 내용은 파일 읽기, 쓰기 및 만들기 자습서 에서 찾을 수 있습니다 .


이전 답변 : FileOutputStream.write (byte []) 가 가장 간단합니다. 쓰고 싶은 데이터는 무엇입니까?

자바 IO 시스템에 대한 튜토리얼은 당신에게 몇 가지 사용 일 수있다.


Java 1.7부터는 새로운 방법이 있습니다. 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은 Kevin이 설명하는 당혹감을 해결합니다. 파일 읽기는 이제 다음과 같습니다.

byte[] data = Files.readAllBytes(Paths.get("source-file"));

한 댓글 작성자가 "왜 타사 라이브러리를 사용합니까?"라고 물었습니다. 대답은 스스로하기에는 너무 많은 고통이라는 것입니다. 다음 은 파일에서 바이트 배열을 읽는 역 연산 올바르게 수행하는 방법의 예입니다 (죄송합니다. 이것은 제가 쉽게 사용할 수있는 코드 일 뿐이며 질문자가 실제로이 코드를 붙여넣고 사용하는 것을 원하지는 않습니다).

public static byte[] toByteArray(File file) throws IOException { 
   ByteArrayOutputStream out = new ByteArrayOutputStream(); 
   boolean threw = true; 
   InputStream in = new FileInputStream(file); 
   try { 
     byte[] buf = new byte[BUF_SIZE]; 
     long total = 0; 
     while (true) { 
       int r = in.read(buf); 
       if (r == -1) {
         break; 
       }
       out.write(buf, 0, r); 
     } 
     threw = false; 
   } finally { 
     try { 
       in.close(); 
     } catch (IOException e) { 
       if (threw) { 
         log.warn("IOException thrown while closing", e); 
       } else {
         throw e;
       } 
     } 
   } 
   return out.toByteArray(); 
 }

모든 사람은 그것이 얼마나 고통 스러운지 철저히 경악해야합니다.

좋은 라이브러리를 사용하십시오. 당연히 Guava의 Files.write (byte [], File)을 추천 합니다.


파일에 바이트 배열을 쓰려면 다음 방법을 사용하십시오.

public void write(byte[] b) throws IOException

BufferedOutputStream 클래스에서.

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...

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.


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

참고URL : https://stackoverflow.com/questions/1769776/how-can-i-write-a-byte-array-to-a-file-in-java

반응형