- 浏览: 127159 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
AlexBlume:
...
js中“使用”el表达式 -
xiaoyuer9953:
这两天正需要这个,很好!
json-lib-2.4-jdk15.jar 组装json字符串 -
liuyue513:
...
MyEclipse下debug调试 -
Fs_sky:
谢了,太厉害了!
Object... values的用法 -
ooo456mmm:
goood
MyEclipse下debug调试
字节处理类都继承自InputStream和OutPutStream这两个抽象类;
字符流操作类都继承自Reader或Writer这两个抽象类。
字节流处理类:
InputStream:
int read() : 从输入流中读取数据的下一个字节(下个数据字节在0~255范围内),如果到达流的末尾返回-1
int read(byte[] b) : 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中,等同于read(b,0,b.length)
int read(byte[] b,int off,int len) : 将输入流中最多len个数据字节读入byte数组,将读取的第一个字节存储在元素b[off]中,下一个b[off+1]中,依此类推…
OutputStream:
void write(int b) : 将指定的字节写入此输出流,要写入字节是参数b的低位8个
void write(byte[] b) : 将b.length个字节从指定的byte数组中写入此输出流,等价于write(b,0,b.length)
void write(byte[] b,int off,int len) : 将指定byte数组中从偏移量off开始的len个字节写入此输出流。
字符流处理类:
Reader :
int read() : 读取单个字符。返回:作为整数读取的字符,范围在0~65535之间,如果已经到达流的末尾,则返回-1
int read(char[] cbuf) : 将字符读取数组中。返回:读取的字符数,如果已经到达流的末尾,则返回-1
int read(char[] cbuf,int off,int len) : 将字符读入数组的某一部分
Writer :
void write(int c) : 写入单个字符。要写入的字符包含在c的低16位中
void write(char[] cbuf) : 写入字符数组
void write(char[] cbuf,int off,int len) : 写入字符数组的某一部分
void write(String str) : 写入字符串
void write(String str,int off,int len) : 写入字符串的某一部分
字节流与字符流的桥梁 : InputStreamReader、OutputStreamWriter
字节流转化为字符流可以用InputStreamReader OutputStreamWriter转化成BufferedReader BufferedWriter 它们具有缓冲区。
下面是一些常用的例子:
下载文件
在前台页面中,常用的有两种下载文件的方式:
一种是利用a标签,设置a标签:<a href="downLoad.jsp?filename=aaa.ppt">点击下载</a> (href也可以指向.do请求)
一种是利用隐藏的iframe,设置iframe:ifrObj.src = '../../fileSave.do?idx='+idx;(src也可以指向一个jsp文件)
在后端处理下载,大概有两种方式(其实本质上是一样的,呵呵):
一种是利用jsp页面下载文件;一种是用java代码实现;
下面是jsp实现下载文件的代码:
几个java io相关的博客:
Java IO浅析:http://www.iteye.com/topic/313635
java.io 对字节流和字符流的讨论:http://www.iteye.com/topic/175121
java中文件操作:http://jdlsfl.iteye.com/blog/209387
字符流操作类都继承自Reader或Writer这两个抽象类。
字节流处理类:
InputStream:
int read() : 从输入流中读取数据的下一个字节(下个数据字节在0~255范围内),如果到达流的末尾返回-1
int read(byte[] b) : 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中,等同于read(b,0,b.length)
int read(byte[] b,int off,int len) : 将输入流中最多len个数据字节读入byte数组,将读取的第一个字节存储在元素b[off]中,下一个b[off+1]中,依此类推…
OutputStream:
void write(int b) : 将指定的字节写入此输出流,要写入字节是参数b的低位8个
void write(byte[] b) : 将b.length个字节从指定的byte数组中写入此输出流,等价于write(b,0,b.length)
void write(byte[] b,int off,int len) : 将指定byte数组中从偏移量off开始的len个字节写入此输出流。
字符流处理类:
Reader :
int read() : 读取单个字符。返回:作为整数读取的字符,范围在0~65535之间,如果已经到达流的末尾,则返回-1
int read(char[] cbuf) : 将字符读取数组中。返回:读取的字符数,如果已经到达流的末尾,则返回-1
int read(char[] cbuf,int off,int len) : 将字符读入数组的某一部分
Writer :
void write(int c) : 写入单个字符。要写入的字符包含在c的低16位中
void write(char[] cbuf) : 写入字符数组
void write(char[] cbuf,int off,int len) : 写入字符数组的某一部分
void write(String str) : 写入字符串
void write(String str,int off,int len) : 写入字符串的某一部分
字节流与字符流的桥梁 : InputStreamReader、OutputStreamWriter
字节流转化为字符流可以用InputStreamReader OutputStreamWriter转化成BufferedReader BufferedWriter 它们具有缓冲区。
下面是一些常用的例子:
/** * 从一个文件读取字节流 */ File file = new File(path); FileInputStream fis = new FileInputStream(file); byte[] b = new byte[fis.available()]; fis.read(b); fis.close(); /** * 读取一个文件的字节流,再将获得的字节流写入到另一个文件中 */ //读取字节流 FileInputStream fis = new FileInputStream("D:\\a.txt"); BufferedInputStream bis = new BufferedInputStream(fis); byte[] b = new byte[bis.available()]; bis.read(b); bis.close(); fis.close(); //写入字节流 FileOutputStream fos = new FileOutputStream("D:\\b.txt"); BufferedOutputStream bos = new BufferedOutputStream(fos); bos.write(b); bos.close(); fos.close(); /** * 根据文件路径 下载文件[向字节输出流response.getOutputStream()中写入] */ log.info("path="+path); //得到文件路径 path String fileName = null; //文件名 int pos = path.lastIndexOf(File.separator); if(pos>0){ fileName = path.substring(pos + 1); }else{ fileName = path; } response.setContentType(getContentType(fileName));//根据文件名,设置Content-Type try { fileName = URLEncoder.encode(fileName,"utf-8"); } catch (UnsupportedEncodingException e1) { log.warn("UnsupportedEncodingException!"); } response.addHeader("Content-Disposition", "attachment;filename=\""+ fileName +"\""); //通过流 下载文件 BufferedInputStream bis = null; BufferedOutputStream bos = null; try{ bis = new BufferedInputStream(new FileInputStream(path)); bos = new BufferedOutputStream(response.getOutputStream()); byte[] buff = new byte[4*1024]; int bytesRead = 0; while((bytesRead=bis.read(buff)) != -1){ bos.write(buff, 0, bytesRead); //将文件发送到客户端 } bos.flush(); bis.close(); bos.close(); }catch(Exception e){ log.warn("Exception"); } /** * 得到文件的全部字节流后,下载文件,way1 */ response.setCharacterEncoding("utf-8"); response.setContentType(getContentType(fileName));//根据文件名,设置Content-Type fileName = URLEncoder.encode(fileName,"utf-8"); response.setHeader("Content-Disposition", "attachment;filename=\""+ fileName +"\""); byte[] b = comm.getBinFile(); //从数据库获取文件的字节流 try { OutputStream os = response.getOutputStream(); try{ os.write(b);//向字节输出流中写 }finally{ try{ os.close(); }catch(IOException ex){ log.warn("IOException!!!"); } } } catch (IOException e) { log.warn("IOException!"); } /** * 得到文件的全部字节流后,下载文件,way2 */ response.setCharacterEncoding("utf-8"); response.setContentType(getContentType(fileName));//根据文件名,设置Content-Type tempStr = URLEncoder.encode(fileName,"utf-8"); response.setHeader("Content-Disposition", "attachment;filename=\""+ tempStr +"\""); byte[] b = comm.getBinFile(); //从数据库获取文件的字节流 int len = b.length; int step = 4 * 1024; //每次写入的字节长度 int mod = len % step; //余数 int count = (mod==0) ? (len/step) : (len/step)+1;//循环次数 log.info("字节长度:"+len+" 余数:"+mod+" 循环次数:"+count); try { OutputStream os = response.getOutputStream(); BufferedOutputStream bos = new BufferedOutputStream(os); for(int i=0; i<count; i++){ log.info("第 "+ i + " 次执行写入……,写入的起始位置为:"+i*step); if(mod==0){ bos.write(b, i * step, step); }else{ if(i==count-1){ bos.write(b, i * step, mod); }else{ bos.write(b, i * step, step); } } } bos.flush(); bos.close(); os.close(); } catch (IOException e) { log.warn("IOException!"); } /** * 从一个文件读取字符流 */ //法一: FileInputStream fis = new FileInputStream("1.txt"); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); String line = br.readLine(); while(line!=null){ sb.append(line); line = br.readLine(); } br.close(); isr.close(); fis.close(); //法二: FileReader reader = new FileReader(path); BufferedReader rd = new BufferedReader(reader); String line = rd.readLine(); while(line!=null){ sb.append(line); line = rd.readLine(); } rd.close(); reader.close(); /** * 通过字符流写入文件 */ FileOutputStream fos = new FileOutputStream(path); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos)); bw.write("哈哈,通过字符流写文件……"); bw.flush();//关闭前刷新缓冲流(针对带缓冲的、写入的、字符流)(当使用BufferedWriter时,才需要flush()) fos.close();
下载文件
在前台页面中,常用的有两种下载文件的方式:
一种是利用a标签,设置a标签:<a href="downLoad.jsp?filename=aaa.ppt">点击下载</a> (href也可以指向.do请求)
一种是利用隐藏的iframe,设置iframe:ifrObj.src = '../../fileSave.do?idx='+idx;(src也可以指向一个jsp文件)
在后端处理下载,大概有两种方式(其实本质上是一样的,呵呵):
一种是利用jsp页面下载文件;一种是用java代码实现;
下面是jsp实现下载文件的代码:
<%@ page language="java" contentType="text/html;charset=utf-8"%> <%@page import="java.io.*;"%> <% BufferedInputStream bis = null; BufferedOutputStream bos = null; try { String filename = request.getParameter("filename"); response.setContentType("application/x-msdownload"); response.setHeader("Content-disposition","attachment; filename=" + filename); bis = new BufferedInputStream(new FileInputStream(config.getServletContext().getRealPath(filename))); bos = new BufferedOutputStream(response.getOutputStream()); byte[] buff = new byte[4*1024]; int bytesRead = 0; while((bytesRead=bis.read(buff)) != -1){ bos.write(buff, 0, bytesRead); } } catch (Exception e) { e.printStackTrace(); } finally { if(bis != null){ bis.close(); } if(bos != null){ bos.close(); } out.clear(); out = pageContext.pushBody(); } %>
几个java io相关的博客:
Java IO浅析:http://www.iteye.com/topic/313635
java.io 对字节流和字符流的讨论:http://www.iteye.com/topic/175121
java中文件操作:http://jdlsfl.iteye.com/blog/209387
发表评论
-
经典算法之递归
2012-04-13 16:54 1494以树这样一个经典的案 ... -
赋值、引用
2012-03-02 15:12 1140此内容摘自《Thinking in j ... -
线程安全
2012-03-02 14:47 1065谈到线程安全,对于许多初学者来说很容易引起概念上的混淆。线程安 ... -
剔除List中的重复值
2010-10-09 10:28 1170本文转自:http://yangfuchao418.iteye ... -
Java反射机制中常用API
2010-09-20 11:17 1221Class是Reflection故事起源。针对任何您想探勘的c ... -
Java反射机制
2010-09-20 09:48 727JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个 ... -
接口 Iterator<E> (from API)
2010-08-23 08:33 964public interface Iterator<E& ... -
Map
2010-08-19 09:34 1171/* * 遍历Map */ Map<String, ... -
数组操作工具类Arrays
2010-07-24 14:57 1212java.util.Arrays类中包含了 ... -
Object... values的用法
2010-07-21 11:27 3339public abstract List find(Strin ... -
生成验证码图片、获取验证码
2010-07-17 11:55 1788在HTML中放一个文本框,一个img,如下: 验证码:< ... -
读取properties资源特性文件的值(键值对)、路径
2010-07-16 18:28 2773读取资源文件中的类为: import java.io.IOEx ... -
java日期格式化类
2010-07-16 18:15 1203import java.text.ParseException ... -
java异常
2010-02-01 18:25 1048运行时异常: RuntimeException类及其子类都被称 ...
相关推荐
在Java开发中,以下是一些常用API的知识点: 1. **集合框架**:Java集合框架是处理对象集合的一系列接口和类,包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)和Map(如HashMap和TreeMap)。这些...
这份“java常用API文档合集”包含了多个重要的API文档,对于Java和前端开发者来说是宝贵的参考资料。 1. **Java基础API**:Java的基础API包括了`java.lang`、`java.io`、`java.util`等包,它们提供了基本的数据类型...
Java开发常用API文档是Java程序员日常工作中不可或缺的参考资料,它涵盖了Java开发中的各种核心类库、接口和方法。这些API提供了丰富的功能,使得开发者能够高效地构建可扩展且健壮的软件系统。JDK(Java ...
例如,`java.io`包用于处理I/O操作,`java.net`包处理网络通信,`java.util`包提供了集合类如ArrayList和HashMap,而`java.lang`包中的Object类是所有类的父类,包含了一些基本的反射和异常处理功能。 2. **jQuery ...
下面将详细讨论Java API中的一些常用模块及其在实际开发中的应用。 首先,我们来看看JDK1.6,这是Java的一个重要版本。它包含了Java标准版的核心API,例如`java.lang`、`java.util`和`java.io`等包。`java.lang`是...
以上就是Java常用API的一些关键知识点,掌握这些基础将有助于你编写更高效、可维护的Java代码。在实际开发中,还需要深入学习异常处理机制、多线程、反射、注解等高级特性,以及框架如Spring、MyBatis等,以提升开发...
- **Java.io**: 提供输入/输出流操作,如文件读写、网络通信等。 - **Java.util**: 包含集合框架、日期时间处理、随机数生成等工具类。 2. **Java EE (Enterprise Edition)** Java EE是企业级Java应用开发的平台...
下面将详细介绍Java中的一些常用API,包括System类、String类、StringBuffer类、ClassLoader类、Java IO操作、ResourceBundle和Properties类以及异常处理和JDBC数据库连接。 首先,System类是Java中用于访问系统...
java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供...
4. **IO流**:Java的IO流分为字节流和字符流,如FileInputStream和FileOutputStream处理字节数据,BufferedReader和PrintWriter处理字符数据。`read()`和`write()`用于读写数据,`close()`关闭流。例如: ```java ...
总的来说,Java的常用API是构建JavaWeb项目的关键工具。理解并熟练使用这些API,能帮助开发者高效地完成从数据处理到用户界面展示的各个层面的工作。在实际开发中,还需要结合HTML、CSS和jQuery等技术,以实现更丰富...
这份资源包含了关于Java API的详细说明,可以帮助开发者快速查找和理解各种常用的接口、类和方法。下面,我们将深入探讨Java API中的关键部分,以及如何结合MySQL中文参考手册和HTTP 1.1的知识进行开发。 首先,...
Java开发中的常用API是程序员日常工作中不可或缺的一部分,它包含了各种工具类、接口和类,用于实现各种功能。这里我们主要关注几个重要的API组件,包括W3CSchool的基础教程,MySQL5中文参考手册,jQuery 1.8.3的...
2. `java.util`包:这个包包含了集合框架、日期/时间处理、随机数生成、队列、堆栈等常用工具类。其中,集合框架(如`ArrayList`、`LinkedList`、`HashSet`、`HashMap`)是处理对象集合的重要工具,而`Date`和`...
本资料“java常用API-适合初学者”旨在帮助初学者快速掌握Java API的基本用法和核心概念。 1. **基础类库** - **Object类**:所有Java类的父类,包含equals()、hashCode()、toString()等方法。 - **String类**:...
《JAVA中文版API使用手册》是一本面向Java开发者的重要参考资料,它详尽地阐述了Java开发过程中常用的各种软件包、类、接口以及方法的使用方式。对于初学者和经验丰富的开发者来说,这都是一个非常宝贵的资源,特别...
这份“高手总结java常用API”资料无疑是对Java API的精华提炼,旨在帮助开发者快速理解和掌握Java编程的核心工具。 在Java API中,我们可以找到许多关键的类库,如集合框架、输入/输出流、多线程、网络编程等。以下...
Java IO流是Java平台中用于...总之,Java IO流提供了一套丰富的API,允许开发者灵活地处理数据输入和输出,无论是简单的文本文件还是复杂的二进制数据。理解并熟练掌握这些流类及其使用方式,是Java开发中的重要技能。
java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 ...