programing

새로운 java.io을 작성하는 방법메모리에 파일이 있습니까?

itsource 2022. 10. 15. 11:07
반응형

새로운 java.io을 작성하는 방법메모리에 파일이 있습니까?

신규 작성 방법File(출처:java.io하드디스크가 아닌 메모리로요?

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

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

임시 파일을 생성하지 않고 매니페스트를 얻는 방법에 대한 예를 들어 주시면 감사하겠습니다.

하드 디스크가 아닌 메모리에 (java.io에서) 새로운 파일을 작성하려면 어떻게 해야 합니까?

헷갈릴 수도 있어File그리고.Stream:

  • A은(는) 파일 및 디렉토리 경로 이름을 추상적으로 표현한 것입니다.사용방법File오브젝트에서는 파일시스템 내의 파일 메타데이터에 액세스하여 이 파일시스템 상의 파일에 대해 파일 삭제 또는 작성 등의 작업을 수행할 수 있습니다.근데...File클래스는 파일 내용을 읽고 쓰는 메서드를 제공하지 않습니다.
  • 파일을 읽고 쓰려면Stream오브젝트(또는 등).이러한 스트림을 생성할 수 있습니다.File파일을 읽고 쓰는 데 사용됩니다.

파일 읽기 및 쓰기와 마찬가지로및 을 사용하여 바이트버퍼에서 읽고 쓰기를 함으로써 메모리에 있는 바이트버퍼를 기반으로 스트림을 작성할 수 있습니다.bytearray에는 "파일" 콘텐츠가 포함되어 있습니다.필요 없습니다.File반대합니다.

둘 다File...및 그ByteArray...개울이 상속되다java.io.OutputStream그리고.java.io.InputStream공통 슈퍼클래스를 사용하여 파일 또는 바이트 배열에서 읽을지 여부를 숨길 수 있습니다.

를 작성할 수 없습니다.java.io.File(Java 힙) 메모리에 콘텐츠를 보관합니다.*

대신 보통 스트림을 사용합니다.메모리의 스트림에 쓰려면 다음 명령을 사용합니다.

OutputStream out = new ByteArrayOutputStream();
out.write(...);

그러나 유감스럽게도 스트림을 입력으로 사용할 수 없습니다.java.util.jar.JarFile말씀하신 대로 사용할 수 있는 것은File또는String유효한 JAR 파일의 경로가 포함됩니다.다른 API를 사용하고 싶지 않다면 현재와 같은 임시 파일을 사용하는 것이 유일한 선택이라고 생각합니다.

API를 , API 를면면면면면면면면면면면면면 in in in in in in in in in in in in in in라는 이름의 .JarInputStream사용할 수 있습니다.해 주세요.archiveContentByteArrayInputStream하려면 , JAR를 사용합니다.

try (JarInputStream stream = new JarInputStream(new ByteArrayInputStream(archiveContent))) {
     Manifest manifest = stream.getManifest();
}

*) RAM 디스크와 같이 메모리에 상주하는 완전한 파일 시스템을 작성하는 것은 분명 가능하지만 Java 프로세스에 관한 한 "디스크"에 상주하는 것은 가능합니다.

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

저는 임시 파일이 그것에 대한 또 다른 해결책이 될 수 있다고 생각합니다.

File tempFile = File.createTempFile(prefix, suffix, null);
FileOutputStream fos = new FileOutputStream(tempFile);
fos.write(byteArray);

여기에 그것에 대한 답이 있다.

언급URL : https://stackoverflow.com/questions/17595091/how-to-create-a-new-java-io-file-in-memory

반응형