0

我正在尝试将文件(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();
}
4

4 回答 4

0

做了更多的谷歌搜索发现这个:(将 InputStream 转换为 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 非常相似)

于 2013-07-06T02:27:32.097 回答
0

ZipInputStream 用于按条目读取 ZIP 文件格式的文件。您需要复制整个文件(资源),无论格式是什么,您都需要简单地从 InputStream 复制所有字节。在 Java 7 中最好的方法是:

Files.copy(inputStream, targetPath, optionalCopyOptions);

详见 API

于 2013-07-06T03:28:26.440 回答
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();

并处理异常

于 2013-07-06T02:02:40.203 回答
0

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

于 2013-07-06T02:07:08.327 回答