【黑马程序员】黑马入学准备篇:IO输入与输出 【上】
来源:互联网 发布:腾讯手游助手mac 编辑:程序博客网 时间:2024/06/15 10:15
------- android培训、java培训、期待与您交流! ----------
1、FileWriter
package com.itheima.io;import java.io.FileWriter;import java.io.IOException;/** * 字符流和字节流: * * 字节流两个基类: InputStream OutputStream * * 字符流两个基类: Reader Writer * * 字符流的特点。 * * 以操作文件为主演示: 需求:在硬盘上,创建一个文件并写入一些文字数据 * 找到一个专门用于操作文件的Writer子类对象。FileWrite。后缀名是父类名。前缀名是该流对象的功能。 * * @author StephenHu * */public class FileWriterDemo {/** * @param args * @throws IOException */public static void main(String[] args) throws IOException {// 创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件// 而且该文件会被创建到指定目录下。并覆盖同名文件// 该步骤就是明确数据要存放的目的地FileWriter fw = new FileWriter("D:\\javaDemo\\test.txt");// 调用write方法,将字符串写入到流中。fw.write("hahahahah");// 刷新流对象中缓冲的数据// 将数据刷到目的文件中fw.flush();fw.write("wwwwwww");fw.flush();fw.write("333hahahahah");// 关闭流资源,但关闭前会flush一次fw.close();// IO异常处理FileWriter fw1 = null;try {fw1 = new FileWriter("h:\\javaDemo\\test1.txt");fw1.write("hhhhhhhh");} catch (IOException e) {System.out.println("catch1:" + e.toString());} finally {try {if (fw1 != null) {fw1.close();}} catch (IOException e) {System.out.println("catch2:" + e.toString());}}/* * 对已有文件的续写 */FileWriter fw2 = null;try {// 传递一个true参数,代表不覆盖已有的文件fw2 = new FileWriter("D:\\javaDemo\\test.txt", true);fw2.write("\n\r\n\rwwwww");} catch (IOException e) {System.out.println("catch1:" + e.toString());} finally {try {if (fw2 != null) {fw2.close();}} catch (IOException e) {System.out.println("catch2:" + e.toString());}}}}
2、FileReader
package com.itheima.io;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;public class FileReaderDemo {public static void main(String[] args) throws IOException {// 创建一个文件读取流对象,和指定名称的文件相关联// 要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundExceptionFileReader fr = new FileReader("D:\\javaDemo\\test.txt");// 调用读取流对象的read方法// read方法一次读一个字符,而且自动继续往下读int ch = 0;String str = "";while ((ch = fr.read()) != -1) {str += (char) ch;}p(str);fr.close();// 定义一个字符数组,用于存储独到的字符// 改read(char[])返回的是独到的字符个数FileReader fr1 = new FileReader("D:\\javaDemo\\test.txt");char[] buf = new char[1024];int num = 0;while ((num = fr1.read(buf)) != -1) {p(new String(buf, 0, num));}fr1.close();// 读取一个.java文件,并打印在控制台上FileReader fr2 = new FileReader("D:\\javaWorkspace\\Practices\\src\\com\\itheima\\io\\DateDemo.java");char[] buf1 = new char[1024];int num1 = 0;while ((num1 = fr2.read(buf1)) != -1) {System.out.print(new String(buf1, 0, num1));}fr2.close();}private static void p(Object o) {System.out.println(o);}}
3、文件拷贝
package com.itheima.io;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class CopyTextDemo {/** * 将C盘一个文本文件复制带D盘 * * 复制原理: 其实就是讲C盘下的文件数据储存到D盘的一个文件中 * * * 1、在D盘创建一个文件,用于储存C盘文件中的数据 2、定义读取流和C盘文件关联 3、通过不断的读写完成数据存储 * * @throws IOException * */public static void main(String[] args) throws IOException {// TODO Auto-generated method stub// copy_1();copy_2();}public static void copy_1() throws IOException {// 创建目的地FileWriter fw = new FileWriter("D:\\javaDemo\\testTo.txt");// 与已有文件关联FileReader fr = new FileReader("D:\\javaDemo\\testFrom.txt");int ch = 0;while ((ch = fr.read()) != -1) {fw.write(ch);}fw.close();fr.close();}public static void copy_2() {FileWriter fw = null;FileReader fr = null;try {fw = new FileWriter("D:\\javaDemo\\testCopyTo.txt");fr = new FileReader("D:\\javaDemo\\test.txt");char[] buf = new char[1024];int len = 0;while ((len = fr.read(buf)) != -1) {fw.write(buf, 0, len);}} catch (IOException e) {// TODO: handle exceptionthrow new RuntimeException("读写失败");} finally {if (fr != null && fw != null) {try {fw.close();fr.close();} catch (IOException e) {e.printStackTrace();}}}}}<strong></strong>
======明天继续======晚安~
==========================
4、问了提高效率,利用缓冲区写文件
package com.itheima.io;import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;public class BufferedWriterDemo_2_1 {/** * 缓冲区的出现是为了提高流的操作效率而出现的 所以创建缓冲区之前,必须先有流对象 */public static void main(String[] args) {// 创建一个字符写入流对象FileWriter fw = null;BufferedWriter bw = null;try {fw = new FileWriter(".\\testData\\buf.txt");// 为了提高字符写入流效率,加入了缓冲技术// 使用方法:讲需要提高效率的流对象作为参数传递给缓冲区的构造函数bw = new BufferedWriter(fw);for (int i = 0; i < 5; i++) {bw.write("hhhhhhhh" + i);bw.newLine();bw.flush();}} catch (IOException e) {throw new RuntimeException("读写失败!");} finally {// 关闭了缓冲区,就是关闭了缓冲区中的流对象,因为是缓冲区在读取数据try {if (bw != null)bw.close();} catch (IOException e) {throw new RuntimeException("关闭失败!");}}}}<strong></strong>
5、利用缓冲区读文件
package com.itheima.io;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class BufferedReaderDemo_2_2 {/** * 字符读取流缓冲区 * 改缓冲区提供了一个一次读一行的方法readline(),方便于对文本数据的获取 * */public static void main(String[] args) {// 创建读取流对象和文件关联FileReader fr = null;BufferedReader br = null;try {fr = new FileReader(".\\testData\\buf.txt");// 用缓冲区读取提高效率br = new BufferedReader(fr);String line="";while((line=br.readLine())!=null){System.out.println(line);}} catch (IOException e) {throw new RuntimeException("读写失败!");} finally {try {if (br != null)br.close();} catch (IOException e) {throw new RuntimeException("关闭失败!");}}}}
6、利用缓冲区完成文本文件拷贝功能
package com.itheima.io;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class CopyTextByBuf_2_3 {/** * 利用缓冲区复制文本文件 */public static void main(String[] args) {BufferedReader br = null;BufferedWriter bw = null;FileReader fr = null;FileWriter fw = null;try {fr = new FileReader(".\\testData\\buf.txt");br = new BufferedReader(fr);fw = new FileWriter(".\\testData\\buf_copy.txt");bw = new BufferedWriter(fw);String line = "";while ((line = br.readLine()) != null) {bw.write(line);//readline()不读取换行符bw.newLine();//bw.flush();}} catch (IOException e) {throw new RuntimeException("读写失败!");} finally {try {if (bw != null)bw.close();if (br != null)br.close();} catch (IOException e) {throw new RuntimeException("关闭失败!");}}}}
7、了解原理,编写自己的缓冲区方法
package com.itheima.io;import java.io.FileReader;import java.io.IOException;/** * 装饰者设计模式:当想要对已有的对象进行功能增强时,可以定义 类,将已有对象传入,基于已有功能,并提供加强功能 * * @author StephenHu * */public class MyBufferedReader_2_4 {public static void main(String[] args) {FileReader fr = null;MyBufferedReader mbr = null;try {fr = new FileReader(".\\testData\\buf.txt");mbr = new MyBufferedReader(fr);String line = "";while ((line = mbr.myReadLine()) != null) {System.out.println(line);}} catch (IOException e) {throw new RuntimeException("读写失败!");} finally {try {if (mbr != null)mbr.close();} catch (IOException e) {e.printStackTrace();}}}}class MyBufferedReader {/** * 自己写一个类似BufferedReader功能的方法 */private FileReader fr;MyBufferedReader(FileReader fr) {this.fr = fr;}// 类似readline()方法public String myReadLine() throws IOException {StringBuilder sb = new StringBuilder();int ch = 0;while ((ch = fr.read()) != -1) {if (ch == '\r') {continue;} else if (ch == '\n') {return sb.toString();} else {sb.append((char) ch);}}if (sb.length() != 0)return sb.toString();return null;}public void close() throws IOException {fr.close();}}
======今天没什么精神,就这么点T_T==============
明天加油↖(^ω^)↗===============
今天又来了
8、从自己编写的缓冲区方法浅谈装饰者模式,以及他和集成的区别
package com.itheima.io;/** * 装饰者设计模式:当想要对已有的对象进行功能增强时, * * 可以定义类,将已有对象传入,基于已有功能,并提供加强功能 * * * 装饰类通常会通过构造方法接收被装饰的对象。 * * 并基于被装饰的对象的功能,提供更强大的功能。 */ /** 装饰和继承的区别* MyReader专门用于读取数据的类* |--MyTextReader* |--MyBufferTextReader* |--MyMediaReader*|--MyBufferMediaReader*|--MyDataReader*|--MyBufferDataReader**class MyBufferReader{*MyBufferReader(MyTextBufferReader text)*{}*MyBufferReader(MyMediaBufferReader media)*{}*MyBufferReader(MyDataBufferReader media)*{}*}*上面这个类拓展性很差。*找到其参数的共同类型。通过多种形式。可以提高拓展性*class MyBufferReader extends MyReader{*private MyReader r;*MyBufferReader(MyReader r)*{}*}*继而产生装饰设计模式* MyReader专门用于读取数据的类*|--MyTextReader*|--MyMediaReader*|--MyDataReader*|--MyBufferReader*装饰模式比继承要灵活。避免了继承体系的臃肿。*而且降低了类与类之间的关系**装饰类因为增强了已有对象,具备的功能和已有的是相同的*所以装饰类和被装饰类通常是属于一个体系中 */class Person {public void chifan() {System.out.println("吃饭");}}class SuperPerson {private Person p;public SuperPerson(Person p) {this.p = p;}public void superChifan() {System.out.println("开胃酒");p.chifan();System.out.println("甜点");System.out.println("来一根");}}public class Decorator_Person_3_1 {public static void main(String[] args) {Person p = new Person();//p.chifan();SuperPerson sp = new SuperPerson(p);sp.superChifan();}}
9、编写自己的LineNumberReader,并用继承来简化
package com.itheima.io;import java.io.FileReader;import java.io.IOException;import java.io.Reader;/*class MyLineNumberReader {private Reader r;private int lineNumber;public int getLineNumber() {return lineNumber;}public void setLineNumber(int lineNumber) {this.lineNumber = lineNumber;}public MyLineNumberReader(Reader r) {this.r = r;}public String myReaderLine() throws IOException {lineNumber++;StringBuilder sb = new StringBuilder();int ch = 0;while ((ch = r.read()) != -1) {if (ch == '\r')continue;else if (ch == '\n') {return sb.toString();} else {sb.append((char) ch);}}if (sb.length() != 0) {return sb.toString();}return null;}public void myClose() throws IOException {r.close();}}*///利用继承来简化class MyLineNumberReader extends MyBufferedReader{private int lineNumber;public int getLineNumber() {return lineNumber;}public void setLineNumber(int lineNumber) {this.lineNumber = lineNumber;}public MyLineNumberReader(Reader r) {super(r);}public String myReaderLine() throws IOException {lineNumber++;return super.myReadLine();}}public class MyLineNumberReaderDemo_3_2 {public static void main(String[] args) {FileReader fr = null;MyLineNumberReader mln = null;try {fr = new FileReader(".\\testData\\buf.txt");mln = new MyLineNumberReader(fr);String line = "";mln.setLineNumber(100);while ((line = mln.myReaderLine()) != null) {System.out.println(mln.getLineNumber()+">>"+line);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
先到此为止吧,下篇我们再来谈字节的读写操作
0 0
- 【黑马程序员】黑马入学准备篇:IO输入与输出 【上】
- 【黑马程序员】黑马入学准备篇:IO输入与输出 【功能篇】
- 【黑马程序员】黑马入学准备篇:IO输入与输出 【下】
- 黑马程序员--java IO输入与输出
- 黑马程序员之IO 输入与输出
- 黑马程序员--IO输入与输出
- 黑马程序员--IO输入与输出(一)
- 黑马程序员--IO输入与输出(二)
- 黑马程序员_JavaIO输入与输出上
- 【黑马程序员】黑马入学准备篇:Java高新技术之 反射
- 【黑马程序员】黑马入学准备篇:Java高新技术之 注解
- 【黑马程序员】黑马入学准备篇:Java高新技术之 泛型
- 【黑马程序员】黑马入学准备篇:交通灯管理系统
- 【黑马程序员】黑马入学准备篇:银行业务调度系统
- 黑马程序员—IO输入与输出笔记
- 黑马程序员 (5)IO输入与输出2
- 【黑马程序员】IO输入与输出(一)
- 黑马程序员——IO输入与输出
- Tools:VC6.0和SourceInsight下的pclint配置
- poj 2976(01分数规划最基础)
- NYOJ 题目3多边形重心问题(数学几何)
- HDU 1011 Starship Troopers 树形背包
- Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
- 【黑马程序员】黑马入学准备篇:IO输入与输出 【上】
- ASP.NET—014:Gridview复合表头
- Yii2设置网页标题
- 通过浏览器超链接调用本地应用程序
- C# 继承
- 贪心算法(scheme)--哈夫曼编码
- 大数据改变世界,UserData改变生活
- 大数据改变世界,UserData改变生活
- 最常见的5个导致 RAC 实例崩溃的问题 (Doc ID 1549191.1)