gpt4 book ai didi

java - 解压缩文件将文件转换为字节

转载 作者:行者123 更新时间:2023-11-30 11:51:52 27 4
gpt4 key购买 nike

我有应用程序从 url 下载 .zip 文件并将每个文件从 .zip 文件转换为字节数组。目前我能够下载文件读取 .zip 文件并将整个 .zip 文件转换为字节,但在将 .zip 中的每个文件转换为字节数组时遇到了麻烦。任何帮助将不胜感激。我在下面附上了我的代码:

try {
URL url = new URL(Url);
//create the new connection
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

//set up some things on the connection
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
//and connect!
urlConnection.connect();
//set the path where we want to save the file
//in this case, going to save it on the root directory of the
//sd card.
InputStream inputStream = urlConnection.getInputStream();
dis = new DataInputStream(new BufferedInputStream(inputStream));
System.out.println("INput connection done>>>>>");

zis = new ZipInputStream(new BufferedInputStream(dis));

String targetFolder="/sdcard/";

System.out.println("zip available is"+zis.available());

int extracted = 0;

while ((entry = zis.getNextEntry()) != null) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int count;

while ((count = zis.read(buffer)) != -1) {
baos.write(buffer, 0, count);
}

String filename = entry.getName();
System.out.println("File name is>>"+filename);

byte[] bytes = baos.toByteArray();
System.out.println("Bytes is >>>>"+bytes.toString());
// do something with 'filename' and 'bytes'...
zis.closeEntry();

extracted ++;
}

zis.close();

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

最佳答案

您的行 while ((count = zis.read(buffer)) != -1) 循环读取整个 zip 文件。你想要做的是 count = zis.read(buffer, 0, entry.getSize())。这将在一个命令中将每个 zip 文件条目的内容转储到您的缓冲区中。

并且您需要使该字节数组更大。

或者,您可以保留您的小缓冲区,但只需确保对于主循环的每次迭代,您只读取 entry.getSize() 个字节,否则您将最终读取整个文件。

关于java - 解压缩文件将文件转换为字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7206008/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com