Java I/O流概念

一、流的分类

1. 按数据流动方向:

  • 输入流:只能从中读取字节数据,而不能向其写出数据
  • 输出流:只能向其写入字节数据,而不能从中读取数据

2. 按照流的数据类型:

  • 字节流:用于处理字节数据,一次读入或读出是8位二进制。
  • 字符流:用于处理Unicode字符数据,一次读入或读出是16位二进制。

3.按照实现功能不同可以分为:

  • 节点流(低级流):从/向一个特定的IO设备读/写数据的流。
  • 处理流(高级流):对已存在的流进行连接和封装的流。

二:java中io中常用的流

1.对文件进行操作

FileInputStream(字节输入流),FileOutputStream(字节输出流),FileReader(字符输入流),FileWriter(字符输出流)

2.对管道进行操作:

PipedInputStream(字节输入流),PipedOutStream(字节输出流),PipedReader(字符输入流),PipedWriter(字符输出流)

3.字节/字符数组:

ByteArrayInputStream,ByteArrayOutputStream,CharArrayReader,CharArrayWriter是在内存中开辟了一个字节或字符数组。

4.转化流:

InputStreamReader,OutputStreamWriter,把字节转化成字符。

5.数据流:

DataInputStream,DataOutputStream。

6.Buffered缓冲流:

BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter,是带缓冲区的处理流,缓冲区的作用的主要目的是:避免每次和硬盘打交道,提高数据访问的效率。

7.打印流:

printStream,printWriter。

8.对象流:

ObjectInputStream(反序列化对象输入流),ObjectOutputStream(序列化对象输出流)。

 

三:举例说明流的使用

/**
*导入的头文件
*/
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream;
/** * 字节输入输出流测试 * * @author Nikita * */ public class IOTest { public static void main(String[] args) { StringBuffer buffer = new StringBuffer(); // 字符串缓冲 /* 输入流 */ InputStream in = null; try { // 1. 打开输入流 in = new FileInputStream("E:\\jg\\exercise.txt");//从一个路径中打开输入流读取内容 // 2. 读取 byte[] b = new byte[1024 * 4]; int len = in.read(b); // 返回读取到的字节数,返回-1表示读取到流结尾 while(len != -1){ buffer.append(new String(b, 0, len)); // 将读取到的字节解析为String追加到缓冲 len = in.read(b); } System.out.println(buffer.toString()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // 3. 释放资源,关闭输入流 if (in != null){ try { in.close();//调用close()方法 } catch (IOException e) { e.printStackTrace(); } } } /* 输出流 */ OutputStream out = null; try { File file = new File("D:\\test\\demo\\test.txt");//将目标文件路径放置在一个指定位置写入内容 if (!file.getParentFile().exists()){ // 文件路径不存在,则创建路径中所有不存在的目录 file.getParentFile().mkdirs(); } // 1. 打开输出流 out = new FileOutputStream(file); // 2. 写 out.write(buffer.toString().getBytes()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // 3. 释放输出流资源 if (out != null){ try {out.close(); } catch (IOException e) { e.printStackTrace(); } } } } }

 

posted @ 2015-04-24 23:11  安子静  阅读(153)  评论(0编辑  收藏  举报