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
'developer tip' 카테고리의 다른 글
Retrofit 2를 통해 이미지를 업로드 할 때 진행률 표시 줄을 표시 할 수 있습니까? (0) | 2020.11.03 |
---|---|
Bash를 사용하여 Linux에서 환경 변수 설정 (0) | 2020.11.03 |
Python의 목록에있는 모든 숫자에서 값을 빼시겠습니까? (0) | 2020.11.03 |
생성 된 소스 폴더에서 Intellij를 사용할 수 없습니다. (0) | 2020.11.03 |
반환 유형별 오버로딩 (0) | 2020.11.03 |