IO流.txt 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. IO流
  2. I input 输入
  3. O Output 输出
  4. 流:Stream是一种抽象的概念,是对数据传输的总称,
  5. 也就是说数据在设备直接进行传输就称为流。流的本质是数据传输。
  6. IO流就是用来处理设备之间的传输问题的,比较常见的应用:文件上传、文件下载、文件复制
  7. 基础流:
  8. IO流的分类:
  9. 按照流向分类
  10. 输入流:读数据
  11. 输出流:写数据
  12. 按照流的数据类型分类:
  13. 字节流
  14. 字节输入流
  15. 字节输出流
  16. 字符流
  17. 字符输入流
  18. 字符输出流
  19. IO流的使用场景
  20. 如果操作的是纯文本文件,优先使用字符流
  21. 如果操作的是图片、视频、音频、有格式文本等等二进制文件,那么一定要使用字节流。
  22. 如果操作的文件类型不确定,优先使用字节流。
  23. 字节流:
  24. 字节流基类(父类):
  25. InputStream 这个抽象类是所有字节输入流类的父类
  26. OutputStream 这个抽象类是所有字节输出流类的父类
  27. 文件字节输入流:FileInputStream 是InputStream的子类,专门用来做文件的输入操作
  28. 它操作文件数据的方法:read()
  29. 文件字节输出流:FileOutputStream 是OutputStream的子类,专门用来做文件的输出操作
  30. 它操作文件数据的方法:write()
  31. write(int b) 写入一个字节
  32. write(byte[] bytes) 写入一个字节数组
  33. write(byte[] bytes,int off,int len) 写入一个字节数组,从off开始写入len长度个字节。
  34. //Windows系统换行 \r\n
  35. 案例:
  36. 结合23种设计模式中的模板模式,实现如下操作:
  37. 调用该方法并传入参数后,会在D盘中创建《title》.txt文件,并在文件中自动写出文章。
  38. public static boolean AutoWriting(String title){
  39. return true;
  40. }
  41. -[模板设计模式]
  42. 把抽象类整体看成一种模板,模板种不能决定的东西都定义为抽象方法。
  43. 让使用模板的类(继承抽象类的类),去重写抽象方法,自己实现需求。
  44. 模板设计模式的优势:
  45. 模板已经定义了通用的结构,使用的人只需要关心自己要实现的功能就可以了。
  46. abstract class 作文模板类{
  47. public void write(){
  48. System.out.println("《我的爸爸》");
  49. body();
  50. System.out.println("啊~这就是我的爸爸!");
  51. }
  52. public abstract void body();
  53. }
  54. 处理流:
  55. 基于基础流进行的强化,比如缓冲流。因为是对基础流的强化,所以创建处理流的时候,构造方法的参数是基础流对象
  56. 字节缓冲流
  57. |-字节缓存输入流 BufferedInputStream
  58. new BufferedInputStream(new FileInputStream());
  59. |-字节缓存输出流 BufferedOutPutStream
  60. 字符缓冲流
  61. 字符流:
  62. 字符流=字节流+字符编码表
  63. 字符编码表--字符集
  64. 字符集是一个系统支持的所有字符的集合,包括各个国家的文字、标点符号、图形符号、数字等等
  65. 计算机想要准确的存储和识别各种字符集符号,就需要进行字符编码,一套字符集必须要有一套编码表。
  66. 常见的字符集:ASCII字符集,GB-XXXX字符集 Unicode字符集
  67. 把字符串转换为字节的方法:
  68. byte[] getBytes(); 使用平台默认的字符集把String类型字符串转换为一系列字节。
  69. byte[] getBytes(String charsetName); 使用指定的字符集把String类型字符串转换为一系列字节。
  70. new String(byte[] bytes); 使用平台默认的字符集把一系列字节转换为String类型字符串
  71. new String(byte[] bytes,charsetName);使用指定的字符集把一系列字节转换为String类型字符串
  72. 字符流:
  73. 输入字符流-抽象类 Reader
  74. |-文件输入字符流 FileReader
  75. |-构造方法:
  76. |- new FileReader(File file)
  77. |- new FileReader(String fileName)
  78. |-成员方法:
  79. |- int read() 一次读取一个字符数据
  80. |- int read(char[] cbuf) 一次读取一个字符数组数据
  81. 输出字符流-抽象类 Writer
  82. |-文件输出字符流 FileWriter
  83. |-构造方法:
  84. |- new FileWriter(File file)
  85. |- new FileWriter(File file,boolean append)
  86. |- new FileWriter(String pathName)
  87. |- new FileWriter(String pathName,boolean append)
  88. |-普通方法:
  89. |- void write(int c) 写一个字符
  90. |- void write(char[] cbuf) 写一个字符数组
  91. |- void write(String str) 写一个字符串
  92. |- void write(String str,int off,int len) 写一个字符串的一部分
  93. |- flush() 刷新流,刷新后还可以继续写数据。
  94. |- close() 关闭流
  95. 案例需求: 用户注册
  96. - 编写方法代码,实现用户的用户名和密码保存到本地实现永久化存储
  97. public static boolean registerUser(String username,String password){
  98. return false;
  99. }
  100. - 实现步骤
  101. - 获取用户输入的用户名和密码
  102. - 将用户输入的用户名和密码写入到本地文件中
  103. - 关流,释放资源
  104. 处理流:
  105. 基于基础流进行的强化,比如缓冲流。因为是对基础流的强化,所以创建处理流的时候,构造方法的参数是基础流对象
  106. 字符缓冲流
  107. |- 字符缓冲输入流
  108. BufferedReader
  109. |-特有方法:String readLine() 读取一行文字,结果包含行的内容的字符串,不包含任何终止字符,如果已经到达流的结尾,则为null。
  110. |- 字符缓冲输出流
  111. BufferedWriter
  112. |-特有方法:void newLine() 写一行行分隔符,行分隔符字符串有系统属性定义。