1 编码表1.1 思考:1.2 编码表介绍1.3 编码表小结

java中的字符流是什么(JAVA编码表字符流)(1)

java中的字符流是什么(JAVA编码表字符流)(2)

1.4 字节流读中文出现码的原码2 字符输出流2.1 字符流输出介绍2.2 FileWriter的成员2.3 FileWriter写数据的步骤2.4 字符输出流练习3 字符输入流3.1 字节输入流介绍3.2 FileReader的成员4 字符缓冲流4.1 字符缓冲流

package com.itheima.bufferedstream_demo; import java.io.*; /* 需求 : 使用字符缓冲流复制纯文本文件 将当日课程资料中的 ‘斗罗大陆.txt’ 复制到当前模块下 'copy.txt' */ public class BufferedStreamDemo1 { public static void main(String[] args) throws IOException { // 创建高效的字符输入流对象 BufferedReader br = new BufferedReader(new FileReader("D:\\传智播客\\上海-JavaSE进阶面授\\day12【缓冲流、转换流、序列化流、装饰者模式、commons-io工具包】\\资料\\斗罗大陆.txt")); // 创建高效的字符输出流对象 BufferedWriter bw = new BufferedWriter(new FileWriter("day12_demo\\copy.txt")); // 一次读写一个字符 // int ch; // while ((ch = br.read()) != -1) { // bw.write(ch); // } // 一次读写一个字符数组 char[] chs = new char[1024]; int len; while ((len = br.read(chs)) != -1) { bw.write(chs, 0, len); } // 释放资源 br.close(); bw.close(); } }

4.2 字符缓冲流特有的功能4.3 字符缓冲流练习

package com.itheima.bufferedstream_demo; import java.io.*; import java.util.Arrays; /* 需求:读取文件中的数据 : 33 22 11 55 44 排序后 : 11 22 33 44 55 再次写到本地文件 步骤 : 1 创建高效的字符输入流对象 2 读取文件中的一行数据 3 将数据按照空格切割 4 把字符串数组转成int类型数组 5 对int类型的数组进行排序 6 创建高效的字符输出流对象 7 遍历数组,把数组中的数据写入到文件中 8 释放资源 */ public class BufferedStreamDemo3 { public static void main(String[] args) throws IOException { // 1 创建高效的字符输入流对象 BufferedReader br = new BufferedReader(new FileReader("day12_demo\\sort.txt")); // 2 读取文件中的一行数据 String line = br.readLine(); // 3 将数据按照空格切割 String[] strs = line.split(" "); // 4 把字符串数组转成int类型数组 int[] arr = new int[strs.length]; for (int i = 0; i < strs.length; i ) { arr[i] = Integer.parseInt(strs[i]); } // 5 对int类型的数组进行排序 Arrays.sort(arr); // 6 创建高效的字符输出流对象 BufferedWriter bw = new BufferedWriter(new FileWriter("day12_demo\\sort.txt")); // 7 遍历数组,把数组写入到文件中 for (int i = 0; i < arr.length; i ) { bw.write(arr[i] " "); bw.flush(); } // 8 释放资源 br.close(); bw.close(); } }

5 转换流5.1 转换流介绍5.2 转换流分类6 对象操作流6.1 对象操作流介绍6.2 对象操作流的分类6.3 对象操作流的注意事项6.4 对象操作流的练习7 装饰设计模式内容讲解【1】概述【2】代码实践

已知有接口Star和其子类型LiuDeHua。

public interface Star { public abstract void sing(); public abstract void dance(); }

需求 :在不改变LiuDeHua类,及不使用继承的技术前提下,动态的扩展LiuDeHua的sing功能。

LiuDeHua就是一个被装饰类 , 需要对唱歌的功能进行扩展

思路 :

定义一个装饰类,去装饰增强 LiuDehua类。

步骤:

package com.itheima.design_demo; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; /* 装饰模式指的是在不改变原类, 不使用继承的基础上,动态地扩展一个对象的功能 使用原则 : 1. 装饰类和被装饰类需要有共同的父类型。 2. 装饰类要传入被装饰类的对象 3. 在装饰类中把要增强扩展的功能进行扩展 4. 对于不要增强的功能直接调用 需求 : 在不改变LiuDeHua类,及不使用继承的技术前提下,动态的扩展LiuDeHua的sing功能。 LiuDeHua就是一个被装饰类 , 需要对唱歌的功能进行扩展 步骤: 1. 创建LiuDeHua类并实现接口Star【被装饰类】 2. 定义一个装饰类LiuDeHuaWrapper实现Star 【装饰类】 3. 在装饰类里面定义一个成员变量类型是LiuDeHua,可以使用构造方法进行传入被装饰类对象。 4. 在装饰类中对sing方法进行功能扩展 5. 对dance不做改动 6. 测试类分别创建装饰类的对象和被装饰类的对象。将被装饰类对象刘德华对象设置给装饰类对象 */ public class Test { public static void main(String[] args) throws IOException { // 被装饰类对象 LiuDeHua huaZai = new LiuDeHua();// 0x001 // 装饰类对象 LiuDeHuaWrapper liuDeHuaWrapper = new LiuDeHuaWrapper(huaZai); liuDeHuaWrapper.sing(); liuDeHuaWrapper.dance(); // // 被装饰类对象 // FileWriter fw = new FileWriter("路径"); // // 装饰类对象 // BufferedWriter bw = new BufferedWriter(fw); } } // 1. 创建LiuDeHua类并实现接口Star【被装饰类】 class LiuDeHua implements Star { @Override public void sing() { System.out.println("唱忘情水..."); } @Override public void dance() { System.out.println("华仔在跳老年迪斯高.."); } } // 2. 定义一个装饰类LiuDeHuaWrapper实现Star 【装饰类】 class LiuDeHuaWrapper implements Star { // 3. 在装饰类里面定义一个成员变量类型是LiuDeHua,可以使用构造方法进行传入被装饰类对象。 private LiuDeHua huaZai;// 0x001 public LiuDeHuaWrapper(LiuDeHua huaZai) { // 0x001 this.huaZai = huaZai; } @Override public void sing() { // 4. 在装饰类中对sing方法进行功能扩展 System.out.print("华仔深情"); huaZai.sing(); } @Override public void dance() { // 5. 对dance不做改动 huaZai.dance(); } } // 明星接口 , 装饰类和被装饰类的父类型 interface Star { public abstract void sing(); // 唱歌 public abstract void dance();// 跳舞 }

内容小结
  1. 装饰类和被装饰类需要有共同的父类型。
  2. 装饰类要传入被装饰类的对象
  3. 在装饰类中把要增强扩展的功能进行扩展
  4. 对于不要增强的功能直接调用
9 commons-io工具包(对文件的拷贝做优化)学习目标内容讲解【1】三方库的导入
  1. 下载commons-io相关jar包;http://commons.apache.org/proper/commons-io/
  2. 把commons-io-2.6.jar包复制到指定的Module的lib目录中
  3. 将commons-io-2.6.jar加入到项目中

在这里插入图片描述

1)org.apache.commons.io.IOUtils类

public static int copy(InputStream in, OutputStream out): 把input输入流中的内容拷贝到output输出流中,返回拷贝的字节个数(适合文件大小为2GB以下) public static long copyLarge(InputStream in, OutputStream out): 把input输入流中的内容拷贝到output输出流中,返回拷贝的字节个数(适合文件大小为2GB以上)

package com.itheima.commons_io; import org.apache.commons.io.IOUtils; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /* org.apache.commons.io.IOUtils类 public static int copy(InputStream in, OutputStream out): 把input输入流中的内容拷贝到output输出流中,返回拷贝的字节个数(适合文件大小为2GB以下) public static long copyLarge(InputStream in, OutputStream out): 把input输入流中的内容拷贝到output输出流中,返回拷贝的字节个数(适合文件大小为2GB以上) */ public class Test1 { public static void main(String[] args) throws IOException { IOUtils.copy(new FileInputStream("D:\\传智播客\\安装包\\好看的图片\\liqin.jpg") , new FileOutputStream("day12_demo\\copy.jpg")); } }

2)org.apache.commons.io.FileUtils

public static void copyFileToDirectory(final File srcFile, final File destFile): 复制文件到另外一个目录下。 public static void copyDirectoryToDirectory(File src , File dest ): 复制src目录到dest位置。

代码实践:

package com.itheima.commons_io; import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; /* org.apache.commons.io.FileUtils public static void copyFileToDirectory(final File srcFile, final File destFile): 复制文件到另外一个目录下。 public static void copyDirectoryToDirectory(File src , File dest ): 复制src目录到dest目录中。 */ public class Test2 { public static void main(String[] args) throws IOException { FileUtils.copyDirectoryToDirectory(new File("D:\\传智播客\\安装包\\好看的图片") , new File("D:\\")); } }

内容小结

commons-io可以简化IO复制文件的操作。

,