• 31.Java中的字符流【20220806】


    字符流--每一次读写一个字符,一个字符等于2个字节,16位2进制数据,只能读写文本类型的文件。

    字符流相关的操作类

    字符输出流---Writer类---抽象类---不能new---子类

    FileWriter类

    FileWriter类的构造方法
    FileWriter(File file) 给一个File对象构造一个FileWriter对象。 
    FileWriter(File file, boolean append) 给一个File对象构造一个是否允许追加FileWriter对象。 
    FileWriter(String fileName) 给一个String对象构造一个FileWriter对象。
    FileWriter(String fileName, boolean append)给一个String对象构造一个是否允许追加FileWriter对象。

    1. package com.wangxing.test1;
    2. import java.io.File;
    3. import java.io.FileWriter;
    4. import java.io.Writer;
    5. public class TestFileWriter {
    6. public static void main(String[] args)throws Exception {
    7. String filepath="F:"+File.separator+"mytest"+File.separator+"test1.txt";
    8. File file=new File(filepath);
    9. //FileWriter类的构造方法
    10. //FileWriter(File file) 给一个File对象构造一个FileWriter对象。
    11. FileWriter wtiter1=new FileWriter(file);
    12. Writer wtiter11=new FileWriter(file);
    13. //FileWriter(File file, boolean append) 给一个File对象构造一个是否允许追加FileWriter对象。
    14. FileWriter wtiter2=new FileWriter(file,true);
    15. Writer wtiter22=new FileWriter(file,true);
    16. //FileWriter(String fileName) 给一个String对象构造一个FileWriter对象。
    17. FileWriter wtiter3=new FileWriter(filepath);
    18. Writer wtiter33=new FileWriter(filepath);
    19. //FileWriter(String fileName, boolean append)给一个String对象构造一个是否允许追加FileWriter对象。
    20. FileWriter wtiter4=new FileWriter(filepath,true);
    21. Writer wtiter44=new FileWriter(filepath,true);
    22. }
    23. }

    FileWriter类的实例方法
        void    write(char[] cbuf) 写入一个字符数组。 
        void    write(char[] cbuf, int off, int len) 写入字符数组的一部分。 
        void    write(int c) 写一个字符 
        void    write(String str) 写一个字符串 
        void    write(String str, int off, int len) 写一个字符串的一部分。 
        void    close() 关闭流,先刷新。 
        void    flush() 刷新流。

    1. package com.wangxing.test1;
    2. import java.io.File;
    3. import java.io.FileWriter;
    4. import java.io.Writer;
    5. public class TestFileWriter2 {
    6. public static void main(String[] args)throws Exception {
    7. String filepath="F:"+File.separator+"mytest"+File.separator+"test1.txt";
    8. File file=new File(filepath);
    9. //FileWriter类的实例方法
    10. //void write(char[] cbuf) 写入一个字符数组。
    11. /*
    12. String info1="hello.world";
    13. FileWriter out1=new FileWriter(file);
    14. out1.write(info1.toCharArray());
    15. out1.flush();
    16. out1.close();
    17. */
    18. //void write(char[] cbuf, int off, int len) 写入字符数组的一部分。
    19. /*
    20. String info1="hello.world";
    21. FileWriter out1=new FileWriter(file);
    22. char chararray[]=info1.toCharArray();
    23. out1.write(chararray,6,5);
    24. out1.flush();
    25. out1.close();
    26. */
    27. //void write(int c) 写一个字符
    28. /*
    29. FileWriter out1=new FileWriter(file);
    30. out1.write(100);
    31. out1.flush();
    32. out1.close();
    33. */
    34. /*
    35. String info1="hello.world";
    36. FileWriter out1=new FileWriter(file);
    37. char chararray[]=info1.toCharArray();
    38. for(int i=0;i
    39. out1.write(chararray[i]);
    40. }
    41. out1.flush();
    42. out1.close();
    43. */
    44. //void write(String str) 写一个字符串
    45. /*
    46. String info1="hello.nihao";
    47. FileWriter out1=new FileWriter(file);
    48. out1.write(info1);
    49. out1.flush();
    50. out1.close();
    51. */
    52. //void write(String str, int off, int len) 写一个字符串的一部分。
    53. String info1="hello.nihao";
    54. FileWriter out1=new FileWriter(file);
    55. out1.write(info1,0,5);
    56. out1.flush();
    57. out1.close();
    58. //void flush() 刷新流。
    59. //void close() 关闭流,先刷新。
    60. }
    61. }

    字符输入流---Reader类---抽象类---不能new---子类

    FileReader类

    FileReader类的构造方法
    FileReader(File file) 给一个File对象构造一个FileReader对象。 
    FileReader(String fileName) 给一个String对象构造一个FileReader对象。

    1. package com.wangxing.test1;
    2. import java.io.File;
    3. import java.io.FileReader;
    4. import java.io.Reader;
    5. public class TestFileReader {
    6. public static void main(String[] args)throws Exception {
    7. String filepath="F:"+File.separator+"mytest"+File.separator+"test1.txt";
    8. File file = new File(filepath);
    9. //FileReader类的构造方法
    10. //FileReader(File file) 给一个File对象构造一个FileReader对象。
    11. FileReader in1=new FileReader(file);
    12. Reader in11=new FileReader(file);
    13. //FileReader(String fileName) 给一个String对象构造一个FileReader对象。
    14. FileReader in2=new FileReader(filepath);
    15. Reader in22=new FileReader(filepath);
    16. }
    17. }

    FileReader类的实例方法
    int    read() 读一个字符。返回值是读取的真实字符数据的整数值,如果已经达到流的末尾,则为-1
    int    read(char[] cbuf) 将字符读入数组。返回总字符数,如果到达文件末尾返回-1
    void    close() 关闭流并释放与之相关联的任何系统资源。 

    1. package com.wangxing.test1;
    2. import java.io.File;
    3. import java.io.FileReader;
    4. import java.io.Reader;
    5. public class TestFileReader2 {
    6. public static void main(String[] args)throws Exception {
    7. String filepath="F:"+File.separator+"mytest"+File.separator+"test1.txt";
    8. File file = new File(filepath);
    9. //FileReader类的实例方法
    10. //int read(char[] cbuf) 将字符读入数组。返回总字符数,如果到达文件末尾返回-1
    11. /*
    12. FileReader in=new FileReader(file);
    13. char chararray[]=new char[(int)file.length()];
    14. int len=in.read(chararray);
    15. String info=new String(chararray,0,len);
    16. in.close();
    17. System.out.println("info=="+info);
    18. */
    19. //int read() 读一个字符。返回值是读取的真实字符数据的整数值,如果已经达到流的末尾,则为-1
    20. /*
    21. FileReader in=new FileReader(file);
    22. int temp=in.read();
    23. in.close();
    24. System.out.println(temp);
    25. */
    26. FileReader in=new FileReader(file);
    27. char chararray[]=new char[(int)file.length()];//保存数据的字符数组
    28. int temp=0; //读取来的每一个字符
    29. int index=0;//数组下标
    30. while((temp=in.read())!=-1){
    31. chararray[index]=(char)temp;
    32. index++;
    33. }
    34. String info=new String(chararray,0,index);
    35. in.close();
    36. System.out.println("info=="+info);
    37. //void close() 关闭流并释放与之相关联的任何系统资源。
    38. }
    39. }

    BufferedWriter类

    BufferedWriter类的构造方法
    BufferedWriter(Writer  out)通过字符输出流的对象创建BufferedWriter

    1. package com.wangxing.test2;
    2. import java.io.BufferedWriter;
    3. import java.io.File;
    4. import java.io.FileWriter;
    5. import java.io.Writer;
    6. public class TestBufferedWriter {
    7. public static void main(String[] args)throws Exception {
    8. String filepath="F:"+File.separator+"mytest"+File.separator+"test2.txt";
    9. File file=new File(filepath);
    10. //BufferedWriter类的构造方法
    11. //BufferedWriter(Writer out)通过字符输出流的对象创建BufferedWriter
    12. Writer out=new FileWriter(file);
    13. BufferedWriter bufferedout=new BufferedWriter(out);
    14. }
    15. }

    BufferedWriter类的实例方法
        void    newLine() 写一行行分隔符。 
        void    write(char[] cbuf) 写入字符数组。 
        void    write(int c) 写一个字符 
        void    write(String s) 写一个字符串。 
        void    close() 关闭流,先刷新。 
        void    flush() 刷新流。

    1. package com.wangxing.test2;
    2. import java.io.BufferedWriter;
    3. import java.io.File;
    4. import java.io.FileWriter;
    5. import java.io.Writer;
    6. public class TestBufferedWriter2 {
    7. public static void main(String[] args)throws Exception {
    8. String filepath="F:"+File.separator+"mytest"+File.separator+"test2.txt";
    9. File file=new File(filepath);
    10. //BufferedWriter类的实例方法
    11. //void write(char[] cbuf) 写入字符数组。
    12. /*
    13. String info="nihao,zhangsan";
    14. Writer out=new FileWriter(file);
    15. BufferedWriter bufferedout=new BufferedWriter(out);
    16. bufferedout.write(info.toCharArray());
    17. bufferedout.close();
    18. out.close();
    19. */
    20. //void write(int c) 写一个字符
    21. /*
    22. String info="nihao,lisi";
    23. Writer out=new FileWriter(file);
    24. BufferedWriter bufferedout=new BufferedWriter(out);
    25. char chararray[]=info.toCharArray();
    26. for(char value:chararray){
    27. bufferedout.write(value);
    28. }
    29. bufferedout.close();
    30. out.close();
    31. */
    32. //void write(String s) 写一个字符串。
    33. /*
    34. String info="nihao,wangwu";
    35. Writer out=new FileWriter(file);
    36. BufferedWriter bufferedout=new BufferedWriter(out);
    37. bufferedout.write(info);
    38. bufferedout.close();
    39. out.close();
    40. */
    41. //void newLine()写出行分隔符。
    42. String info1="hello,lisi";
    43. String info2="nihao,wangwu";
    44. Writer out=new FileWriter(file);
    45. BufferedWriter bufferedout=new BufferedWriter(out);
    46. bufferedout.write(info1);
    47. bufferedout.newLine();
    48. bufferedout.write(info2);
    49. bufferedout.close();
    50. out.close();
    51. //void close() 关闭流,先刷新。
    52. //void flush() 刷新流。
    53. }
    54. }

    BufferedReader类

    BufferedReader类构造方法
        BufferedReader(Reader in)通过字符输入流对象创建一个BufferedReader

    1. package com.wangxing.test2;
    2. import java.io.BufferedReader;
    3. import java.io.File;
    4. import java.io.FileReader;
    5. import java.io.Reader;
    6. public class TestBufferedReader {
    7. public static void main(String[] args)throws Exception{
    8. String filepath="F:"+File.separator+"mytest"+File.separator+"test2.txt";
    9. File file=new File(filepath);
    10. //BufferedReader类构造方法
    11. //BufferedReader(Reader in)通过字符输入流对象创建一个BufferedReader
    12. Reader in=new FileReader(file);
    13. BufferedReader bufferedin=new BufferedReader(in);
    14. }
    15. }

    BufferedReader类实例方法
    int read() 读一个字符。返回值是读取的真实字符数据的整数值,如果已经达到流的末尾则为-1。
    int int read(char[] cbuf) 将字符读入数组。返回总字符数,如果到达文件末尾返回-1
    void    close() 关闭流并释放与之相关联的任何系统资源。 
    String    readLine() 读一行文字。

    1. package com.wangxing.test2;
    2. import java.io.BufferedReader;
    3. import java.io.File;
    4. import java.io.FileReader;
    5. import java.io.Reader;
    6. public class TestBufferedReader2 {
    7. public static void main(String[] args)throws Exception{
    8. String filepath="F:"+File.separator+"mytest"+File.separator+"test2.txt";
    9. File file=new File(filepath);
    10. //BufferedReader类实例方法
    11. //int read() 读一个字符。返回值是读取的真实字符数据的整数值,如果已经达到流的末尾,则为-1。
    12. /*
    13. Reader in=new FileReader(file);
    14. BufferedReader bufferedin=new BufferedReader(in);
    15. char chararray[]=new char[(int)file.length()];
    16. int temp=0;
    17. int index=0;
    18. while((temp=bufferedin.read())!=-1){
    19. chararray[index]=(char)temp;
    20. index++;
    21. }
    22. bufferedin.close();
    23. in.close();
    24. String info=new String(chararray,0,index);
    25. System.out.println(info);
    26. */
    27. //int int read(char[] cbuf) 将字符读入数组。返回总字符数,如果到达文件末尾返回-1
    28. /*
    29. Reader in=new FileReader(file);
    30. BufferedReader bufferedin=new BufferedReader(in);
    31. char chararray[]=new char[(int)file.length()];
    32. int len=bufferedin.read(chararray);
    33. bufferedin.close();
    34. in.close();
    35. String info=new String(chararray,0,len);
    36. System.out.println(info);
    37. */
    38. //String readLine() 读一行文字。
    39. /*
    40. Reader in=new FileReader(file);
    41. BufferedReader bufferedin=new BufferedReader(in);
    42. String info1=bufferedin.readLine();
    43. bufferedin.close();
    44. in.close();
    45. System.out.println(info1);
    46. */
    47. Reader in=new FileReader(file);
    48. BufferedReader bufferedin=new BufferedReader(in);
    49. String tempinfo=null;
    50. while((tempinfo=bufferedin.readLine())!=null){
    51. System.out.println(tempinfo);
    52. }
    53. bufferedin.close();
    54. in.close();
    55. //void close() 关闭流并释放与之相关联的任何系统资源。
    56. }
    57. }

    OutputStreamWriter类 

    OutputStreamWriter类构造方法
    OutputStreamWriter(OutputStream out)将字节输出流转换成字符输出流

    1. package com.wangxing.test3;
    2. import java.io.File;
    3. import java.io.FileOutputStream;
    4. import java.io.OutputStream;
    5. import java.io.OutputStreamWriter;
    6. public class TestOutputStreamWriter {
    7. public static void main(String[] args)throws Exception {
    8. String filepath="F:"+File.separator+"mytest"+File.separator+"test3.txt";
    9. File file=new File(filepath);
    10. //OutputStreamWriter类构造方法
    11. //OutputStreamWriter(OutputStream out)将字节输出流转换成字符输出流
    12. OutputStream out=new FileOutputStream(file);
    13. OutputStreamWriter outwriter=new OutputStreamWriter(out);
    14. }
    15. }

    OutputStreamWriter类实例方法
        void    write(char[] cbuf) 写入一个字符数组。 
        void    write(char[] cbuf, int off, int len) 写入字符数组的一部分。 
        void    write(int c) 写一个字符 
        void    write(String str) 写一个字符串 
        void    write(String str, int off, int len) 写一个字符串的一部分。 
        void    close() 关闭流,先刷新。 
        void    flush() 刷新流。 

    1. package com.wangxing.test3;
    2. import java.io.File;
    3. import java.io.FileOutputStream;
    4. import java.io.OutputStream;
    5. import java.io.OutputStreamWriter;
    6. public class TestOutputStreamWriter2 {
    7. public static void main(String[] args)throws Exception {
    8. String filepath="F:"+File.separator+"mytest"+File.separator+"test3.txt";
    9. File file=new File(filepath);
    10. //字节流写出数据,需要将字符串转换成字节数组
    11. /*
    12. String info="test.hello";
    13. OutputStream out=new FileOutputStream(file);
    14. out.write(info.getBytes());
    15. out.close();
    16. */
    17. String info="zhangsan.hello";
    18. OutputStream out=new FileOutputStream(file);
    19. OutputStreamWriter outputstreamwriter=new OutputStreamWriter(out);
    20. outputstreamwriter.write(info);
    21. outputstreamwriter.close();
    22. out.close();
    23. }
    24. }

    InputStreamReader类【字节输入流转成字符输入流】

    InputStreamReader类构造方法
    InputStreamReader(InputStream in)字节输入流转成字符输入流    

    1. package com.wangxing.test3;
    2. import java.io.File;
    3. import java.io.FileInputStream;
    4. import java.io.InputStream;
    5. import java.io.InputStreamReader;
    6. public class TestInputStreamReader {
    7. public static void main(String[] args) throws Exception{
    8. String filepath="F:"+File.separator+"mytest"+File.separator+"test3.txt";
    9. File file=new File(filepath);
    10. //InputStreamReader类构造方法
    11. //InputStreamReader(InputStream in)字节输入流转成字符输入流
    12. InputStream in=new FileInputStream(file);
    13. InputStreamReader inputstreamReader=new InputStreamReader(in);
    14. }
    15. }

    InputStreamReader类实例方法
    int  read()读一个字符。返回值是读取的真实字符数据的整数值,如果已经达到流的末尾,则为-1
    int    read(char[] cbuf) 将字符读入数组。返回总字符数,如果到达文件末尾返回-1
    void    close() 关闭流并释放与之相关联的任何系统资源。

    1. package com.wangxing.test3;
    2. import java.io.BufferedReader;
    3. import java.io.File;
    4. import java.io.FileInputStream;
    5. import java.io.InputStream;
    6. import java.io.InputStreamReader;
    7. public class TestInputStreamReader2 {
    8. public static void main(String[] args) throws Exception{
    9. String filepath="F:"+File.separator+"mytest"+File.separator+"test3.txt";
    10. File file=new File(filepath);
    11. /*
    12. InputStream in=new FileInputStream(file);
    13. byte bytearray[]=new byte[(int)file.length()];
    14. int len=in.read(bytearray);
    15. in.close();
    16. String info=new String(bytearray,0,len);
    17. System.out.println(info);
    18. */
    19. InputStream in=new FileInputStream(file); //字节流
    20. InputStreamReader reader1=new InputStreamReader(in);//字符流
    21. BufferedReader buff=new BufferedReader(reader1);
    22. String info=buff.readLine();
    23. buff.close();
    24. reader1.close();
    25. in.close();
    26. System.out.println(info);
    27. }
    28. }

    通过BufferedReader读取键盘输入的数据

    Scanner的nextLine()方法为什么可以读取键盘输入????
    因为Scanner对象在创建的时候使用了System.in,System.in默认就是键盘输入。
    只要在创建BufferedReader对象的时候,使用System.in就可以完成键盘输入。
    BufferedReader(Reader in)参数是Reader字符输入流
    System.in----InputStream类型字节输入流
    解决问题的关键就是将InputStream类型字节输入流转换成Reader字符输入流。

    1. package com.wangxing.test3;
    2. import java.io.BufferedReader;
    3. import java.io.File;
    4. import java.io.FileInputStream;
    5. import java.io.InputStream;
    6. import java.io.InputStreamReader;
    7. public class TestInputStreamReader2 {
    8. public static void main(String[] args) throws Exception{
    9. //使用BufferedReader类替换Scanner类的读取键盘输入的操作
    10. //Scanner类的键盘输入使用的是System.in
    11. //System.in这个变量是InputStream类型是字节流
    12. //如果要用BufferedReader类替换Scanner类,
    13. //那么就需要将System.in这个变量表示的字节流,转换成字符流?
    14. //InputStreamReader可以完成这个操作,InputStreamReader类专门用来将字节流转换成字符流
    15. InputStreamReader inputStreamReader=new InputStreamReader(System.in);
    16. BufferedReader bufferedreader=new BufferedReader(inputStreamReader);
    17. System.out.println("请输入姓名:");
    18. String name=bufferedreader.readLine();
    19. System.out.println("姓名是=="+name);
    20. bufferedreader.close();
    21. inputStreamReader.close();
    22. }
    23. }

    总结一下: 

  • 相关阅读:
    【漏洞复现】Apache_HTTP_2.4.50_路径穿越漏洞(CVE-2021-42013)
    Linux Shell编程--变量
    代码随想录算法训练营第六十天| 739. 每日温度 496.下一个更大元素 I
    【51】分布式计算:如果所有人的大脑都联网会怎样?
    基于springboot接口的编写
    ROS 消息订阅 服务器客户端客户端 通信方式
    外包干了6天,技术明显退步。。。
    OpenFeign使用案例
    【猫鼠游戏】一个半径为 1 的圆形水池圆心有一只老鼠,池边有一只猫。
    安卓——图片加载工具(Glide封装版)
  • 原文地址:https://blog.csdn.net/guizhaiteng/article/details/126191560