JAVA 18 (IO流之字符流)

字节流两个基类

InputStream

OutputStream

字符流的两个基类

Reader

Writer

这四个抽象类派生出来的子类都是以其父类名作为子类后缀的

字符流:

Writer

以操作文件为主来演示

创建一个文件并写入数据。

子类的后缀名是父类名,前缀名是功能。

FileWriter fw = new FileWriter("C:\\Users\\zx\\Desktop\\demo.txt");

//创建文件,明确数据要存放的目的地,如果已存在文件,则覆盖文件。

fw.write("abcde");

//其实数据写入到了流当中,write可以多种形式写入数据。

fw.flush();

//刷新流对象缓冲中的数据

//将流中数据刷入到文件中

fw.close();

//关闭流,并刷新它,一定要close

write()

flush()

close()

都要处理异常,具体方式为:

import java.io.*;

import java.util.*;

public class Test {

public static void main(String[] args) throws IOException

{

FileWriter fw = null;//在外部创建引用,在内部new实体

try

{

fw = new FileWriter("C:\\Users\\zx\\Desktop\\demo.txt");

fw.write("abcde");

fw.flush();

}

catch(IOException e)

{

sop(e.toString());

}

finally

{

try

{

if(fw!=null)  //注意

fw.close();

}

catch(IOException e)

{

}

}

}

public static void sop(Object obj)

{

System.out.println(obj);

}

}

Reader

Read()

close()

FileReader fr = new FileReader("C:\\Users\\zx\\Desktop\\demo.txt");

//创建一个文件读取流对象,和指定文件相关联

//要保证文件已经存在,如果不存在,抛出文件未找到异常

int ch = fr.read();

//read方法一次读取一个字符,而且会自动往下读取。如果读取到结尾,则返回-1

sop((char)ch);

fr.close();

//调用读取流对象方法

int a = fr.read(char[] s);//int为读取到的字符数。

读取字符串:

字符流的缓冲区

 

缓冲区的出现时为了提高流操作效率而出现的,所以创建缓冲区之前,必须有流对象。

BufferedWriter:构造方法必须有参数。提供流对象

BuffereReader:构造方法必须有参数。提供流对象

BufferedWriter举例说明

FileWriter fw = new FileWriter("C:\\Users\\zx\\Desktop\\buf.txt");

BufferedWriter bf=new BufferedWriter(fw);

//为了提高效率将流对象作为参数传递给缓冲区构造函数即可

//缓冲区也是Writer子类

bf.write("abcde");

//使用缓冲区,就要刷新

bf.flush();

bf.newLine();//换行。是跨平台的

bf.write("abcde");

//关闭缓冲区,就是关闭了流对象

bf.close();

BuffereReader举例说明:

//建立读取流对象

FileReader fw = new FileReader("C:\\Users\\zx\\Desktop\\buf.txt");

//为了提高效率,加入缓冲技术。将对象传入构造函数。

BufferedReader br = new BufferedReader(fw);

int a = br.read();//读一个字符 ,读到结尾返回-1

String b = br.readLine();//读一行字符串, 读到结尾返回null。

sop(a);

sop(b);

br.close();

装饰设计模式

 

装饰设计模式:

当想要对已有的对象进行功能增强时,可以定义一个类,将已有对象传入,基于已有对象的功能,并提供加强功能,那么自定义的类成为装饰类。

装饰类通常会通过构造方法接受被装饰对象,并基于被装饰对象的功能提供更强的功能。

装饰和继承的区别:

/*

MyReader//专门用于读取数据的类。

|--MyTextReader

|--MyBufferTextReader

|--MyMediaReader

|--MyBufferMediaReader

|--MyDataReader

|--MyBufferDataReader

class MyBufferReader

{

MyBufferReader(MyTextReader text)

{}

MyBufferReader(MyMediaReader media)

{}

}

上面这个类扩展性很差。

找到其参数的共同类型。通过多态的形式。可以提高扩展性。

class MyBufferReader extends MyReader

{

private MyReader r;

MyBufferReader(MyReader r)

{}

}

MyReader//专门用于读取数据的类。

|--MyTextReader

|--MyMediaReader

|--MyDataReader

|--MyBufferReader

以前是通过继承将每一个子类都具备缓冲功能。

那么继承体系会复杂,并不利于扩展。

现在优化思想。单独描述一下缓冲内容。

将需要被缓冲的对象。传递进来。也就是,谁需要被缓冲,谁就作为参数传递给缓冲区。

这样继承体系就变得很简单。优化了体系结构。

装饰模式比继承要灵活。避免了继承体系臃肿。

而且降低了类于类之间的关系。

装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。

所以装饰类和被装饰类通常是都属于一个体系中的。

*/

时间: 2024-10-21 07:09:14

JAVA 18 (IO流之字符流)的相关文章

Java IO 字节流与字符流 (三)

Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中.而字符流操作的最小单位则是字符.可以先看一下IO流的概述: 下面首先是通过字符流对文件进行读取和写入: 1 package lib; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileNotFou

黑马程序员——Java基础--IO流(一)---字符流和字节流

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.IO流的介绍及体系 IO流用来处理设备之间的数据传输.java对数据的操作是通过流的方式.java用于操作流的对象都在IO包中. 输入流和输出流相对于内存设备而言:将外设中的数据读取到内存中:输入.将内存中的数据写出到外设中:输出. 流按照操作数据分为两种:字节流和字符流. 字符流的由来:其实就是字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字,再对这个文字进行操作

JAVA IO 字节流与字符流

文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节.       IO框架 从上图我们可以看出IO可以分为两大块 字节流和字符流 字节流是 InputStream 和 OutputStream 分别对应输入与输出 字符流是Reader和Writer分别对应输入与输出        ByteArrayInputStream  它字节数组输入流.继承于InputS

java io流(字符流) 文件打开、读取文件、关闭文件

java io流(字符流) 文件打开 读取文件 关闭文件 //打开文件 //读取文件内容 //关闭文件 import java.io.*; public class Index{ public static void main(String[] args) throws Exception{ //打开文件 //字符流方式打开 //字符流每次按一个字符读取 FileReader wj = new FileReader("D:/java/kj/javanew/src/Index.java"

io系列之字符流

java中io流系统庞大,知识点众多,作为小白通过五天的视频书籍学习后,总结了io系列的随笔,以便将来复习查看. 本篇为此系列随笔的第一篇:io系列之字符流. IO流 :对数据的传输流向进行操作,java中将这种操作行为本身封装为对象,以供使用. Input and Output java将io流对象都在IO包中.(java.IO.*) 分类: 按照数据种类分: 字节流 和 字符流, 按照数据流向分: 输出流 和 输入流. 字节流抽象类: InputStream OutputStream 字符流

JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习

JAVA之旅(二十四)--I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习 JAVA之旅林林总总也是写了二十多篇了,我们今天终于是接触到了I/O了.如果你初学,不懂IO流,你可以从前往后慢慢看,但是你工作了一段时间你会发现,流的使用场景以及技术点是非常的强硬的,我们势必要掌握这个知识点,如果你觉得翻阅API比较鼓噪,看视频得不到精髓,看书看不到要点,你就跟随我的JAVA之旅,一起去探索吧! 一.I/O概述 I/O全名:Input Output

Java IO 字节流与字符流 (二)

概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 字节流的抽象基类 InputStream,OuputStream 字符流的抽象基类 Reader,Writer 注: 这些基类的子类都是以基类的名称结尾的,如FileReader,FileInputStream 字节流 字节流:以字符为导向的流 简单介绍一个例子,演示字节流对图片的复制 1: imp

【JAVA IO流之字符流】

一.概述. java对数据的操作是通过流的方式.java用于操作流的对象都在IO包中.流按照操作数据不同分为两种,字节流和字符流.流按照流向分为输入流,输出流. 输入输出的“入”和“出”是相当于内存来说的. 字符流:字节流读取文字字节数据后,不直接操作,而是先查指定的编码表,获取对应的文字,再对这个文字进行操作.简单来说就是字节流+码表. 在IO流中,字节流的顶层父类是Writer和Reader. 二.java.io.FileWriter类. public class FileWriterext

java 核心编程——IO流之字符流(三)

1.字符流 1.1 所有文件的存储都是字节的存储,我们日常在磁盘上保存的其实并不是文件的字符,而是先把字符转换成字节,再把这些字节储存到磁盘.在读取文件时,也是一个字节一个字节的读取,然后生成字节的序列. 1.2 字节流可以处理任何对象,但是字符流呢,.只用来处理字符或者字符串.可以这样说,字节流呢,提供了最基本IO功能,可以处理任何IO操作,但是有一点,不可以直接处理Unicode字符,为什么呢,因为Unicode字符是一个单元为2个字节的字符,而字节流的处理单元为1个字节,字符流是由Java