Java学些教程:【转载】IO流读取数据

转载摘自速学堂 IO技术

示例

import java.io.*;
public class TestIO2 {
    public static void main(String[] args) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("d:/a.txt"); // 内容是:abc
            StringBuilder sb = new StringBuilder();
            int temp = 0;
            //当temp等于-1时,表示已经到了文件结尾,停止读取
            while ((temp = fis.read()) != -1) {
                sb.append((char) temp);
            }
            System.out.println(sb);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                //这种写法,保证了即使遇到异常情况,也会关闭流对象。
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

结果

在这里插入图片描述

部分流

1. InputStream/OutputStream

    字节流的抽象类。

 2. Reader/Writer

    字符流的抽象类。

 3. FileInputStream/FileOutputStream

    节点流:以字节为单位直接操作“文件”。

 4. ByteArrayInputStream/ByteArrayOutputStream

    节点流:以字节为单位直接操作“字节数组对象”。

 5. ObjectInputStream/ObjectOutputStream

    处理流:以字节为单位直接操作“对象”。

 6. DataInputStream/DataOutputStream

    处理流:以字节为单位直接操作“基本数据类型与字符串类型”。

 7. FileReader/FileWriter

    节点流:以字符为单位直接操作“文本文件”(注意:只能读写文本文件)。

 8. BufferedReader/BufferedWriter

    处理流:将Reader/Writer对象进行包装,增加缓存功能,提高读写效率。

 9. BufferedInputStream/BufferedOutputStream

    处理流:将InputStream/OutputStream对象进行包装,增加缓存功能,提高 读写效率。

 10. InputStreamReader/OutputStreamWriter

 	 处理流:将字节流对象转化成字符流对象。

 11. PrintStream
		
	 处理流:将OutputStream进行包装,可以方便地输出字符,更加灵活。

字符流和字节流

字节流不能很好的处理Unicode字符,经常会出现“乱码”现象。所以,我们处理文本文件,一般可以使用文件字符流,它以字符为单位进行操作。

1、字节流FileInputStream与 FileOutputStream
import java.io.FileOutputStream;
import java.io.IOException;
public class TestFileOutputStream {
    public static void main(String[] args) {
        FileOutputStream fos = null;
        String string = "北京尚学堂欢迎您!";
        try {
            // true表示内容会追加到文件末尾;false表示重写整个文件内容。
            fos = new FileOutputStream("d:/a.txt", true);
            //该方法是直接将一个字节数组写入文件中; 而write(int n)是写入一个字节
            fos.write(string.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (fos != null) {
                    fos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
2、字符流FileReader与FileWriter
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class TestFileCopy2 {
    public static void main(String[] args) {
        // 写法和使用Stream基本一样。只不过,读取时是读取的字符。
        FileReader fr = null;
        FileWriter fw = null;
        int len = 0;
        try {
            fr = new FileReader("d:/a.txt");
            fw = new FileWriter("d:/d.txt");
            //为了提高效率,创建缓冲用的字符数组
            char[] buffer = new char[1024];
            //边读边写
            while ((len = fr.read(buffer)) != -1) {
                fw.write(buffer, 0, len);
            }
 
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fw != null) {
                    fw.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (fr != null) {
                    fr.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

在这里插入图片描述
在这里插入图片描述

3、缓冲字节流BufferedInputStream和BufferedOutputStream
4、缓冲字符流BufferedReader和BufferedWriter
5、字节数组流ByteArrayInputStream和ByteArrayOutputStream

经常用在需要流和数组之间转化

6、数据流DataInputStream和DataOutputStream

提供了可以存取与机器无关的所有Java基础类型数据(如:int、double、String等)的方法

7、对象流ObjectInputStream/ObjectOutputStream

以“对象”为数据源,但是必须将传输的对象进行序列化与反序列化操作。
把Java对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为Java对象的过程称为对象的反序列化。
(1)ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
(2)ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。

8、转换流InputStreamReader/OutputStreamWriter

用来实现将字节流转化成字符流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值