
下面Action里的代码可以用调用浏览器进行下载xml文件
import java.awt.Desktopimport java.awt.event.ActionEvent
import java.awt.event.ActionListener
import java.net.URI
import javax.swing.JButton
import javax.swing.JFrame
public class DownLoadDemo extends JFrame {
JButton jb
public DownLoadDemo() {
jb = new JButton("Download")
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
String path = "网络xml的地址"
URI uri = new URI(path)
Desktop.getDesktop().browse(uri)
} catch (Exception e1) {
e1.printStackTrace()
}
}
})
add(jb)
setTitle("调用浏览器下载")
setBounds(380, 380,230,80)
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setVisible(true)
}
public static void main(String[] args) {
new DownLoadDemo()
}
}
当时上述下载方式,可能会d出提示,比如保存位置等.
方法二:使用IO和net下载文件.这种方式没有调用浏览器,下载过程,不会d出提示灯
import java.io.FileOutputStreamimport java.io.InputStream
import java.net.URL
import java.net.URLConnection
import java.util.Date
public class DownLoadDemo {
public static void main(String[] args) throws Exception {
String str = "XML的网络地址"
URL url = new URL(str)
URLConnection urlconn = url.openConnection()
urlconn.connect()
InputStream is = urlconn.getInputStream()
FileOutputStream fos = new FileOutputStream("qq.exe")
byte[] buf = new byte[4096]
int length = 0
//System.out.println("开始下载时间:"+new Date())
while((length=is.read(buf))!=-1){
fos.write(buf, 0, length)
}
fos.close()
is.close()
//System.out.println("下载完成时间:"+new Date())
}
}
我用struts2给你实现: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">attachmentfilename=${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())
}
<a href="control/downFile.do?pistrPath=' + rec.get('path') + '">'请求到后台,把文件地址传到后台
/**
* 下载文件
* @param pistrPath
* @param piobjResponse
* @throws MalformedURLException
*/
public void downloadNet(String pistrPath, HttpServletResponse piobjResponse) throws MalformedURLException {
// 下载网络文件
int iByte = 0
System.getProperties()
try {
URL objurl = new URL(pistrPath)
System.out.println(pistrPath)
URLEncoder.encode(objurl.toString(), SengisConstant.STR_CN_ENCODE)
URLConnection objConn = objurl.openConnection()
InputStream objInputStream = objConn.getInputStream()
OutputStream objOutStream = piobjResponse.getOutputStream()
byte[] arrByte = new byte[1204]
while ((iByte = objInputStream.read(arrByte)) != -1) {
objOutStream.write(arrByte, 0, iByte)
}
objOutStream.flush()
objOutStream.close()
objInputStream.close()
} catch (FileNotFoundException e) {
e.printStackTrace()
} catch (IOException e) {
e.printStackTrace()
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)