`
cainiaoyu
  • 浏览: 20933 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java-io小结

阅读更多
Java处理的数据流主要分为字节流和字符流。字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。
字节流的抽象基类:InputStream,OutputStream。
字符流的抽象基类:Reader,Writer。都是存放在java.io包中
字符流:
Reader与Writer


1,FileReader:将一个文件按字符流的形式进行读取操作。方法只包含从Reader和InputStream中所申明的方法。
   FileWriter:产生一个输出流,向文件输出数据。方法只包含从Writer和OutputStream中所申明的方法。
code:

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class Test{


public static void main(String[] args) {

FileReader fr = null;

FileWriter fw = null;

try {

fr = new FileReader("test.txt");

fw = new FileWriter("test1.txt");

//fw = new FileWriter("test1.txt", true);在文件末尾以添加的形式写字符

char buf[] = new char[1024];

int ch = 0;

while((ch = fr.read())!=-1){//最后一个返回-1

fw.write(ch);//读取一个字符

fw.flush();//刷新流的缓冲

}

while ((ch=fr.read(buf))!=-1) {//返回每次读取的长度,没读取到返回-1

fw.write(buf, 0, ch);//读取多个字符存入buf中

fw.flush();

}

} catch (FileNotFoundException e) {

throw new RuntimeException("文件不存在!");

} catch (IOException e) {

throw new RuntimeException("读写失败!");

}finally{

try {

if(fr!=null)//必须对流进行判断,否则,有可能产生空指针异常

fr.close();//关闭流前会刷新流的缓冲

} catch (IOException e) {

System.out.println("Reader流关闭失败");

}

try {

if(fw!=null)

fw.close();

} catch (IOException e) {

System.out.println("Writer流关闭失败");

}

}

}

}
2,BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取.(可以设置缓冲区大小)其实是Reader的一个装饰类,构造函数的参数为所有Reader的子类。
   BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入.(可以设置缓冲区大小)其实是Writer的一个装饰类,构造函数的参数为所有Writer的子类。

code:

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class Test{

public static void main(String[] args) {

FileReader fr = null;

BufferedReader br = null;

FileWriter fw = null;

BufferedWriter bw = null;

try {

fr = new FileReader("test.txt");

br = new BufferedReader(fr);

fw = new FileWriter("test1.txt");

bw = new BufferedWriter(fw);

String s;

while ((s=br.readLine())!=null) {//bufferedReader提供一个读取一行的方法

bw.write(s);

bw.newLine();//bufferedwriter提供一个添加新行的方法

}

} catch (FileNotFoundException e) {//是io异常的一格子类

throw new RuntimeException("文件不存在!");

} catch (IOException e) {

throw new RuntimeException("读写失败!");

}finally{

try {

if(br!=null)

br.close();//关闭缓冲内会自动关闭流

} catch (IOException e) {

System.out.println("Reader流关闭失败");

}

try {

if(bw!=null)

bw.close();

} catch (IOException e) {

System.out.println("Writer流关闭失败");

}

}

}

}
BufferedReader的子类:LineNumberReader也是一个装饰类,额外提供了获取和设置行号的函数getLineNumber()和setLineNumber()。
code:

import java.io.BufferedWriter;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.LineNumberReader;

public class Test{

public static void main(String[] args) {

FileReader fr = null;

LineNumberReader lnr = null;

FileWriter fw = null;

BufferedWriter bw = null;

try {

fr = new FileReader("test.txt");

lnr = new LineNumberReader(fr);

fw = new FileWriter("test1.txt");

bw = new BufferedWriter(fw);

String s;

lnr.setLineNumber(100);//设置起始行号

while ((s=lnr.readLine())!=null) {//bufferedReader提供一个读取一行的方法

s=lnr.getLineNumber()+":"+s;

bw.write(s);

bw.newLine();//bufferedwriter提供一个添加新行的方法

bw.flush();

}

} catch (FileNotFoundException e) {//是io异常的一格子类

throw new RuntimeException("文件不存在!");

} catch (IOException e) {

throw new RuntimeException("读写失败!");

}finally{

try {

if(lnr!=null)

lnr.close();//关闭缓冲内会自动关闭流

} catch (IOException e) {

System.out.println("Reader流关闭失败");

}

try {

if(bw!=null)

bw.close();

} catch (IOException e) {

System.out.println("Writer流关闭失败");

}

}

}
} 4,InputStreamReader 类是从字节流到字符流的桥梁:它读入字节,并根据指定的编码方式,将之转换为字符流。使用的编码方式可能由名称指定,或平台可接受的缺省编码方式。(可以设置编码方式UTF-8,GBK)
   OutputStreamWriter 将多个字符写入到一个输出流,根据指定的字符编码将多个字符转换为字节。每个 OutputStreamWriter 合并它自己的 CharToByteConverter, 因而是从字符流到字节流的桥梁。
code:


import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

public class Test{

public static void main(String[] args) {

BufferedReader br = null;

InputStreamReader isr = null;

OutputStreamWriter osw = null;

BufferedWriter bw = null;

try {

isr = new InputStreamReader(System.in);//system.in返回的是字节流。将字节流转成字符流来使用reader中的特有方法

br = new BufferedReader(isr);

osw = new OutputStreamWriter(System.out);//system.out返回的也是字节流。将字节流转成字符流来使用Writer中的特有方法

bw = new BufferedWriter(osw);

String s;

while ((s=br.readLine())!=null) {//bufferedReader提供一个读取一行的方法

bw.write(s);

bw.newLine();//bufferedwriter提供一个添加新行的方法

bw.flush();

}

} catch (IOException e) {

throw new RuntimeException("读写失败!");

}finally{

try {

if(br!=null)

br.close();//关闭缓冲内会自动关闭流

} catch (IOException e) {

System.out.println("Reader流关闭失败");

}

try {

if(bw!=null)

bw.close();

} catch (IOException e) {

System.out.println("Writer流关闭失败");

}

}

}

}
5,PipedReader:实现了 pipe 的概念,主要在线程中使用。管道输入流是指一个通讯管道的接收端。一个线程通过管道输出流发送数据,而另一个线程通过管道输入流读取数据,这样可实现两个线程间的通讯。
   PipedWriter:实现了 pipe 的概念,主要在线程中使用。管道输出流是指一个通讯管道的接收端。
code:
import java.io.IOException;

import java.io.PipedReader;

import java.io.PipedWriter;

class read implements Runnable{

private PipedReader pr;

public read(PipedReader pr) {

this.pr = pr;

}

public void run() {

try {

char []buf = new char[1024];

pr.read(buf);

System.out.println(buf);

} catch (IOException e) {

throw new RuntimeException("流读取失败!");

}finally{

try {

pr.close();

} catch (IOException e) {

e.printStackTrace();

}

}



}

}

class write implements Runnable{

private PipedWriter pw;

public write(PipedWriter pw) {

this.pw = pw;

}

public void run() {

try {

pw.write("这是什么情况!");

} catch (IOException e) {

throw new RuntimeException("流读取失败!");

}finally{

try {

pw.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

public class Test{

public static void main(String[] args) {

PipedReader pr = new PipedReader();

PipedWriter pw = new PipedWriter();

try {

pr.connect(pw);

} catch (IOException e) {

throw new RuntimeException("连接失败!");

}

new Thread(new read(pr)).start();

new Thread(new write(pw)).start();

}

}
【结果】
这是什么情况!
6,CharArrayReader:实现一个可用作字符输入流的字符缓冲区。(可以不需要close关闭)
   CharArrayWrite:实现一个可用作 Writer 的字符缓冲区。缓冲区会随向流中写入数据而自动增长。可使用 toCharArray() 和 toString() 获取数据。(用流的思想来操作数组)
   StringReader:源为一个字符串的字符流。
   StringWriter:一个字符流,可以用其回收在字符串缓冲区中的输出来构造字符串。
字节流:
InputStream与OutputStream



1,FileInputStream:把一个文件作为 InputStream ,实现对文件的读取操作
   FileOutputStream:文件输出流是向 File 或 FileDescriptor 输出数据的一个输出流。
与FileReader、FileWriter对应。
2,BufferedInputStream:另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。在创建 BufferedInputStream 时,会创建一个内部缓冲区数组。
   BufferedOutputStream :实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。
与BufferedReader、BufferedWriter对应。
3, PipedInputStream:管道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的所有数据字节。
   PipedOutputStream:将管道输出流连接到管道输入流来创建通信管道。管道输出流是管道的发送端。
与PipedReader、PipedWriter对应
分享到:
评论

相关推荐

    JAVA IO流小结

    JAVA IO流小结JAVA IO流小结JAVA IO流小结

    Java学习IO流小结--字节流

    主要描述了常用字节流的用法,附上一些代码!

    java io 类 小结 代码

    简洁分类 代码直接使用 InputStream OutputStream Reader Writer FileInputStream FileOutputStream FileReader FileWriter InputStreamReader OutputStreamWriter BufferedReader BufferedWriter ...

    Java学习IO流小结--字符流

    主要描述了常用字节流的用法,附上一些代码!

    (超赞)JAVA精华之--深入JAVA API

    1.3.11 小结 1.4 java中的一些常用词汇 1.5 J2SE学习中的30个基本概念 1.6 Java线程 1.7 Java 5.0多线程编程 1.8 Java Socket编程 1.9 Java的内存泄漏 1.10 抽象类与接口的区别 1.11 Java变量类型间的相互转换 2 ...

    Java网络开发--T/TCP使用举例

    T/TCP使用举例 3.1 概述 31 3.2 客户重新启动 31 3.3 常规的T/TCP事务 33 3.4 服务器收到过时的重复SYN 34 3.5 服务器重启动 35 3.6 请求或应答超出报文段最大长度MSS 36 3.7 向后兼容性 39 3.8 小结 41

    JAVA 2平台安全技术-结构,API设计和实现

    3.12 小结 67 第4章 安全结构的使用 70 4.1 安装JDK1.2 70 4.2 策略配置 71 4.2.1 配置系统型和用户专用型策略 71 4.2.2 配置应用程序专用型策略 72 4.2.3 配置一个可选Policy类的实现 72 4.2.4 缺省的策略文件格式 ...

    Java高级程序设计实战教程第五章-Java序列化机制.pptx

    Java高级程序设计 第5章 Java序列化机制 5.1 应用场景 5.2 相关知识5.3 实施过程 5.4 拓展知识5.5 拓展训练 5.6 课后小结5.7 课后习题 5.8 上机实训 Java高级程序设计实战教程第五章-Java序列化机制全文共15页,当前...

    Java基础知识点总结.docx

    Java数组与集合小结 305 递归 309 对象的序列化 310 Java两种线程类:Thread和Runnable 315 Java锁小结 321 java.util.concurrent.locks包下常用的类 326 NIO(New IO) 327 volatile详解 337 Java 8新特性 347 Java...

    Java 2平台安全技术-结构,API设计和实现

    3.12 小结 67 第4章 安全结构的使用 70 4.1 安装JDK1.2 70 4.2 策略配置 71 4.2.1 配置系统型和用户专用型策略 71 4.2.2 配置应用程序专用型策略 72 4.2.3 配置一个可选Policy类的实现 72 4.2.4 缺省的策略文件格式 ...

    Java网络开发--TCP协议

    T/TCP协议 2.1 概述 23 2.2 T/TCP中的新TCP选项 23 2.3 T/TCP实现所需变量 25 2.4 状态变迁图 27 2.5 T/TCP的扩展状态 28 2.6 小结 30

    一些语言的按行读取文件的代码实现小结

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Java...

    Java网络编程--Unix域协议:概述

    Unix域协议:概述 16.1 概述 175 16.2 用途 176 16.3 性能 177 16.4 编码举例 177 16.5 小结 179

    Java网络编程--NNTP:网络新闻传送协议

    NNTP:网络新闻传送协议 15.1 概述 166 15.2 NNTP 167 15.3 一个简单的新闻客户 170 15.4 一个复杂的新闻客户 171 15.5 NNTP的统计资料 172 15.6 小结 173

    Java网络开发--TCP事物协议

    TCP事务协议 第1章 T/TCP概述 1.1 概述 1.2 UDP上的客户-服务器 1.3 TCP上的客户-服务器 6 1.4 T/TCP上的客户-服务器 12 1.5 测试网络 15 1.6 时间测量程序 15 1.7 应用 17 1.8 历史 19 ...1.10 小结 21

    Java网络编程--T/TCP实现:TCP用户请求

    T/TCP实现:TCP用户请求 12.1 概述 120 12.2 PRU_CONNECT请求 120 12.3 tcp_connect函数 120 12.4 PRU_SEND和PRU_SEND_EOF请求 124 12.5 tcp_usrclosed函数 125 12.6 tcp_sysctl函数 126 ...12.8 小结 127

    Java中String类和IO流——学习小结

    String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象。String类对象创建后是一个常量,有final修饰,不能被修改。字符串重新赋值不是修改,而是生成了一个新的字符串,原先的字符串...

    Java网络开发--T/TCP协议的实现:插口层

    T/TCP协议的实现:插口层 5.1 概述 56 5.2 常量 56 5.3 sosend函数 56 5.4 小结 58

    Java网络编程--

    T/TCP实现:TCP输入 11.1 概述 101 11.2 预处理 103 11.3 首部预测 104 11.4 被动打开的启动 105 11.5 主动打开的启动 108 11.6 PAWS:防止序号重复 114 11.7 ACK处理 115 11.8 完成被动打开和同时...11.11 小结 119

    JAVA SE学习精华集锦

    1.3.11 小结 56 1.4 java中的一些常用词汇 56 1.5 J2SE学习中的30个基本概念 58 1.6 Java线程 60 1.7 Java 5.0多线程编程 65 1.8 Java Socket编程 80 1.9 Java的内存泄漏 85 1.10 抽象类与接口的区别 86 1.11 Java...

Global site tag (gtag.js) - Google Analytics