我们在有些时候,使用网站下载的文件,会是以流的方式接收,而还有些时候,原文件格式为压缩包文件,这时,我们再使用InputStream/OutputStream或者FileInutStram/FileOutputStream来接收或者解析的话,就无法打开下载后的压缩文件,那么,下载的压缩文件流(压缩包流)怎么能打开呢?
答案很简单:使用ZipInputStream/FileOutputStream方式来接
首先,我们将获取到的InputStream流转换成ZipInputStream
然后,用zipInputStream.getNextEntry()方法获取内容,并判断是否是文件或文件夹并创建
最后,用FileOutputStream.write()方法来写入到创建的文件或文件夹中
完成之后,切记要记得close关闭处理

下面,为实例代码:

 				InputStream inputStream = result.getObjectContent()  //获取的InputStream流;
                ZipInputStream zipInputStream = new ZipInputStream(inputStream);
                byte[] buffer = new byte[1024];
                ZipEntry zipEntry;
                int len;
                File zipfile = new File(StringUtil.DownloadPicUrl+"/"+ get.getObjectKey());
                if(zipfile.exists()){
                    zipfile.delete();
                }else {
                    zipfile.mkdirs();
                try {
                    while ((zipEntry = zipInputStream.getNextEntry()) != null) {
                        String entryName = zipEntry.getName();
                        if (zipEntry.isDirectory()) {
                            entryName = entryName.substring(0, entryName.length() - 1);
                            File folder = new File(zipfile.getAbsolutePath() + File.separator+ entryName);
                            folder.mkdirs();
                        } else {
                            String fileName=zipfile.getAbsolutePath() + File.separator + entryName;
                            File file1 = new File(fileName);
                            file1.createNewFile();
                            FileOutputStream fileOut = new FileOutputStream(file1);
                            while ((len = zipInputStream.read(buffer)) > 0) {
                                fileOut.write(buffer, 0, len);
//                                total+=buffer;
                            fileOut.close();
                        zipInputStream.closeEntry();
                    zipInputStream.close();
                 } catch (IOException e) {
                    e.printStackTrace();
                    RingLog.e(e.toString());

以上,为个人见解,如有不同看法或更好的处理方式,请评论区留下您宝贵的建议,非常感谢!!!

我们在有些时候,使用网站下载的文件,会是以流的方式接收,而还有些时候,原文件格式为压缩包文件,这时,我们再使用InputStream/OutputStream或者FileInutStram/FileOutputStream来接收或者解析的话,就无法打开下载后的压缩文件,那么,下载的压缩文件流(压缩包流)怎么能打开呢?答案很简单:使用ZipInputStream/FileOutputStream方式来接首先,我们将获取到的InputStream流转换成ZipInputStream然后,用zipInput 在日常中经常会使用到zip或rar这样的压缩文件,更加便利了我们日常文件的传输和使用。当然在java中 也提供了相应的输入输出压缩和解压gzipzip和rar这样的文件ZipInputStream压缩文件输入”,用于读取磁盘上的压缩文件 ZipOutputStream压缩文件输出”,用于将程...
1.ByteArrayOutputStream private ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); public InputStream getInputStream() { return new ByteArrayInputStream(getOutputStream().toByteArray()); public ByteArrayOutputStream getOutputStream()
ZipInputStream的基本用法: 首先要创建一个ZipInputStream,通常是传入一个FileInputStream作为数据源,然后循环调用getNextEntry(),当返回值为null时,表示zip读取结束。 一个ZipEntry表示一个压缩文件或目录,如果是压缩文件,我们就用read()方法进行读取,当返回值为-1时,读取结束。 public class Main { public static void main(String[] args) {
如果你在Java程序中处理IO的话,很快就会碰到如下的场景,你向一个类中的OutputStream写数据,同时需要从另一个类的InputStream中读取这些数据,在一些式的场景更多,例如我们在一个HTTP的请求中,客户端请求的资源需要较长时间的处理,为了避免端测的长时间等待,我们可以处理好一部分数据就先返回一部分数据,减少不必要的等待,这个时候我们就需要考虑到这两种的互。这边主要介绍3中转换的方法 方法一:使用byte array缓存转换 代码示例如下 ByteArrayOutputStr
Java SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷贝InputStreamJava SE程序 文件的拷
项目中需要将动态数据填充到模板中后生成的文件与其他用户上传的文件打包供审批人员下载,思路简单。但问题来了,利用freemaker将动态数据填充玩后会将写入一个给定的OutputStream中,如果将此文件存入物理硬盘,打包的时候再去下载。对物理硬盘的IO性能差不说,还占资源,果断否决。 方案一: ByteArrayOutputStreampublic void testFrByteArray
java inputstream子类_Java操作,InputStreamOutputStream及子类FileInputStreamFileOutputStream;BufferedInpu...
Java中的(stream)是一种用于处理输入输出操作的抽象数据类型。InputStreamOutputStreamJava中最基本的,它们分别用于读取和写入字节。FileInputStreamFileOutputStreamInputStreamOutputStream的子类,用于读取和写入文件。BufferedInputStream和BufferedOutputStream是对InputStreamOutputStream的包装,用于提高读写效率。下面我们来简单介绍一下这些类的用法。 1. InputStream:用于读取字节,包含多个抽象方法,如read()、available()等。 2. OutputStream:用于写入字节,包含多个抽象方法,如write()、flush()等。 3. FileInputStream:用于读取文件,继承自InputStream,可以直接读取文件中的字节数据。 4. FileOutputStream:用于写入文件,继承自OutputStream,可以直接将字节数据写入文件。 5. BufferedInputStream:用于提高读取效率,包装了InputStream,提供了缓冲区功能。 6. BufferedOutputStream:用于提高写入效率,包装了OutputStream,提供了缓冲区功能。 使用这些类时,需要注意关闭以释放资源。可以使用try-with-resources语句来自动关闭,也可以在finally块中手动关闭。示例代码如下: try(InputStream input = new FileInputStream("file.txt"); OutputStream output = new FileOutputStream("output.txt")) { // 读取文件并写入到输出 } catch(IOException e) { // 处理异常 } finally { // 关闭 Android Lambda expressions are allowed only at source level 1.8 or above 错误解决,“NotNull”引用搞得小问题 红鼻子老头: 感谢!解决了我的问题 androidX(10)版本,下载过程中报错 The current offset on block-info isn‘t update correct,块信息上的当前偏移量未正确更新,解决办法 xueqinxuya: 用了这个解决方案,还是出现 The current offset on block-info isn't update correct, 1310376 != 1399141 on 0 有没有解决办法 android11 InputStream OutputStream ZipInputStream FileOutputStream,压缩包流的转换,压缩流转为文件 JokerSoulClub: 最终结果是文件夹哈,不是zip文件啊?是需要再压缩吗? Android Lambda expressions are allowed only at source level 1.8 or above 错误解决,“NotNull”引用搞得小问题 锥度vs: greendao真让人无语,无缘无故突然爆出这个异常。明明代码完全没改 Permission Denial: startForeground from pid=2, uid=1 requires android.permission.FOREGROUND_SERVICE svn: E230001: Server SSL certificate verification failed: certificate has expired, certificate issue IOException Could not delete path ‘...\app\build\intermediates\transforms\mergeJavaRes\debug\0.jar‘.