如何File在内存中创建新的(来自java.io) - 而不是在硬盘上?
我正在使用Java语言.我不想将文件保存在硬盘上.
我遇到了糟糕的API(java.util.jar.JarFile).它期待String文件名的File文件.我没有文件(只有byte []内容)并且可以创建临时文件,但它不是很漂亮的解决方案.我需要验证签名jar的摘要.
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();
Run Code Online (Sandbox Code Playgroud)
任何有关如何在没有临时文件的情况下获得清单的示例将不胜感激.
我想现在这个问题不是偏离主题的
And*_*ter 74
如何在内存中创建新文件(来自java.io),而不是在硬盘中?
也许你很困惑,File并且Stream:
File是文件和目录路径名的抽象表示.使用File对象,您可以访问文件系统中的文件元数据,并对此文件系统上的文件执行某些操作,如删除或创建文件.但是File该类没有提供读写文件内容的方法.Stream对象,如FileInputStream或FileOutputStream.这些流可以从File对象创建,然后用于读取和写入文件.您可以基于驻留在内存中的字节缓冲区创建流,方法是使用a ByteArrayInputStream和a ByteArrayOutputStream以与读取和写入文件类似的方式读取和写入字节缓冲区.该byte数组包含"文件"内容.那你不需要一个File对象.
它们File...和ByteArray...流都分别从java.io.OutputStream和继承java.io.InputStream,因此您可以使用公共超类来隐藏您是从文件还是从字节数组中读取.
har*_*ldK 27
要在内存中写入流,请使用:
new ByteArrayOutputStream();
Run Code Online (Sandbox Code Playgroud)
Ted*_*ard 10
您可以使用内存文件系统,例如Jimfs
这是他们自述文件中的用法示例:
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);
Run Code Online (Sandbox Code Playgroud)