重要的几种流:文件流、缓冲流、转换流!

 一.文件流(字节流,字符流)

    1.字节流

package com.zijie;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class TestFileInputStream
{
    public static void main(String[] args) {
        int b = 0;
        FileInputStream in = null;
        try{
            in = new FileInputStream("e:\\go\\file.txt");
        } catch(FileNotFoundException e) {
            System.out.println("找不到指定的文件");
            System.exit(-1);
        }

        try{
            long num = 0;
            // 返回-1的话就表示已经读到了文件的结尾
            while((b = in.read()) != -1) {
                System.out.print((char)b);
                num++;
            }
            in.close();
            System.out.println("\n\n共读取了" + num + "个字节");
        } catch(IOException e1) {
            System.out.println("读取文件时出现异常");
            System.exit(-1);
        }
    }
}
package com.zijie;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestFileOutputStream {
    public static void main(String[] args) {
        int b = 0;
        FileInputStream in = null;
        FileOutputStream out = null;
        try {
            in = new FileInputStream("e:\\go\\file.txt");
            // OutputStream有这个文件就往这个文件里面写, 没有的话就自动创建一个
            out = new FileOutputStream("e:\\go\\fileNew.txt");
            // 一边读, 一边写
            while ((b = in.read()) != -1) {
                out.write(b);
            }
        } catch (FileNotFoundException e) {
            System.out.println("找不到指定文件");
            System.exit(-1);
        } catch (IOException e) {
            System.out.println("文件复制出错");
            System.exit(-1);
        }
        System.out.println("文件成功复制");
    }
}

    2.字符流

package com.zifu;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class TestFileReader {
    public static void main(String[] args) {
        FileReader fr = null;
        int c = 0;
        try {
            fr = new FileReader("e:\\go\\file.txt");
            while ((c = fr.read()) != -1) {
                System.out.print((char) c);
            }
            fr.close();
        } catch (FileNotFoundException e) {
            System.out.println("文件未找到");
            System.exit(-1);
        } catch (IOException e) {
            System.out.println("读取文件时出现异常");
            System.exit(-1);
        }
    }
}
package com.zifu;

import java.io.FileWriter;
import java.io.IOException;

public class TestFileWriter {
    public static void main(String[] args) {
        FileWriter fw = null;
        try {
            fw = new FileWriter("e:\\go\\unicode000.dat");
            for (int i = 1; i <= 50000; i++) {
                    fw.write(i);
            }
        } catch (IOException e) {
            System.out.println("写入文件出错 !");
            System.exit(-1);
        }
    }
}

 

  二.缓冲流

    IO的缓冲区的存在就是为了提高效率,把要操作的数据放进缓冲区,然后一次性把缓冲区的内容写到目的地,而不是写一次就往目的地写一次.

    在这里要注意的是当我们关闭了缓冲区对象实际也关闭了与缓冲区关联的流对象.

package com.buffer;

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 TestBufferRW {
    public static void main(String[] args) {

        try {
            BufferedWriter bw = new BufferedWriter(new FileWriter("e:\\go\\bwrite.txt"));
            BufferedReader br = new BufferedReader(new FileReader("e:\\go\\bwrite.txt"));

            String s = null;

            for (int i = 0; i < 100; i++) {
                s = "" + Math.random();
                //bw.write(s);
                bw.append(s);
                bw.newLine();
            }

            bw.flush();
            // 特别好用的方法, readLine
            while((s = br.readLine()) != null) {
                System.out.println(s);
            }
            br.close();
            bw.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
package com.buffer;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class TestBufferStream {
    public static void main(String[] args) {

        try {
            FileInputStream fis = new FileInputStream("e:\\go\\bufferedfile.txt");
            BufferedInputStream bis = new BufferedInputStream(fis);
            int c = 0;
            System.out.println((char)bis.read());
            System.out.println((char)bis.read());
/*            while((c = bis.read()) != -1) {
                System.out.print((char)c+", ");
            }*/
            // 标记到第30的位置再开始读数据
            bis.mark(100);

            for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++) {
                System.out.print((char)c);
            }
            System.out.println();
            // 回到mark标记的那个地方
            bis.reset();
            for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++) {
                System.out.print((char)c);
            }
            bis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

  三.转换流    

    转换流是指将字节流与字符流之间的转换,包含两个类:InputStreamReader和OutputStreamWriter。

      转换流的出现方便了对文件的读写,她在字符流与字节流之间架起了一座桥梁,使原本毫无关联的两种流操作能够进行转化,提高了程序的灵活性。

package com.convert;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class TestTranForm1 {
    public static void main(String[] args) {
        OutputStreamWriter osw = null;
        try {

            osw = new OutputStreamWriter(new FileOutputStream("e:\\go\\newreader.txt"));
            osw.write("山东淄博");
            // 默认使用当前系统的字符编码
            System.out.println(osw.getEncoding());
            osw.close();

            // FileOutputStream加第二个参数true表示追加内容
            osw = new OutputStreamWriter(new FileOutputStream("e:\\go\\newreader.txt", true), "utf-8");
            osw.write("qwerttttt");
            System.out.println(osw.getEncoding());
            osw.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
时间: 2024-10-31 22:25:30

重要的几种流:文件流、缓冲流、转换流!的相关文章

IO流 写入转换流(写入和读取转换流的区别,考虑方向)

package com.yyq; import java.io.*; /* 读取转换流(InputStreamReader) 是字节通向字符的桥梁 * 写入的时候是字节,但是读取的时候是字符,这叫做字节转字符 * 写入转换流(OutputStreamWriter)是字符流通向字节流的桥梁?? * 录入的时候是字符,存储的时候总是字节,这就叫做字符转字节 */ public class OutPutStreamWriterDemo { public static void main(String[

Java IO之处理流(缓冲流、转换流)

一.处理流: 增强功能,提供性能,在节点流之上. 二.节点流与处理流的关系 节点流(字节流.字符流)处于IO操作的第一线,所有操作必须通过它们进行: 处理流可以对其他流进行处理(提高效率或操作灵活性). 三.缓冲流 1.字节缓冲流 BufferedInputStream BufferedOutputStream package IOBuffer; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; im

BufferedReader,缓冲输入字符流

1. /** * 输入字符流: * --------|Reader 所有输入字符流的基类.抽象类 * -----------|FileReader 读取文件字符串的输入字符流. * -----------|BufferedReader 缓冲输入字符流.目的是:提高读取效率和拓展FileReader的功能.(该类内部也是维护了字节数组) */ public class Demo1 { public static void main(String[] args) throws IOException

JavaSE——转换流和缓冲流

转换流: 类 InputStreamReader(转换流): InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符.它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集. 每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节.要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节. 为了达到最高效率,可要考虑在 Bu

转换流 Properties集合 序列化 工具

今日内容介绍1.转换流2.缓冲流3.Properties集合4.序列化流与反序列化流5.commons-IO===========================================================1 转换流概述 OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节 将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去 2 OutputStreamWriter写文本文件 步骤 OutputStr

理解IO流:InputStream和OutputStream,FileInputStream和FileOutputStream,Reader和Writer,FileReader和FileWriter,BufferedInputStream 和 BufferedOutputStream, BufferedReader 和 BufferedWriter,转换流

/* * 1.理解 "流" ? * 动态性.连续性.方向性. * * 2.在java语言中,将数据的输入/输出称之为 IO流. IO流的分类: * 1) 从方向分: 输入流 , 输出流. (参照计算机的内存) * 将数据送到内存中去称之为输入流.反之,称之为输出流. * * 2) 从处理单位来分: 字节流(8位二进制数据), 字符流(16位二进制数据). * * 3) 从是否有数据源来分: 节点流(有数据源), 处理流(必须套在节点流上). * * 3.在Java语言中,所有流类均来自

Java IO 转换流 字节转字符流

Java IO 转换流 字节转字符流 @author ixenos 字节流 输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| FileInputStream 读取文件的输入字节流.------------| BufferedInputStream 缓冲输入字节流. 该类内部其实就是维护了一个8kb(8192b)字节数组而已. 该类出现的目的是为了提高读取文件数据的效率. 输出字节流:---------| OutputStream

java基础54 IO流技术(转换流)

1.转换流 1.输入字节的转换流:InputStreamReader是字节流转为字符流的桥梁,可以把输入字节流转换为输入字符流    2.输出字节流的转换流:OutputStreamWriter是字符流通向字节流的桥梁(相对于数据来说的):可以把输出字节流转换为输出字符流 2.转换流的作用 1.如果目前获取的是一个字节流需要转换为字符流,这个时候就可以使用转换流. 字节流---->字符流       2.使用转换流可以指定编码进行读写文件 3.实例 1 package com.dhb.file;

JAVA学习第五十课 — IO流(四)转换流

一.键盘录入 System.out:标准输出设备,控制台 System.in:标准输入设备,键盘 输入演示 输入字符串遇到回车,打印,输入over,输入结束 PS:键盘的录入只读取一个字节,先将字节拼一个字符串,所以需要一个容器,再参与over的判断 import java.io.*; public class Main { public static void main(String[] args) throws IOException { InputStream in = System.in

黑马程序猿——26,基本数据操作流,字节数组操作流,转换流,编码表

-----------android培训.java培训.java学习型技术博客.期待与您交流! ------------ 黑马程序猿--26, DataInputStream,DataOutputStream, ByteArrayInputStream,ByteArrayOutputStream, InputStreamReader,OutputStreamWriter,编码表 /* DataInputStream和DataOutputStream 能够更加操作基本数据类型的流 注意这里是Dat