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能提升多少拼接效率呢?为此写个简 ...
随机推荐
- 小游戏Talk表
[Config]1|0|2|久远的记忆影子|你也是误入宠物王国的妹子吧,我在这里等你很久了,或许我们应该一起逃出这里,跟着我.[Config] [Config]2|3|2|久远的记忆影子|这里原本是一 ...
- LeetCode 5 Longest Palindromic Substring manacher算法,最长回文子序列,string.substr(start,len) 难度:2
https://leetcode.com/problems/longest-palindromic-substring/ manacher算法相关:http://blog.csdn.net/ywhor ...
- Git 撤消
现在添加一个新的文件 t.c, 写一行 int a; 用 git add . 添加跟踪,当前状态 $ git status On branch master Changes to be committ ...
- 【 2013 Multi-University Training Contest 3 】
HDU 4622 Reincarnation 枚举字符串的起点,构造后缀自动机,每次插入一个字符,就能统计得到当前不同字串的个数,预处理出所有的询问. #include<cstdio> # ...
- iOS安全—阻止tweak注入hook api
http://blog.csdn.net/zcrong/article/details/51617348 在Other Linker Flags中添加: -Wl,-sectcreate,__RESTR ...
- 不经过 App store 的安装方式(转)
所有安装到真机(非越狱)的应用(可以是 .app ,也可以是 .ipa ,只要编译时选的是编译成 Arm 的就好..app 转 .ipa 只需要一条命令) 都必须经过证书签名.证书主要有三大种: 企业 ...
- php的clone 浅拷贝
总所周知 php 的 clone方法 拷贝一个对象 而且还是所谓的浅拷贝 一时迷茫 今天终于整明白了 <?php class a { pulic $data; function __constr ...
- imx6 gpio irq
/***************************************************************** * gpio irq * * 一直以来都没了解过gpio的irq, ...
- 处理xml c#
using System.Xml; using System; using System.Text; using System.Net; using System.Collections; using ...
- 3D图形图像处理软件HOOPS介绍及下载
HOOPS 3D Application Framework(以下简称HOOPS)是建立在OpenGL.Direct3D等图形编程接口之上的更高级别的应用程序框架.不仅为您提供强大的图形功能,还内嵌了 ...