IO流-字符流2

IO流-字符流2

字符流写数据的5种方法


构造方法:
OutputStreamWriter(OutputStream out):创建一个使用默认字符编码的OutputStreamWriter 写数据的5种方式:
    void write (int c):                                写一个字符
    void write (char[] cbuf):                     写入一个字符数组
    void write(char[] cbuf,int off,int len):  写入字符数组的一部分 void write (String str):写一个字符串
    void write (String str,int off,int len):     写一个字符串的一部分
 */
package IO.StringStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class Writer_5Method {
    public static void main(String[] args) throws IOException {
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("java.txt"));
        //void write (int c):                                写一个字符
//        osw.write(97);      // 写入字符a
        osw.flush();            // void flush();  刷新方法  只有刷新后才能写入文件
        //void write (char[] cbuf):                     写入一个字符数组
        char[] c = {'a', 'b', 'c', 'd', 'e'};  //char数组
        osw.write(c);       // 写入字符数组
        //void write(char[] cbuf,int off,int len):  写入字符数组的一部分 void write (String str):写一个字符串
        osw.write("\r\n");          //换行
        osw.write(c, 1, 3);     //参数为数组, 从off开始,写len个数据
        //void write (String str):     写一个字符串
        osw.write("ABCDE");
        //void write (String str,int off,int len):     写一个字符串的一部分
        osw.write("\r\n");
        osw.write("今天天气不错!",0,3);   //从0开始,写入3个字符. 控制台输出: 今天天
        osw.close();    // close方法先执行flush方法刷新流再关闭资源.
    }
}

        构造方法:
        InputStreamReader(InputStream in):创建一个默认字符集的ISR对象
        读数据的两种方式:
        int read():                     一次读一个字节数据
        int read ( char [] cbuf ):    一次读一个字节数组数据
 */
package IO.StringStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
public class Reader_2Method {
    public static void main(String[] args) throws IOException {
        InputStreamReader isr = new InputStreamReader(new FileInputStream("d:\\Cat.txt"));
        //int read():                     一次读一个字节数据
        int cha;
//        while((cha=isr.read())!=-1){
//            System.out.print((char)cha );
//        }
        //int read ( char [] cbuf ):    一次读一个字节数组数据
        char [] bytes = new char[1024];     //这里需要字符数组
        int len;
        while((len=isr.read(bytes))!=-1){
            System.out.print(new String(bytes,0,len));
        }
        isr.close();
    }

}

案例: 复制java文件

    思路:
        1. 根据数据源创建字符输入流
        2. 根据目的地创建字符输出流
        3. 读写数据, 复制文件
        4. 释放资源
 */
package IO.StringStream;

import java.io.*;

public class CopyStringFile  {
    public static void main(String[] args) throws IOException {
    //1. 根据数据源创建字符输入流
        InputStreamReader isr = new InputStreamReader(new FileInputStream("C:\\Users\\BigBaby\\IdeaProjects\\Module01\\src\\IO\\StringStream\\Writer_5Method.java"));
    //2. 根据目的地创建字符输出流
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("5M.java"));
    //3. 读写数据, 复制文件 标准格式
        //一次一个字符
        int ch;
        while ((ch=isr.read())!=-1){
            osw.write(ch);
        }
        //一次一个字符数组
        char [] chars = new char[1024];
        int len;
        while ((len=isr.read(chars))!=-1){
            osw.write(chars,0,len);
        }
    //4. 释放资源
        isr.close();
        osw.close();
    }
}
  

案例: 复制java文件(改进版)


如果在程序中涉及到解码,编码问题还要使用InputStreamReader 和 OutputStreamWriter 类.

    思路:
        1. 根据数据源创建字符输入流
        2. 根据目的地创建字符输出流
        3. 读写数据, 复制文件
        4. 释放资源
 */
package IO.StringStream;

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

public class NewCopyStringFile {
    public static void main(String[] args) throws IOException {
        //1. 根据数据源创建字符输入流
        FileReader fr = new FileReader("5M.java");
        //2. 根据目的地创建字符输出流
        FileWriter fw = new FileWriter("5M.txt");
        //3. 读写数据, 复制文件
        //(1)一个字符
//        int ch;
//        while ((ch=fr.read())!=-1){
//            fw.write(ch);
//        }
        //(2)一个字符数组
        char [] chars = new char[1024];
        int len;
        while ((len=fr.read(chars))!=-1){
            fw.write(chars,0,len);
        }
        //4. 释放资源
        fr.close();
        fw.close();
    }
}

    BufferedReader (Reader in)
    BufferedWriter (Writer out)
 */
package IO.StringStream;

import java.io.*;

public class StringBuffered {
    public static void main(String[] args) throws IOException {
        //创建字符输入缓冲流
        BufferedReader br = new BufferedReader(new FileReader("java.txt"));
        //读取数据,在控制台输出, 标准格式
        //(1)
        int ch;
        while ((ch=br.read())!=-1){
            System.out.print((char)ch);
        }
        
        //(2)
        char[] chars = new char[1024];
        int len;
        while ((len = br.read(chars)) != -1) {
            System.out.print(new String(chars, 0, len));
        }
        //释放资源
        br.close();
    }
}

案例: 复制Java文件(字节缓冲流改进版)

    思路:
        1. 根据数据源创建字符输入流
        2. 根据目的地创建字符输出流
        3. 读写数据, 复制文件
        4. 释放资源
 */
package IO.StringStream;

import java.io.*;

public class StringBuffered_2 {
    public static void main(String[] args) throws IOException {
        //1. 根据数据源创建字符输入流
        BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\BigBaby\\IdeaProjects\\Module01\\src\\IO\\StringStream\\StringBuffered.java"));
        //2. 根据目的地创建字符输出流
        BufferedWriter bw = new BufferedWriter(new FileWriter("StringBufferedCopy.java"));
        //3. 读写数据, 复制文件
        //(1)字节
        int ch;
        while ((ch=br.read())!=-1){
            bw.write(ch);
        }
        //(2)数组
        char [] chars = new char[1024];
        int len;
        while ((len=br.read(chars))!=-1){
            bw.write(chars,0,len);
        }
        //4. 释放资源
        br.close();
        bw.close();
    }
}

3.8字符缓冲流特有功能
    BufferedWriter:
        void newLine():写一行行分隔符,行分隔符字符串由系统属性定义
    BufferedReader:
        public String readLine():读一行文字。结果包含行的内容的字符串,不包括任何行终止字符,
        如果流的结尾已经到达,则为null
 */
package IO.StringStream;
import java.io.*;
public class StringBuffered_3_new {
    public static void main(String[] args) throws IOException {
        /*
        //写字符文件的标准方法
        //创建字符缓冲输出流对象
        BufferedWriter bw = new BufferedWriter(new FileWriter("NewPower.txt"));
        for (int i=0; i<3;i++){
            bw.write("NewPower!"+i);
//            bw.write("\r\n");   //只有Windows系统能识别
            bw.newLine();       //我们用newLine方法实现换行
            bw.flush();     //把一行的数据刷新进文件
        }
        bw.close();  //释放资源
         */
        //创建字符缓冲输入流对象   读取整行的字符数据的格式
        BufferedReader br = new BufferedReader(new FileReader("NewPower.txt"));
        //读取第1行字符
//        String line1 = br.readLine();
//        System.out.println(line1);
        //读取第2行字符
//        String line2 = br.readLine();
//        System.out.println(line2);
        String line;         //创建字符串     用循环改进
        while ((line=br.readLine())!=null){  //返回值不是Null
            System.out.println(line);        //输出返回值
        }
        br.close();  //释放资源
    }
}

字符缓冲流的特有方式复制文件


import java.io.*;

//最常用的复制字符文件的方法--字符缓冲流的特有方法--标准格式
public class StringBuffered_4 {
    public static void main(String[] args) throws IOException {
        //根据数据源创建字符缓冲输入流对象
        BufferedReader br = new BufferedReader(new FileReader("d:\\2\\Cat.txt"));
        //根据目的地创建字符缓冲输出流对象
        BufferedWriter bw = new BufferedWriter(new FileWriter("Cat.txt"));
        //读写数据, 复制文件, 用字符缓冲流特有功能实现
        String line;
        while ((line=br.readLine())!=null){
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
        //释放资源
        br.close();
        bw.close();
    }
}
posted @ 2023-03-15 11:18  大宝贝94106  阅读(28)  评论(0)    收藏  举报