• java----IO流:字符流


    字节和字符的桥梁
    1. package IO流.字符流;
    2. /*
    3. InputStreamReader是从字节流到字符流的桥梁:
    4. 它读取字节,并使用指定的charset将其解码为字符。
    5. 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。
    6. OutputStreamWriter是从字符流到字节流的桥梁:
    7. 使用指定的charset将写入的字符编码为字节。
    8. 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。
    9. */
    10. import java.io.*;
    11. public class 字节和字符的桥梁 {
    12. public static void main(String[] args) throws IOException {
    13. //OutputStreamWriter​(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。
    14. //OutputStreamWriter​(OutputStream out, String charsetName) 创建一个使用命名字符集的OutputStreamWriter。
    15. OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("idea_text\\osw.txt"));
    16. osw.write("中国");
    17. osw.close();
    18. //InputStreamReader​(InputStream in) 创建一个使用默认字符集的InputStreamReader。
    19. //InputStreamReader​(InputStream in, String charsetName) 创建一个使用命名字符集的InputStreamReader。
    20. InputStreamReader isr = new InputStreamReader(new FileInputStream("idea_text\\osw.txt"));
    21. //一次读取一个字符数据
    22. int ch;
    23. while ((ch = isr.read()) != -1) {
    24. System.out.println((char)ch);
    25. }
    26. isr.close();
    27. }
    28. }
    字符串中的编码解码问题
    1. package IO流.字符流;
    2. /*
    3. 字符串中的编码解码问题
    4. 编码:
    5. byte[]getBytes():
    6. 使用平台的默认字符集将该String编码为一系列字节,将结果存储到新的字节数组中
    7. byte[]getBytes(String charsetName):
    8. 使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组中
    9. 解码:
    10. String(byte[]bytes):
    11. 通过使用平台的默认字符集解码指定的字节数组来构造新的String
    12. String(byte[]bytes,String charsetName):
    13. 通过指定的字符集解码指定的字节数组来构造新的String
    14. */
    15. import java.io.UnsupportedEncodingException;
    16. import java.util.Arrays;
    17. public class 字符串中的编码解码问题 {
    18. public static void main(String[] args) throws UnsupportedEncodingException {
    19. //定义一个字符串
    20. String s="中国";
    21. //编码:
    22. //byte[]getBytes():
    23. byte[] bys=s.getBytes();//[-28, -72, -83, -27, -101, -67]
    24. //byte[]getBytes(String charsetName):
    25. byte[] bytes=s.getBytes("UTF-8");//[-28, -72, -83, -27, -101, -67]
    26. byte[] bytess=s.getBytes("GBK");//[-42, -48, -71, -6]
    27. // System.out.println(Arrays.toString(bytess));
    28. //解码:
    29. //String(byte[]bytes):
    30. String ss=new String(bys);//中国
    31. //String(byte[]bytes,String charsetName):
    32. String sss=new String(bys,"UTF-8");//中国
    33. String ssss=new String(bys,"GBK");//涓浗
    34. // System.out.println(ssss);
    35. }
    36. }
    
    字符流写数据的5种方式
    1. package IO流.字符流.字符流写数据的5种方式;
    2. import java.io.FileNotFoundException;
    3. import java.io.FileOutputStream;
    4. import java.io.IOException;
    5. import java.io.OutputStreamWriter;
    6. /*
    7. 构造方法:
    8. OutputStreamWriter​(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。
    9. 写数据的5种方式
    10. void write​(int c) 写一个字符
    11. void write​(char[] cbuf) 写一个字符数组。
    12. void write​(char[] cbuf, int off, int len) 写入字符数组的一部分。
    13. void write​(String str) 写一个字符串。
    14. void write​(String str, int off, int len) 写一个字符串的一部分。
    15. void close​() 关闭流,先刷新。
    16. void flush​() 刷新流。
    17. */
    18. public class Demo {
    19. public static void main(String[] args) throws IOException {
    20. //OutputStreamWriter​(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。
    21. OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("idea_text\\osw.txt"));
    22. /*
    23. //void write​(int c) 写一个字符
    24. osw.write("97");//无显示
    25. //void flush​() 刷新流。
    26. osw.flush();//有显示97
    27. osw.write("98");
    28. osw.flush();
    29. osw.write("99");
    30. //释放资源
    31. osw.close();//直接释放,不用刷新了,99也会显示
    32. // osw.write("100");//IOException: Stream closed
    33. */
    34. //void write​(char[] cbuf) 写一个字符数组。
    35. char[] chs = {'a', 'b', 'c', 'd', 'e'};
    36. // osw.write(chs);
    37. // void write​(char[] cbuf, int off, int len) 写入字符数组的一部分。
    38. // osw.write(chs,0,chs.length);
    39. // osw.write(chs,1,3);
    40. //void write​(String str) 写一个字符串。
    41. osw.write("abcde");
    42. //void write​(String str, int off, int len) 写一个字符串的一部分。
    43. osw.write("abcde",0,"abcde".length());
    44. osw.write("abcde",1,3);
    45. //释放资源
    46. osw.close();
    47. }
    48. }
    字符流读数据的2种方式
    1. package IO流.字符流.字符流读数据的2种方式;
    2. /*
    3. 构造方法
    4. InputStreamReader​(InputStream in) 创建一个使用默认字符集的InputStreamReader。
    5. 2种方式
    6. int read​() 一次读一个字符数据
    7. int read​(char[] cbuf) 一次读一个字符数组数据
    8. */
    9. import java.io.FileInputStream;
    10. import java.io.FileNotFoundException;
    11. import java.io.IOException;
    12. import java.io.InputStreamReader;
    13. public class Demo {
    14. public static void main(String[] args) throws IOException {
    15. //InputStreamReader​(InputStream in) 创建一个使用默认字符集的InputStreamReader。
    16. InputStreamReader isr = new InputStreamReader(new FileInputStream("idea_text\\osw.txt"));
    17. /*
    18. //int read​() :一次读一个字符数据
    19. int ch;
    20. while ((ch = isr.read()) != -1){
    21. System.out.println((char) ch);
    22. }
    23. */
    24. //int read​(char[] cbuf) 一次读一个字符数组数据
    25. char[] chs=new char[1024];
    26. int len;
    27. while ((len = isr.read()) != -1){
    28. System.out.println(new String(chs, 0, len));
    29. }
    30. //释放资源
    31. isr.close();
    32. }
    33. }
    字符缓冲流
    1. package IO流.字符流.字符缓冲流;
    2. /*
    3. 字符缓冲流:
    4. BufferedWriter:
    5. 将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。
    6. 可以指定缓冲区大小,或者可以接受默认大小。 默认值足够大,可用于大多数用途。
    7. BufferedReader:
    8. 从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。
    9. 可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。
    10. 构造方法:
    11. BufferedWriter​(Writer out) 创建使用默认大小的输出缓冲区的缓冲字符输出流。
    12. BufferedReader​(Reader in) 创建使用默认大小的输入缓冲区的缓冲字符输入流。
    13. */
    14. import java.io.*;
    15. public class Demo {
    16. public static void main(String[] args) throws IOException {
    17. /*
    18. //BufferedWriter​(Writer out) 创建使用默认大小的输出缓冲区的缓冲字符输出流。
    19. BufferedWriter bw=new BufferedWriter(new FileWriter("idea_text\\bw.txt"));
    20. bw.write("hello\r\n");
    21. bw.write("world\r\n");
    22. bw.close();
    23. */
    24. //BufferedReader​(Reader in) 创建使用默认大小的输入缓冲区的缓冲字符输入流。
    25. BufferedReader br=new BufferedReader(new FileReader("idea_text\\bw.txt"));
    26. int ch;
    27. while ((ch = br.read()) != -1){
    28. System.out.println((char)ch);
    29. }
    30. char[] chs=new char[1024];
    31. int len;
    32. while ((len = br.read()) != -1){
    33. System.out.println(new String(chs,0,len));
    34. }
    35. //释放资源
    36. // bw.close();
    37. br.close();
    38. }
    39. }
    特有功能
    1. package IO流.字符流.字符缓冲流;
    2. /*
    3. BufferedWriter:
    4. void newLine(): 写一行行分隔符,行分隔符字符串由系统属性定义
    5. BufferedReader:
    6. void String readLine(): 读一行文字,结果包含行的内容的字符串,不包括任何行终止字符
    7. 如果过流的结尾已经到达,则为null
    8. */
    9. import java.io.*;
    10. public class 特有功能 {
    11. public static void main(String[] args) throws IOException {
    12. //创建字符缓冲流
    13. /*
    14. BufferedWriter bw=new BufferedWriter(new FileWriter("idea_text\\bw.txt"));
    15. //写数据
    16. for (int i=0; i<10;i++){
    17. bw.write("hello"+i);
    18. bw.newLine();
    19. bw.flush();
    20. }
    21. */
    22. BufferedReader br = new BufferedReader(new FileReader("idea_text\\\\bw.txt"));
    23. //读数据
    24. String line;
    25. while ((line = br.readLine()) != null){
    26. System.out.println(line);
    27. }
    28. br.close();
    29. }
    30. }
    复制java文件改进版
    1. package IO流.字符流;
    2. /*
    3. 需求:
    4. 把模块目录下的“ConversionStreamDemo.java”复制到模块目录下的“Copyjava
    5. 分析:
    6. 1,转换流的名字比较长,而我们常见的操作都是按照本地默认编码实现的,所以,为了简化书写,转换流提供了对应的子类
    7. 2,FileReader:用于读取字符文件的便捷类
    8. FileReader(String fileName)
    9. 3,FileWriter:用于写入字符文件的便捷类
    10. FileWriter(String fileName)
    11. 4,数据源和目的地的分析
    12. 数据源:
    13. myCharStream\\ConversionStreamDemo.java---读数据---Reader---InputStreamReader---FileReader
    14. 目的地:
    15. myCharStream\\Copy.java---写数据---Writer---OutputStreamWriter-FileWriter
    16. 思路
    17. 1,根据数据源创建字符输入流对象
    18. 2,根据目的地创建字符输出流对象
    19. 3,读写数据,复制文件
    20. 4,释放资源
    21. */
    22. import java.io.FileNotFoundException;
    23. import java.io.FileReader;
    24. import java.io.FileWriter;
    25. import java.io.IOException;
    26. public class 复制java文件改进版 {
    27. public static void main(String[] args) throws IOException {
    28. //根据数据源创建字符输入流对象
    29. FileReader fr=new FileReader("myCharStream\\\\ConversionStreamDemo.java");
    30. //根据目的地创建字符输出流对象
    31. FileWriter fw=new FileWriter("myCharStream\\\\Copy.java");
    32. //读写数据,复制文件
    33. int ch;
    34. while ((ch = fr.read())!=-1){
    35. fw.write(ch);
    36. }
    37. char[] chs=new char[1024];
    38. int len;
    39. while ((len = fr.read(chs))!=-1){
    40. fw.write(chs,0,len);
    41. }
    42. //释放资源
    43. fr.close();
    44. fw.close();
    45. }
    46. }
    复制java文件字符缓冲流改进版
    1. package IO流.字符流;
    2. /*
    3. 需求:
    4. 把模块目录下的“ConversionStreamDemojava”复制到模块目录下的“Copyjava
    5. 思路:
    6. 1,根据数据源创建字符缓冲输入流对象
    7. 2,根据目的地创建字符缓冲输出流对象
    8. 3,读写数据,复制文件
    9. 4,释放资源
    10. */
    11. import java.io.*;
    12. public class 复制java文件字符缓冲流改进版 {
    13. public static void main(String[] args) throws IOException {
    14. //根据数据源创建字符缓冲输入流对象
    15. BufferedReader br = new BufferedReader(new FileReader("myCharStream\\ConversionStreamDemo.java"));
    16. //根据目的地创建字符缓冲输出流对象
    17. BufferedWriter bw = new BufferedWriter(new FileWriter("myCharStream\\Copy.java"));
    18. //读写数据,复制文件
    19. // 一次读写一个字符数据
    20. int ch;
    21. while ((ch = br.read()) != -1) {
    22. bw.write(ch);
    23. }
    24. //一次读写一个字符数组数据
    25. char[] chs = new char[1024];
    26. int len;
    27. while ((len = br.read(chs)) != -1) {
    28. bw.write(chs, 0,len);
    29. }
    30. //释放资源
    31. bw.close();
    32. br.close();
    33. }
    34. }
    复制java文件字符缓冲流特有功能改进版
    1. package IO流.字符流;
    2. /*
    3. 需求:
    4. 把模块目录下的“ConversionStreamDemojava”复制到模块目录下的“Copyjava
    5. 思路:
    6. 1,根据数据源创建字符缓冲输入流对象
    7. 2,根据目的地创建字符缓冲输出流对象
    8. 3,读写数据,复制文件
    9. 使用字符缓冲流特有功能实现
    10. 4,释放资源
    11. */
    12. import java.io.*;
    13. public class 复制java文件字符缓冲流特有功能改进版 {
    14. public static void main(String[] args) throws IOException {
    15. //根据数据源创建字符缓冲输入流对象
    16. BufferedReader br =new BufferedReader(new FileReader("myCharStreamlConversionStreamDemo.java"));
    17. //根据目的地创建字符缓冲输出流对象
    18. BufferedWriter bw=new BufferedWriter(new FileWriter("myCharStreamCopy.java"));
    19. //读写数据,复制文件
    20. //使用字符缓冲流特有功能实现
    21. String line;
    22. while((line=br.readLine())!=null){
    23. bw.write(line);
    24. bw.newLine();
    25. bw.flush();
    26. }
    27. //释放资源
    28. bw.close();
    29. br.close();
    30. }
    31. }
    复制单级文件夹
    1. package IO流.字符流;
    2. import java.io.*;
    3. public class 复制单级文件夹 {
    4. public static void main(String[] args) throws IOException {
    5. //创建数据源目录File对象,路径是D:\\AAA
    6. File srcFolder=new File("D:\\AAA");
    7. //获取数据源目录File对象的名称 AAA
    8. String srcFolderName= srcFolder.getName();
    9. //创建目的地目录File对象,路径名是模块名+AAA组成
    10. File destFolder =new File("idea_text",srcFolderName);
    11. //判断目的地目录对应的File是否存在,如果不存在,就创建
    12. if (!destFolder.exists()){
    13. destFolder.mkdir();
    14. }
    15. //获取数据源目录下的所有文件的File数组
    16. File[] listFiles=srcFolder.listFiles();
    17. //遍历File数组,得到每一个File对象,该File对象,其实就是数据源文件
    18. for (File srcFile:listFiles){
    19. //获取数据源文件对象的名称
    20. String srcFileName = srcFile.getName();
    21. //创建目的地文件File对象
    22. File destFile=new File(destFolder,srcFileName);
    23. //复制文件
    24. copyFile(srcFile,destFile);
    25. }
    26. }
    27. private static void copyFile(File srcFile, File destFile) throws IOException {
    28. BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
    29. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
    30. byte[] bys = new byte[1024];
    31. int len;
    32. while ((len = bis.read(bys)) != -1) {
    33. bos.write(bys, 0, len);
    34. }
    35. bos.close();
    36. bis.close();
    37. }
    38. }
    点名器
    1. package IO流.字符流;
    2. /*
    3. 需求:
    4. 我有一个文件里面存储了班级同学的姓名,每个姓名占一行,通过程序实现随机点名器具
    5. 思路:
    6. 1,创建字符缓冲输入流对象
    7. 2,创建ArrayList集合对象
    8. 3,调用字符缓冲输入流对象的方法读数据
    9. 4,把读取到的字符串数据存储到集合中
    10. 5,释放资源
    11. 6,使用Random产生一个随机数,范围在【0,集合长度)
    12. 7,把第6步产生的随机数作为索引到ArrayList集合中获取值
    13. 8,把第7步得到的数据输出在控制台
    14. */
    15. import java.io.*;
    16. import java.util.ArrayList;
    17. import java.util.Random;
    18. public class 点名器 {
    19. public static void main(String[] args) throws IOException {
    20. //创建字符缓冲输入流对象
    21. BufferedReader br = new BufferedReader(new FileReader("idea_text\\osw.txt"));
    22. //创建ArrayList集合对象
    23. ArrayList<String> array = new ArrayList<String>();
    24. //调用字符缓冲输入流对象的方法读数据
    25. String line;
    26. while ((line = br.readLine()) != null) {
    27. array.add(line);
    28. }
    29. //释放资源
    30. br.close();
    31. //使用Random产生一个随机数,范围在【0,集合长度)
    32. Random r = new Random();
    33. int index = r.nextInt(array.size());
    34. //把第6步产生的随机数作为索引到ArrayList集合中获取值
    35. String name = array.get(index);
    36. //把第7步得到的数据输出在控制台
    37. System.out.println("幸运者是:" + name);
    38. }
    39. }

  • 相关阅读:
    不要在问了!工作六年总结的Java面试题与经验
    核爆,字节跳动算法工程师,手写1000页数据算法笔记:Github已标星79k
    数据库的事务
    Spring底层核心原理解析
    Yolov5 batch 推理
    边缘计算(Edge Computing)
    12 个优化 Docker 镜像安全性的技巧
    【强化学习】深度Q网络(DQN)求解倒立摆问题 + Python代码实战
    【附源码】Python计算机毕业设计天气预报APP
    Ubuntu18.04安装MySQL及Demos
  • 原文地址:https://blog.csdn.net/z2021_000000/article/details/125525412