java基础进阶-05-IO流_字符流

IO流

IO流

字符流

  • InputStreamReader

  • OutputStreamWriter

  • 汉字存储

    • GBK编码
      • 2个字节
    • UTF-8
      • 3个字节
String s = "中国";
byte[] bys = s.getBytes();
byte[] bys = s.getBytes("GBK");
  • 字符流
    • 字节流+编码表
编码表
  • 二进制
    • 所有信息都是二进制存储
  • 编码
    • 按某种规则将字符转换为二进制存储
  • 解码
    • 按某种规则将二进制转换为字符解析
  • 编码表
    • 字符集
      • 一个系统所有字符的集合
      • ASCII/GBXX/Unicode
编码解码
  • 编码

    • getBytes()
    • getBytes(String charsetName)
  • 解码

    • String(byte[] bytes)
    • String(byte[] bytes,String charsetName)
String s = "中国";
byte[] bys1 = s.getBytes();
System.out.println(Arrays.toString(bys1));//[-28,-72,-83,-27,-101,-67]

byte[] bys2 = s.getBytes("UTF-8");
System.out.println(Arrays.toString(bys2));//[-28,-72,-83,-27,-101,-67]

byte[] bys2 = s.getBytes("GBK");
System.out.println(Arrays.toString(bys2));//[-42,-48,-71,-6]
String s = "中国";
byte[] bys1 = s.getBytes("UTF-8");
String ss = new String(bys1,"UTF-8");
System.out.println(ss);
字符流中的编码解码
  • FileOutStream
  • FileInputStream
public class ConversionStramDemo{
    public static void main(String[] args){
        //采用默认编码
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("fos.txt"));
        osw.write("中国");
        osw.close();
    }
}
public class ConversionStramDemo{
    public static void main(String[] args){
        //采用指定编码
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("fos.txt"),"UTF-8");
        osw.write("中国");
        osw.close();
    }
}
public class ConversionStramDemo{
    public static void main(String[] args){
        //采用默认编码
        InputStreamReader isr = new InputStreamReader(new FileInputStream("isr.txt"));
        //一次读一个字符
        int ch;
        while((ch=isr.read())!=-1){
            System.out.println((char)ch);
        }
        isr.close();
    }
}
public class ConversionStramDemo{
    public static void main(String[] args){
        //采用默认编码
        InputStreamReader isr = new InputStreamReader(new FileInputStream("isr.txt"),"UTF-8");
        //一次读一个字符
        int ch;
        while((ch=isr.read())!=-1){
            System.out.println((char)ch);
        }
        isr.close();
    }
}
字符流写数据
  • OutputStreamWriter
    • write(int c)
    • write(char[] cbuf)
    • write(char[] cbuf,int off,int len)
    • write(String str)
    • write(String str,int off,int len)
写入一个字符
OutputStreamWrite osw = new OutputStreamWriter(new FileOutputStream("osw.txt"));
osw.write(97);//a
//有缓冲,需要刷新
osw.flush();

//关闭前也会先刷新
osw.close();
写入一个字符数组
OutputStreamWrite osw = new OutputStreamWriter(new FileOutputStream("osw.txt"));
char[] ch = {'a','b','c','d'};
osw.write(ch);
//关闭前也会先刷新
osw.close();
写入一个字符串
OutputStreamWrite osw = new OutputStreamWriter(new FileOutputStream("osw.txt"));
String s = "abcde";
osw.write(s);
//关闭前也会先刷新
osw.close();
字符流读数据
  • InputStreamReader
    • read()
    • read(char[] cbuf)
一次读一个字符
InputStreamReaderisr = new InputStreamReader(new FileInputStream("isr.txt"));
int ch;
while((ch=isr.read())!=-1){
    System.out.println((char)ch);
}
isr.close();
一次读一个字符数组
InputStreamReaderisr = new InputStreamReader(new FileInputStream("isr.txt"));
char[] chs = new char[1024];
int len;
while((len=isr.read(chs))!=-1){
    System.out.println(new String(chs,0,len));
}
isr.close();
复制java文件
  • 一次读一个字符
InputStreamReader isr = new InputStreamReader(new FileInputStream("xxx.java"));
OutputStreamWrite osw = new OutputStreamWriter(new FileOutputStream("xxx2.java"));

//一次读一个字符
int ch;
while((ch=isr.read())!=-1){
    osw.write(ch);
}

osw.close();
isr.close();
  • 一次读一个字符数组
InputStreamReader isr = new InputStreamReader(new FileInputStream("xxx.java"));
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("xxx2.java"));

//一次读一个字符数组
char[] chs = new char[1024];
int len;
while((len=isr.read(chs))!=-1){
    osw.write(chs,0,len);
}

osw.close();
isr.close();
  • 改进
    • FileReader
    • FileWriter
FileReader fr = new FileReader("xxx.java");
FileWriter fw = new FileWriter("xxx2.java");
int ch;
while((ch=fr.read())!=-1){
    fw.write(ch);
}
fw.close();
fr.close();
FileReader fr = new FileReader("xxx.java");
FileWriter fw = new FileWriter("xxx2.java");
char[] chs = new char[1024];
int len;
while((len=fr.read(chs))!=-1){
    fw.write(ch);
}
fw.close();
fr.close();
字符缓冲流
  • BufferedReader
  • BufferedWriter
字符缓冲输出流
  • BufferedWriter
BufferedWriter bw = new BufferedWriter(new FileWirter("bw.txt"));
bw.write("hello");
bw.close();
字符缓冲输入流
  • BufferedWriter

  • 一次读一个字符

BufferedReader br = new BufferedReader(new FileReader("bw.txt"));
int ch;
while((ch=br.read())!=-1){
    System.oyut.println((char)ch);
}
br.close();
  • 一次读一个字符数组
BufferedReader br = new BufferedReader(new FileReader("bw.txt"));

//一次读一个字符数组
char[] chs = new char[1024];
int len;
while((len=br.read(chs))!=-1){
    System.oyut.println(new String(chs,0,len));
}
br.close();
字符缓冲流复制java文件
//一次读写一个字符数据
public class CopyJavaDemo{
    public static void main(String[] args){
        BufferedReader br = new BufferedReader(new FileReader("br.java"));
        BufferedWriter bw = new BufferedWriter(new FileWirter("bw.java"));
        
        //一次读写一个字符数据
        int ch;
        while((ch=br.read())!=-1){
            bw.write(ch);
        }
        
        bw.close();
        br.close();
    }
    
}
//一次读写一个字符数组
public class CopyJavaDemo{
    public static void main(String[] args){
        BufferedReader br = new BufferedReader(new FileReader("br.java"));
        BufferedWriter bw = new BufferedWriter(new FileWirter("bw.java"));
        
        //一次读写一个字符数组
        char[] chs = new char[1024];
        int len;
        while((len=br.read(chs))!=-1){
            bw.write(ch,0,len);
        }
        
        bw.close();
        br.close();
    }
    
}
特有功能
  • BufferedWriter
    • newLine()
  • BufferedReader
    • readLine()
BufferedWriter bw = new BufferedWriter(new FileWirter("bw.txt"));
bw.wirte("xxxxx");
bw.newLine();
bw.wirte("xxxxx");
bw.close();
BufferedReader br = new BufferedReader(new FileReader("br.txt"));
//读取内容不包含换行
String line = br.readLine();
System.out.println(line);
br.close();
改进java文件的读取
public class CopyJavaDemo{
    public static void main(String[] args){
        BufferedReader br = new BufferedReader(new FileReader("br.java"));
        String line;
        while((line=br.readLine())!=null){
            System.out.println(line);
        }
        
        bw.close();
        br.close();
    }
    
}
改进java文件的复制
public class CopyJavaDemo{
    public static void main(String[] args){
        BufferedReader br = new BufferedReader(new FileReader("br.java"));
        BufferedWriter bw = new BufferedWriter(new FileWirter("bw.java"));
        
        String line;
        while((line=br.readLine())!=null){
            bw.write(line);
            bw.newLine();
        }
        
        bw.close();
        br.close();
    }
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值