java--字符流(三)

举报
brucexiaogui 发表于 2021/12/30 01:24:32 2021/12/30
【摘要】 java--字符流(三) 一、字符流   Java中的字符是Unicode编码,是双字节的,1个字符 等于 2个字节;使用字节来处理字符文本就不太方便了,此时可以考虑使用字符流;字符流主要是操作char的类型数据: 字符输出流:Writer 字符输入流:Reader 二、字符流-Reader &nbsp...

java--字符流(三)

一、字符流

 

  • Java中的字符是Unicode编码,是双字节的,1个字符 等于 2个字节;
  • 使用字节来处理字符文本就不太方便了,此时可以考虑使用字符流;
  • 字符流主要是操作char的类型数据:

字符输出流:Writer

字符输入流:Reader

二、字符流-Reader

 

  • abstract void close() throws IOException:关闭流
  • int read() throws IOException:从输入流中读取单个字符。
  • int read(char[] cbuf) throws IOException:从输入流中读取最多c.length个字节的数据,并将其存储在字符数组c中,返回实际读取的字节。

 

  1. 直到read(char[] c)方法返回-1表示输入流的结束。
  2. char[] cBuff = new char[1024];//动态声明数组,长度
  3. read(cBuff ) !=-1   read(cBuff )  >0 

 

  • 以其子类FileReader来实例化Reader对象

FileReader(File/String file) throws FileNotFoundException 创建一个向指定对象的文件输入流

三、字符流-Writer

 

  • abstract void flush() throws IOException:清空缓存
  • abstract void close() throws IOException:关闭流
  • void write(char[] cbuf):将字符数组中的数据输入到输出流中。
  • void write(char[] cbuf,int off,int len):将字符数组从off位置开始,长度为len的字节输入到输出流中。
  • void  write(String str):将str字符串所有字符输出到指定的输出流中。
  • void write(String str,int off, int len):将str字符串里从off位置开始,长度为len的字符输出到指定的输出流中。
  • 以其子类FileWriter来实例化Writer对象

 

FileWriter(File/String file, boolean append) throws FileNotFoundException 创建一个向指定对象的文件输出流,append表示是否追加。默认是false

四、字符流实例


  
  1. package io;
  2. import java.io.File;
  3. import java.io.FileReader;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. import java.io.Reader;
  7. import java.io.Writer;
  8. /*
  9. * 1.找源或目标
  10. * 2.创建管道并和源或目标连接上
  11. * 3.IO操作
  12. * 4.关闭资源
  13. */
  14. /**
  15. * 操作字符和字节流:仅仅是管道类型不一样和操作的单位不一样
  16. *
  17. * @author will
  18. *
  19. */
  20. public class CharDemo {
  21. /**
  22. * 使用字符输入流取读取数据
  23. *
  24. * @param srcF
  25. */
  26. public static void read(File srcFile) {
  27. Reader reader = null;
  28. try {
  29. reader = new FileReader(srcFile);
  30. // IO操作
  31. char[] buff = new char[1024];// 创建一个大小为1024个字符的缓冲区
  32. int len = 0;// 表示读取的字符长度
  33. while ((len = reader.read(buff)) != -1) {
  34. // 数据依然在缓冲区里
  35. String data = new String(buff, 0, len);
  36. System.out.println(data);
  37. }
  38. } catch (IOException e) {
  39. e.printStackTrace();
  40. } finally {
  41. if (reader != null) {
  42. try {
  43. reader.close();
  44. } catch (IOException e) {
  45. e.printStackTrace();
  46. }
  47. }
  48. }
  49. }
  50. public static void write(File destFile) throws IOException {
  51. Writer w = new FileWriter(destFile);
  52. w.write("爱老虎油".toCharArray());
  53. w.write("哈哈哈哈哈哈哈哈,嘻嘻嘻,呵呵呵");
  54. w.write("\n");
  55. w.write("青羊区的天是艳阳的天,");
  56. w.write("\n");
  57. w.write("成都市的人民好喜欢,");
  58. w.write("\n");
  59. w.write("站在高楼大声喊:");
  60. w.write("\n");
  61. w.write("我爱你,四川!");
  62. w.write("\n");
  63. // w.flush();
  64. w.close();
  65. }
  66. public static void main(String[] args) throws IOException {
  67. // File srcFile = new File("src/io/CharDemo.java");
  68. // read(srcFile);
  69. // write(new File("SpringBrother.java"));
  70. //copy("src/io/CharDemo.java","src/io/CharDemo2.java");
  71. copy("ps.jpg","钓丝.jpg");
  72. }
  73. public static void copy(String src, String dest) {
  74. try (
  75. // 打开资源
  76. Reader r = new FileReader(src);
  77. Writer w = new FileWriter(dest);)
  78. {
  79. char[] buff = new char[1024];
  80. int len = 0;
  81. while ((len = r.read(buff)) != -1) {
  82. w.write(buff, 0, len);
  83. }
  84. } catch (IOException e) {
  85. e.printStackTrace();
  86. }
  87. }
  88. }

 

五、文件copy实例

 


  
  1. package io;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.OutputStream;
  9. public class CopyDemo {
  10. public static void main(String[] args) {
  11. if(args.length != 2){
  12. System.out.println("参数传递错误!");
  13. System.exit(1);
  14. }
  15. File srcFile = new File(args[0]);
  16. File targetFile = new File(args[1]);
  17. copy(srcFile, targetFile);
  18. System.out.println("OK");
  19. }
  20. /**
  21. * 拷贝文件
  22. *
  23. * @param srcFile
  24. * 源文件
  25. * @param targetFile
  26. * 目标文件
  27. * @throws IOException
  28. */
  29. public static void copy(File srcFile, File targetFile) {
  30. /**
  31. * 1.找到源和目标,已经有了 2.创建管道,需要2个管道 3.IO操作 4.关闭资源
  32. */
  33. if(srcFile == null || targetFile == null){
  34. System.out.println("文件为null");
  35. return ;
  36. }
  37. InputStream in = null;
  38. OutputStream out = null;
  39. try {
  40. in = new FileInputStream(srcFile);
  41. out = new FileOutputStream(targetFile);
  42. // 表示1024个字节大小的缓冲区
  43. byte[] buff = new byte[1024];
  44. // 表示已经读取的字节数,若 len != -1表示文件读完了
  45. int len = 0;
  46. while ((len = in.read(buff)) != -1) {// 把源文件的数据读取到缓冲区
  47. // 取缓冲区取数据,取了数据之后,马上把取到的数据写到一个新的文件里去
  48. out.write(buff, 0, len);// 读多少,同时就往外写多少
  49. }
  50. } catch (FileNotFoundException e) {
  51. e.printStackTrace();
  52. // throw new IOException(srcFile.getAbsolutePath() +"找不到");
  53. } catch (IOException e) {
  54. e.printStackTrace();
  55. } finally {
  56. try {
  57. if (out != null) {
  58. out.close();
  59. }
  60. } catch (IOException e) {
  61. e.printStackTrace();
  62. }
  63. // 无聊out是否关闭,都应该关闭in
  64. finally {
  65. if (in != null) {
  66. try {
  67. in.close();
  68. } catch (IOException e) {
  69. e.printStackTrace();
  70. }
  71. }
  72. }
  73. }
  74. }
  75. }

 

文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。

原文链接:brucelong.blog.csdn.net/article/details/80051196

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。