2007-12-08
Java 的 流操作
接触java时间也不短了,可是对java的基础还是很模糊,真的郁闷,特别是对IO流方面的知识了解特别少.
有时候做一些应用不知道怎么入手,比喻说上传附件时,要求不能放在应用服务器下面(防止应用服务器下文件容量太大),这样就带来了一个问题,要使用这个附件时应用服务器就不能访问到,怎么办呢?想了几天最近只好选择流操作了, 可只又不熟悉,只好找资料
下面讲一个例子:
上传附件是一张相片
xml 代码
- <img src="downloadImage.do" >
这个展示一张图片,用一个Action进行用流图片进行显示
下面是downloadImage对应的Action代码
java 代码
- // TODO Auto-generated method stub
- HttpServletRequest request //根据你的Action得到
- HttpServletResponse response //根据你的Action得到
- ServletOutputStream out=response.getOutputStream();
- //获取文件
- File file=new File("C:\\Sunset.jpg");
- //这样写大文件瞬间占用内存
- byte[] bate=new byte[(int)file.length()];;
- FileInputStream fileStream=new FileInputStream(file);
- fileStream.read(bate,0,(int)file.length());
- out.write(bate);
下面转载一个下载的例子:
java 代码
- import java.io.*;
- import java.net.*;
- import java.util.*;
- /**
- *
Title: 个人开发的API
- *
Description: 将指定的HTTP网络资源在本地以文件形式存放
- *
Copyright: Copyright (c) 2004
- *
Company: NewSky
- * @author MagicLiao
- * @version 1.0
- */
- public class HttpGet {
- public final static boolean DEBUG = true;//调试用
- private static int BUFFER_SIZE = 8096;//缓冲区大小
- private Vector vDownLoad = new Vector();//URL列表
- private Vector vFileList = new Vector();//下载后的保存文件名列表
- /**
- * 构造方法
- */
- public HttpGet() {
- }
- /**
- * 清除下载列表
- */
- public void resetList() {
- vDownLoad.clear();
- vFileList.clear();
- }
- /**
- * 增加下载列表项
- *
- * @param url String
- * @param filename String
- */
- public void addItem(String url, String filename) {
- vDownLoad.add(url);
- vFileList.add(filename);
- }
- /**
- * 根据列表下载资源
- */
- public void downLoadByList() {
- String url = null;
- String filename = null;
- //按列表顺序保存资源
- for (int i = 0; i < vDownLoad.size(); i++) {
- url = (String) vDownLoad.get(i);
- filename = (String) vFileList.get(i);
- try {
- saveToFile(url, filename);
- }
- catch (IOException err) {
- if (DEBUG) {
- System.out.println("资源[" + url + "]下载失败!!!");
- }
- }
- }
- if (DEBUG) {
- System.out.println("下载完成!!!");
- }
- }
- /**
- * 将HTTP资源另存为文件
- *
- * @param destUrl String
- * @param fileName String
- * @throws Exception
- */
- public void saveToFile(String destUrl, String fileName) throws IOException {
- FileOutputStream fos = null;
- BufferedInputStream bis = null;
- HttpURLConnection httpUrl = null;
- URL url = null;
- byte[] buf = new byte[BUFFER_SIZE];
- int size = 0;
- //建立链接
- url = new URL(destUrl);
- httpUrl = (HttpURLConnection) url.openConnection();
- //连接指定的资源
- httpUrl.connect();
- //获取网络输入流
- bis = new BufferedInputStream(httpUrl.getInputStream());
- //建立文件
- fos = new FileOutputStream(fileName);
- if (this.DEBUG)
- System.out.println("正在获取链接[" + destUrl + "]的内容...\n将其保存为文件[" + fileName + "]");
- //保存文件
- while ( (size = bis.read(buf)) != -1)
- fos.write(buf, 0, size);
- fos.close();
- bis.close();
- httpUrl.disconnect();
- }
- /**
- * 设置代理服务器
- *
- * @param proxy String
- * @param proxyPort String
- */
- public void setProxyServer(String proxy, String proxyPort) {
- //设置代理服务器
- System.getProperties().put("proxySet", "true");
- System.getProperties().put("proxyHost", proxy);
- System.getProperties().put("proxyPort", proxyPort);
- }
- /**
- * 设置认证用户名与密码
- *
- * @param uid String
- * @param pwd String
- */
- public void setAuthenticator(String uid, String pwd) {
- Authenticator.setDefault(new MyAuthenticator(uid, pwd));
- }
- /**
- * 主方法(用于测试)
- *
- * @param argv String[]
- */
- public static void main(String argv[]) {
- HttpGet oInstance = new HttpGet();
- try {
- //增加下载列表(此处用户可以写入自己代码来增加下载列表)
- oInstance.addItem("http://www.ebook.com/java/网络编程001.zip","./网络编程1.zip");
- oInstance.addItem("http://www.ebook.com/java/网络编程002.zip","./网络编程2.zip");
- oInstance.addItem("http://www.ebook.com/java/网络编程003.zip","./网络编程3.zip");
- oInstance.addItem("http://www.ebook.com/java/网络编程004.zip","./网络编程4.zip");
- oInstance.addItem("http://www.ebook.com/java/网络编程005.zip","./网络编程5.zip");
- oInstance.addItem("http://www.ebook.com/java/网络编程006.zip","./网络编程6.zip");
- oInstance.addItem("http://www.ebook.com/java/网络编程007.zip","./网络编程7.zip");
- //开始下载
- oInstance.downLoadByList();
- }
- catch (Exception err) {
- System.out.println(err.getMessage());
- }
- }
- }
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 4261 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
我的相册
李1翠
共 6 张
共 6 张
最近加入圈子
最新评论
-
glassfish服务器推送技术
很好,我们公司也在考虑换glassfish,就是为了推..
-- by sway -
glassfish服务器推送技术
我想问你com.sun.enterprise.web.connector.gri ...
-- by TITLE02 -
好不容易打个电话
汗。。。。
-- by javaoldboy -
请教:spring+hbernate sea ...
直接按照hibernate annottion文档标识UUID生存即可,不需要改 ...
-- by liuzongan -
请教:spring+hbernate sea ...
麻烦能具体说一下解决过程吗?还有,如果使用UUID生成主键应该怎样标识主键的生成 ...
-- by roy042






评论排行榜