Day21_IO第三天
1、IO体系总图

2、字符流体系图

3、BufferedWriter和BufferedReader特有方法(掌握)
4、LineNumberReader(掌握)
package com.heima.chario;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.LineNumberReader;public class Demo5_LineNumberReader {/*** @param args* @throws IOException*/public static void main(String[] args) throws IOException {LineNumberReader lnr = new LineNumberReader(new FileReader("zzz.txt"));String line;lnr.setLineNumber(100);while((line = lnr.readLine()) != null) {System.out.println(lnr.getLineNumber() + ":" + line);}lnr.close();}}
5、装饰设计模式(掌握)
import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class LineNumberReader {private BufferedReader bufferedReader; //第一步:增加被包装类的引用private int lineNumber = 0;//计数器,也被称为行号public LineNumberReader(BufferedReader br){ //第二步:通过构造方法给被包装类的引用赋值this.bufferedReader = br;}public String readLine() throws IOException{ //第三部:改写要增强的方法String line = bufferedReader.readLine();lineNumber ++;return line;}public void close() throws IOException{bufferedReader.close();}/*** 获取lineNumber* @return lineNumber lineNumber*/public int getLineNumber() { //第三部:改写要增强的方法return lineNumber;}/*** 设置lineNumber* @param lineNumber lineNumber*/public void setLineNumber(int lineNumber) { //第三部:改写要增强的方法this.lineNumber = lineNumber;}public static void main(String[] args) throws Exception{LineNumberReader lnr = new LineNumberReader(new BufferedReader(new FileReader("a.txt")));String line = null;while((line=lnr.readLine()) != null){System.out.println(lnr.getLineNumber()+":"+line);}lnr.close();}}
6、通过指定编码操作文本文件(掌握)
package com.heima.chario;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;public class Demo7_TransIO {/*** @param args* @throws IOException*/public static void main(String[] args) throws IOException {//demo1();//demo2();BufferedReader br = //更高效的读new BufferedReader(new InputStreamReader(new FileInputStream("utf-8.txt"), "utf-8"));BufferedWriter bw = //更高效的写new BufferedWriter(new OutputStreamWriter(new FileOutputStream("gbk.txt"), "gbk"));int c;while((c = br.read()) != -1) {bw.write(c);}br.close();bw.close();}public static void demo2() throws UnsupportedEncodingException,FileNotFoundException, IOException {InputStreamReader isr = new InputStreamReader(new FileInputStream("utf-8.txt"), "uTf-8"); //指定码表读字符OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("gbk.txt"), "gbk"); //指定码表写字符int c;while((c = isr.read()) != -1) {osw.write(c);}isr.close();osw.close();}public static void demo1() throws FileNotFoundException, IOException {//用默认编码表读写,出现乱码FileReader fr = new FileReader("utf-8.txt");FileWriter fw = new FileWriter("gbk.txt");int c;while((c = fr.read()) != -1) {fw.write(c);}fr.close();fw.close();}}
7、高效字符流标准代码(掌握)
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.LineNumberReader;public class Copy {/*** 通过缓冲流拷贝文本文件* @param source* @param dest*/public static void copy(String source, String dest){BufferedReader br = null;BufferedWriter bw = null;try{br = new BufferedReader(new FileReader(source));bw = new BufferedWriter(new FileWriter(dest));String line;//定义变量用于接收每行读取到的数据while((line=br.readLine()) != null){//将读取到行数据存入line并且判断line是不是等于null,如果等于null说明没有读到数据,文件读到末尾bw.write(line);bw.newLine();}}catch(Exception e){e.printStackTrace();}finally{if(br != null){try {br.close();} catch (IOException e) {e.printStackTrace();}}if(bw != null){try {bw.close();} catch (IOException e) {e.printStackTrace();}}}}}
8、案例(掌握)
9、案例代码(掌握)
package com.heima.test;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;public class Test1 {/*** @param args* 将一个文本文档上的文本反转,第一行和倒数第一行交换,第二行和倒数第二行交换** 分析:* 1,创建输入输出流对象* 2,创建集合对象* 3,将读到的数据存储在集合中* 4,倒着遍历集合将数据写到文件上* 5,关流* @throws IOException** 注意事项:* 流对象尽量晚开早关*/public static void main(String[] args) throws IOException {//改写后是尽量晚开早关// 1,创建输入输出流对象BufferedReader br = new BufferedReader(new FileReader("zzz.txt"));//2,创建集合对象ArrayList<String> list = new ArrayList<>();//3,将读到的数据存储在集合中String line;while((line = br.readLine()) != null) {list.add(line);}br.close(); //关流//4,倒着遍历集合将数据写到文件上BufferedWriter bw = new BufferedWriter(new FileWriter("revzzz.txt"));for(int i = list.size() - 1; i >= 0; i--) {bw.write(list.get(i));bw.newLine();}//5,关流bw.close();}}
package com.heima.test;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.TreeMap;public class Test3 {/*** 获取一个文本上每个字符出现的次数,将结果写在times.txt上** 分析:* 1,创建带缓冲的输入流对象* 2,创建双列集合对象TreeMap* 3,将读到的字符存储在双列集合中,存储的时候要做判断,如果不包含这个键,就将键和1存储,如果包含这个键,就将该键和值加1存储* 4,关闭输入流* 5,创建输出流对象* 6,遍历集合将集合中的内容写到times.txt中* 7,关闭输出流* @throws IOException*/public static void main(String[] args) throws IOException {//1,创建带缓冲的输入流对象BufferedReader br = new BufferedReader(new FileReader("zzz.txt"));//2,创建双列集合对象TreeMapTreeMap<Character, Integer> tm = new TreeMap<>();//3,将读到的字符存储在双列集合中,存储的时候要做判断,如果不包含这个键,就将键和1存储,如果包含这个键,就将该键和值加1存储int ch;while((ch = br.read()) != -1) {char c = (char)ch; //强制类型转换/*if(!tm.containsKey(c)) {tm.put(c, 1);}else {tm.put(c, tm.get(c) + 1);}*/tm.put(c, !tm.containsKey(c) ? 1 : tm.get(c) + 1);}//4,关闭输入流br.close();//5,创建输出流对象BufferedWriter bw = new BufferedWriter(new FileWriter("times.txt"));//6,遍历集合将集合中的内容写到times.txt中for(Character key : tm.keySet()) {switch (key) {case '\t':bw.write("\\t" + "=" + tm.get(key));break;case '\n':bw.write("\\n" + "=" + tm.get(key));break;case '\r':bw.write("\\r" + "=" + tm.get(key));break;default:bw.write(key + "=" + tm.get(key)); //写出键和值break;}bw.newLine();}//7,关闭输出流bw.close();}}
package com.heima.test;import java.io.BufferedReader;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Test4 {/*** 当我们下载一个试用版软件,没有购买正版的时候,每执行一次就会提醒我们还有多少次使用机会用学过的IO流知识,模拟试用版软件,* 试用10次机会,执行一次就提示一次您还有几次机会,如果次数到了提示请购买正版* @throws IOException* 分析:* 1,创建带缓冲的输入流对象,因为要使用readLine方法,可以保证数据的原样性* 2,将读到的字符串转换为int数* 3,对int数进行判断,如果大于0,就将其--写回去,如果不大于0,就提示请购买正版* 4,在if判断中要将--的结果打印,并将结果通过输出流写到文件上*/public static void main(String[] args) throws IOException {//1,创建带缓冲的输入流对象,因为要使用readLine方法,可以保证数据的原样性BufferedReader br = new BufferedReader(new FileReader("config.txt"));//2,将读到的字符串转换为int数String line = br.readLine();int times = Integer.parseInt(line); //将数字字符串转换为数字//3,对int数进行判断,如果大于0,就将其--写回去,如果不大于0,就提示请购买正版if(times > 0) {//4,在if判断中要将--的结果打印,并将结果通过输出流写到文件上System.out.println("您还有" + times-- + "次机会");FileWriter fw = new FileWriter("config.txt");fw.write(times + "");fw.close();}else {System.out.println("您的试用次数已到,请购买正版");}//关闭流br.close();}}
import java.io.File;/*** 获取指定目录下的所有文件** @author haoyongliang**/public class Demo4 {public static void main(String[] args) {String path = "C:\\";File f = new File(path);show(f);}public static void show(File file) {// 如果是文件if (file.isFile()) {if (file.getName().endsWith(".java")) {System.out.println(file);}// 如果是文件夹} else {if(!file.getName().equals("Documents and Settings") || !file.getName().equals("System Volume Information")){File[] files = file.listFiles();for (File f : files) {show(f);}}}}}
package com.heima.chario;public class Demo8_Digui {/*** @param args* 递归:方法自己调用自己* 5!* 5 * 4 * 3 * 2 * 1** 5 * fun(4)(代表4!)* 4 * fun(3)(代表3!)* 3 * fun(2)(代表2!)* 2 * fun(1)(代表1!)* 递归的弊端:不能调用次数过多,容易导致栈内存溢出* 递归的好处:不用知道循环次数** 构造方法是否可以递归调用?* 构造方法不能使用递归调用** 递归调用是否必须有返回值?* 不一定(可以有,也可以没有)*/public static void main(String[] args) {/*int result = 1;for(int i = 1; i <= 5; i++) {result = result * i;}System.out.println(result);*/System.out.println(fun(6000));}public static int fun(int num) {if(num == 1) {return 1;}else {return num * fun(num - 1);}}}
10、今天必须掌握的内容,面试题,笔试题。
Day21_IO第三天的更多相关文章
- 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)
前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- Jquery的点击事件,三句代码完成全选事件
先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 简谈百度坐标反转至WGS84的三种思路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 基于百度地图进行数据展示是目前项目中常见场景,但是因为百度地图 ...
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- 如何一步一步用DDD设计一个电商网站(三)—— 初涉核心域
一.前言 结合我们本次系列的第一篇博文中提到的上下文映射图(传送门:如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念),得知我们这个电商网站的核心域就是销售子域.因为电子商务是以信息网络 ...
- 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率
之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...
随机推荐
- redis命令全集(自用)
1.连接操作相关的命令 quit:关闭连接(connection) auth:简单密码认证 2.对value操作的命令 exists(key):确认一个key是否存在 del(key):删除一个key ...
- CSS3回执特殊图形
- 4种必须知道的Android屏幕自适应解决方案
文章来源:http://blog.csdn.net/shimiso/article/details/19166167 demo下载:http://www.eoeandroid.com/forum.ph ...
- PhoneGap初试!
最近公司准备开发一个移动应用,方便起见准备开发web项目,用PhoneGap打包成iOS与Android平台的应用.对PhoneGap完全不了解,所以先装个试下.折腾了大半天,总算弄出点儿眉目,整理下 ...
- POJ 3463 有向图求次短路的长度及其方法数
题目大意: 希望求出走出最短路的方法总数,如果次短路只比最短路小1,那也是可取的 输出总的方法数 这里n个点,每个点有最短和次短两种长度 这里采取的是dijkstra的思想,相当于我们可以不断找到更新 ...
- Android 设置ListView当前显示的item
项目中可能会有这种需求:动态设置ListView显示的item 这种需求可能会出现在不同的情况下,有的是打开页面就要显示在特定的位置,也有的是浏览列表时实时更新数据并且改变了集合中数据,或者是某种条件 ...
- C++小项目:directx11图形程序(六):cameraclass
cameraclass是一个相机类,它的作用是生成非常重要的观察矩阵.本小节涉及到一点数学知识,相对前面需要只是填充,调用,算是比较有趣的吧. cameraclass.h #pragma once # ...
- 总结Themida / Winlicense加壳软件的脱壳方法
总结下Themida/ Winlicense (TM / WL) 的脱壳方法. 1, 查看壳版本,这个方法手动也可以,因为这个壳的版本号是写在程序里面的,在解压后下断点即可查看,这里有通用的脚本,我 ...
- 快速加载DXF、DWG格式文件控件ABViewer
ABViewer是一种高品质,低成本,高效率的多功能设计及工程文档管理应用程序. ABViewer为您提供专业的cad文件浏览和编辑工具. 支持多种格式,如:DWG格式, DXF, DWF, Hewl ...
- hihoCoder#1014
刚开始学习C语言,准备在做hiho的题目的过程中来学习,在此进行记录,如果代码中有错误或者不当的地方还请指正. 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小 ...