我们在有些时候,使用网站下载的文件,会是以流的方式接收,而还有些时候,原文件格式为压缩包文件,这时,我们再使用InputStream/OutputStream或者FileInutStram/FileOutputStream来接收或者解析的话,就无法打开下载后的压缩文件,那么,下载的压缩文件流(压缩包流)怎么能打开呢?
答案很简单:使用ZipInputStream/FileOutputStream方式来接
首先,我们将获取到的InputStream流转换成ZipInputStream
然后,用zipInputStream.getNextEntry()方法获取内容,并判断是否是文件或文件夹并创建
最后,用FileOutputStream.write()方法来写入到创建的文件或文件夹中
完成之后,切记要记得close关闭处理
下面,为实例代码:
InputStream inputStream = result.getObjectContent()
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);
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中
也提供了相应的输入输出流来压缩和解压gzip、zip和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程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷
项目中需要将动态数据填充到模板中后生成的文件与其他用户上传的文件打包供审批人员下载,思路简单。但问题来了,利用freemaker将动态数据填充玩后会将流写入一个给定的OutputStream中,如果将此文件流存入物理硬盘,打包的时候再去下载。对物理硬盘的IO性能差不说,还占资源,果断否决。
方案一: ByteArrayOutputStreampublic void testFrByteArray
java inputstream子类_Java流操作,InputStream、OutputStream及子类FileInputStream、FileOutputStream;BufferedInpu...