[java] 메모리에 새 java.io.File을 만드는 방법은 무엇입니까?

하드 디스크가 아닌 메모리 File에서 새 파일을 만들려면 어떻게 java.io해야합니까?

Java 언어를 사용하고 있습니다. 하드 드라이브에 파일을 저장하고 싶지 않습니다.

잘못된 API ( java.util.jar.JarFile)에 직면했습니다 . 그것은 기대하고 있어요 File fileString filename. 파일이없고 ( byte[]콘텐츠 만 있음 ) 임시 파일을 만들 수 있지만 아름다운 솔루션은 아닙니다. 서명 된 항아리의 다이제스트를 확인해야합니다.

byte[] content = getContent();
File tempFile = File.createTempFile("tmp", ".tmp");
FileOutputStream fos = new FileOutputStream(tempFile);
fos.write(archiveContent);
JarFile jarFile = new JarFile(tempFile);
Manifest manifest = jarFile.getManifest();

임시 파일을 만들지 않고 매니페스트를 얻는 방법에 대한 모든 예는 감사하겠습니다.



답변

스트림에 쓰려면 메모리에서 다음을 사용하십시오.

new ByteArrayOutputStream();


답변

하드 디스크가 아닌 메모리에 java.io에서 새 파일을 만들려면 어떻게해야합니까?

어쩌면 당신은 혼동 FileStream:

  • A File는 파일 및 디렉토리 경로 이름 의 추상적 인 표현입니다 . File객체를 사용하여 파일 시스템의 파일 메타 데이터에 액세스하고이 파일 시스템의 파일에 대한 일부 작업 (예 : 파일 삭제 또는 만들기)을 수행 할 수 있습니다. 그러나 File클래스는 파일 내용을 읽고 쓰는 방법을 제공하지 않습니다.
  • 읽기와 파일 쓰기, 당신은 사용하고 Stream, 객체를 같은 FileInputStreamFileOutputStream. 이러한 스트림은 File개체 에서 만든 다음 파일을 읽고 쓰는 데 사용할 수 있습니다.

파일에서 읽고 쓰는 것과 유사한 방식으로 a 및 a 를 사용하여 바이트 버퍼 에서 읽고 쓰는 방식으로 메모리에 상주하는 바이트 버퍼를 기반으로 스트림을 만들 수 있습니다 . 배열은 “파일의”콘텐츠가 포함되어 있습니다. 그러면 개체 가 필요하지 않습니다 .ByteArrayInputStreamByteArrayOutputStreambyteFile

모두 File...ByteArray...스트림에서 상속 java.io.OutputStream하고 java.io.InputStream사용자가 파일 또는 바이트 배열에서 읽는 여부를 숨길 수있는 공통의 슈퍼 클래스를 사용할 수 있도록하는 것이 각각.


답변

Jimfs 와 같은 메모리 내 파일 시스템을 사용할 수 있습니다.

다음은 readme의 사용 예입니다.

FileSystem fs = Jimfs.newFileSystem(Configuration.unix());
Path foo = fs.getPath("/foo");
Files.createDirectory(foo);

Path hello = foo.resolve("hello.txt"); // /foo/hello.txt
Files.write(hello, ImmutableList.of("hello world"), StandardCharsets.UTF_8);


답변