我正试图将一个文件(Base.jar)复制到与正在运行的jar文件相同的目录中我一直得到一个损坏的jar文件,当使用winrar打开时,它仍然保存着正确的类结构。我做错了什么?(我也尝试过不使用ZipInputStream,但没有帮助)字节[]是20480,因为这是磁盘上的大小。
我的代码:
private static void getBaseFile() throws IOException
{
InputStream input = Resource.class.getResourceAsStream("Base.jar");
ZipInputStream zis = new ZipInputStream(input);
byte[] b = new byte[20480];
try {
zis.read(b);
} catch (IOException e) {
}
File dest = new File("Base.jar");
FileOutputStream fos = new FileOutputStream(dest);
fos.write(b);
fos.close();
input.close();
}
InputStream input = Resource.class.getResourceAsStream("Base.jar");
File fileOut = new File("your lib path");
OutputStream out = FileUtils.openOutputStream(fileOut);
IOUtils.copy(in, out);
in.close();
out.close();
并处理异常
无需使用ZipInputStream,除非您想将内容解压缩到内存中并进行读取。只需使用BufferedInputStream(InputStream)或BufferedReader(InputStreamReader(InputStream))。
做了更多的谷歌搜索发现:(在Java中将InputStream转换为字节数组)适用于我
InputStream is = ...
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[16384];
while ((nRead = is.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
buffer.flush();
return buffer.toByteArray();
(它看起来与IOUtils.copy()的src非常相似)
ZipInputStream用于按条目读取ZIP文件格式的文件。你需要复制整个文件(资源),也就是说,你只需要从InputStream中复制所有字节,无论格式是什么
Files.copy(inputStream, targetPath, optionalCopyOptions);
有关详细信息,请参阅API