Java从jar中复制文件

时间:2013-07-06 01:59:41

标签: java jar resources stream zip

我正在尝试将文件(Base.jar)复制到与正在运行的jar文件相同的目录中 我一直得到一个损坏的jar文件,当用winrar打开时仍然保持正确的类结构。我究竟做错了什么? (我也试过没有ZipInputStream,但没有帮助)byte []是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();
}

4 个答案:

答案 0 :(得分:0)

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

并处理异常

答案 1 :(得分:0)

无需使用ZipInputStream,除非您要将内容解压缩到内存中并进行读取。 只需使用BufferedInputStream(InputStream)或BufferedReader(InputStreamReader(InputStream))。

答案 2 :(得分:0)

做了一些谷歌搜索发现:(Convert InputStream to byte array in Java)为我工作

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非常相似)

答案 3 :(得分:0)

ZipInputStream用于通过输入读取ZIP文件格式的文件。无论采用何种格式,您都需要复制所需的整个文件(资源),只需复制InputStream中的所有字节。在Java 7中执行此操作的最佳方法是:

Files.copy(inputStream, targetPath, optionalCopyOptions);

请参阅API了解详情