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能提升多少拼接效率呢?为此写个简 ...
随机推荐
- 那些年因为粗心导致的外链css无效
css文件三种引用的三种方式: 1.外链: <link rel= "stylesheet" href=""> 注:如果使用外链式绝对不可以忘记 re ...
- Sql 获取向上取整、向下取整、四舍五入取整的实例
[四舍五入取整截取] select round(54.56,0) [向下取整截取] SELECT FLOOR(54.56) [向上取整截取] SELECT CEILING(13.15) --MS ...
- 高性能javascript(记录三)
DOM(文档对象模型)是一个独立的语言,用于操作XML和HTML文档的程序接口(API).在游览器中,主要用来与HTML文档打交道,同样也用在Web程序中获取XML文档,并使用DOM API用来访问文 ...
- 【转】Swift之 ? 和 !
原文地址:http://joeyio.com/ios/2014/06/04/swift---/ Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会 ...
- mac 端口被占用及kill端口
在本地部署 Web 应用时我有遇到过某网络端口已经被其他程序占用的情况,这时候就需要先退出占用该端口的进程,我们可以通过“终端”来实现结束占用某特定端口的进程 1.打开终端,使用如下命令: lsof ...
- AnyCAD.NET C#开发CAD软件实践(一)
免费的AnyCAD.NET发布了!俺喜欢的C#有了大展前途的机会了. 打算用这个框架搭建一套实用的CAD系统,目标是能买出去10套以上. 先看看AnyCAD.NET的自我介绍. http://www. ...
- 用Mockito mock普通的方法
上面的例子是很理想化的状态,但是在实际的开发中,我们需要经常调用一些依赖特定环境的函数或者调用同事写的代码,而同事仅提供了接口.这个时候就需要利用Mockito来协助我们完成测试. 当然,你可以选择e ...
- 更新App版本的流程
上班一年了还没有自己打包上传过APP,周五下班时项目经理手把手教了我一遍,我大致把流程在这里回顾一下: 1.首先要将svn上的代码拷贝一份到分支上,用终端操作:svn cp https://192.1 ...
- Httpclient请求数据
package com.baidu.myutils; import java.io.IOException; import org.apache.http.HttpEntity; import org ...
- PhantomJS linux系统下安装步骤及使用方法(网页截屏功能)
PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, ...