java 如何下载文件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 如何下载文件?相关的知识,希望对你有一定的参考价值。
现有下载地址,在浏览器里直接访问就会提示打开或保存,如下图。
浏览器能自动获得文件的名称、格式、大小。
只有下载地址的情况下:String url="http://aa.bb.com/adfa/sdfs/sdfs";
在java中如何做到?
1.首先struts2.xml 里面
<action name="download" class="com.zfj.action.DownloadAction">
<!-- 注意这里不再是返回一个字符串找到一个页面了
从服务器返回到本地客户端是一个流 我们需要配置流信息
type:表示接受方式或者跳转方法是
默认是 dispatcher 请求转发,所以之前我们一般不书写这个参数但是这里需要更改为stream重定向
-->
<result type="stream">
<!--
因为之前我们设置的execute方法返回一个String,但是我们现在需要返回一个流。这里我们要指定一个新的方法为我们处理业务逻
辑并且返回流所以默认execute 方法对我们没有作用了,在这里我们指定一个新的方法为我们处理业务逻辑并且最后返回流
这里的inputName是固定写法 后面的名字dname要跟 action里面的getDname对应
-->
<param name="inputName">dname</param>
<!-- 当流返回过来时,我们应当设置头信息
给浏览器,这里设置的都是流信息
name里面的是固定写法
attachment:表示使用附件下载
online:直接打开
分号后的filename是固定写法,后面通过一个ognl表达式
引用下载的文件名
-->
<param name="contentDisposition">attachment;filename=$filename</param>
</result>
</action>
这里不再是返回一个字符串找到一个页面了。从服务器返回到本地客户端是一个流,我们需要配置流信息。
type:表示接受方式或者跳转方式是(默认是dispathcher请求转发,所以之前我们一般不书写这个,但是这里下载需要更改stream)
2.对应的DownloadAction
@Override
public String execute() throws Exception
return this.SUCCESS;
//这里的getEtoak要跟struts.xml里的inputName的值对应
public InputStream getEtoak() throws Exception
return new FileInputStream(
ServletActionContext.getServletContext()
.getRealPath("/image")
+ "/"
+ this.getFilename());
参考技术B 那得看你的下载地址是什么喽,如果是文件,那么可以用java下载,如果是一个下载页面,那就直接访问这个页面呗。 参考技术C httpURLConnection conn;
conn.getInputStream;
再将这个stream 写到文件就可以了本回答被提问者采纳
java 如何将多个文件打包成一个zip后进行下载
打包压缩的如下:ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipFileName));
for(int i=0;i<fileList.size();i++)
String filename = (String)fileList.get(i);
File file = new File(filename);
zip(out,file);
out.close();
下载的如下:
private int blockSize=65000;
File file = new File(sourceFilePathName);
FileInputStream fileIn = new FileInputStream(file);
int readBytes = 0;
readBytes = fileIn.read(b, 0, blockSize);
totalRead += readBytes;
out.write(b, 0, readBytes);
代码大致如此,请参考。 参考技术A 用MyEclipse有自带的打包
以上是关于java 如何下载文件?的主要内容,如果未能解决你的问题,请参考以下文章