`

Java 的 流操作

    博客分类:
  • j2ee
阅读更多
载自:http://www.iteye.com/topic/146841


接触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());    
    }    
   
  }    
   
}   
  
分享到:
评论

相关推荐

    Java流操作文件

    Java流对File的各种操作方式。包括增、删、改、查、复制,文件检索等功能。

    Java流操作功能详解.pdf

    像这样的日志代码会更好: if (log.isLoggable(Level.FINE)) { ...假定你已经完成了分析,并且判断出是运行环境中Java 组件的性能需要改善。 ——参考资料:仅个人学习,未详尽测试,请自行调试!!

    Java流操作之数据流实例代码

    主要介绍了Java流操作之数据流实例代码,具有一定借鉴价值,需要的朋友可以参考下

    Java字符流与字节流区别

    Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。 Java 内用 Unicode 编码存储字符,字符流...

    java文件与流操作code

    java各种文件与流操作代码,帮助对i/o操作不是很熟悉的人了解java各种文件流操作

    JAVA教程IO流操作

    JAVA教程 io流操作 JAVA教程 io流操作 JAVA教程 io流操作

    Java流(文件读写操作)

    一、 流的分类 • 按数据流动方向 – 输入流:只能从中读取字节数据,而不能向其写出数据 – 输出流:只能向其写入字节数据,而不能从中读取数据 • 按照流所处理的数据类型 – 字节流:用于处理字节数据。 – 字符...

    Java之IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输...

    java操作excel数据的导入导出,java流的读取

    java操作excel数据的导入导出,java流的读取

    java文件流操作.docx

    java文件流操作.docx

    java字符流操作

    java字符流操作 能对各种编码的文件读和写入.

    java 流操作对文件的分割和合并的实例详解

    主要介绍了java 流操作对文件的分割和合并的实例详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下

    Java Stram(流) 的操作源码

    一个全面的Java操作流的源码 有低级流及高级流的操作方法哦

    java字节流操作帮助文档

    java字节流相关操作,int转换成byte字节数组,String转换为byte字节数组,bcd码转换。

    JAVA 文件常用流操作.zip

    JAVA 文件常用流操作 包括文件的创建,重命名,删除等等。字节流,字符流,缓存流,数据流,打印流,内存流等等

    java文件流操作[定义].pdf

    java文件流操作[定义].pdf

    java post文件流的操作

    适用于javapost 文件流提交和接收数据

    Java8并行流中自定义线程池操作示例

    主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧,需要的朋友可以参考下

    java的IO流操作

    java的IO流操作,在java中是非常的知识点。开发者掌握基本点io流操作是非常重要的。

    JAVA IO流技术

    4. Java中流的概念细分 流的方向: 输入流:数据源到程序(InputStream、Reader读进来) ...节点流处于io操作的第一线,所有操作必须通过他们进行;处理流可以对节点流 进行包装,提高性能或提高程序的灵活性。

Global site tag (gtag.js) - Google Analytics