黑马程序员--Java基础--文件数据IO操作

文件数据IO操作

1. Reader和Writer

1.1. 字符流原理

Reader是所有字符输入流的父类而Writer是所有字符输出流的父类。字符流是以字符(char)为单位读写数据的。一次处理一个unicode。字符流都是高级流,其底层都是依靠字节流进行读写数据的,所以底层仍然是基于字节读写数据的。

1.2. 常用方法

Reader的常用方法:

int read()

读取一个字符,返回的int”值低16”位有效。

int read(char[] chs)

从该流中读取一个字符数组length个字符并存入该数组,返回值为实际读取到的字符量。

Writer的常用方法:

void write(int c)

写出一个字符,写出给定int值”低16”位表示的字符。

void write(char[] chs)

将给定字符数组中所有字符写出。

void write(String str)

将给定的字符串写出

void write(char[] chs,int offset,int len):

将给定的字符数组中从offset处开始连续的len个字符写出

2. 转换流

2.1. 字符转换流原理

InputStreamReader:字符输入流, 使用该流可以设置字符集,并按照指定的字符集从流中按照该编码将字节数据转换为字符并读取。

OutputStreamWriter:字符输出流,使用该流可以设置字符集,并按照指定的字符集将字符转换为对应字节后通过该流写出。

2.2. 指定字符编码

InputStreamReader的构造方法允许我们设置字符集:

InputStreamReader(InputStream in,String charsetName)

基于给定的字节输入流以及字符编码创建ISR

InputStreamReader(InputStream in)

该构造方法会根据系统默认字符集创建ISR

OutputStreamWriter:的构造方法:

OutputStreamWriter(OutputStream out,String charsetName)

基于给定的字节输出流以及字符编码创建OSW

OutputStreamWriter(OutputStream out)

该构造方法会根据系统默认字符集创建OSW

2.3. 使用InputStreamReader

...
public void testInput()throws IOException{
    FileInputStream fis
=newFileInputStream("demo.txt");
/*
    * 这里设置了字符编码为GBK
    * 之后再通过ISR读取demo.txt文件时
    * 就使用GBK编码读取字符了
    */
    InputStreamReader reader
=newInputStreamReader(fis,"GBK");
    int c =-1;
while((c = reader.read())!=-1){
        System.out.print((char)c);
}
    reader.close();
}
...

2.4. 使用OutputStreamWriter

...
public void testOutput()throws IOException{
    FileOutputStream fos
=newFileOutputStream("demo.txt");
    OutputStreamWriter writer
//这里使用的字符编码为UTF-8
=newOutputStreamWriter(fos,"UTF-8");
String str ="大家好!";//UTF-8中文为3个字节,英文符号占1个字节
    writer.write(str);//写出后该文件大小应该为10字节
    writer.close();
}
...

3. BufferedReader

3.1. 构建BufferedReader对象

BufferedReader是缓冲字符输入流,其内部提供了缓冲区,可以提高读取效率。

BufferedReader的常用构造方法:

BufferedReader(Reader reader)

例如:

FileInputStream fis
=newFileInputStream("demo.txt");
InputStreamReader isr
=newInputStreamReader(fis);
BufferedReader br
=newBufferedReader(isr);
….

注:因为BufferedReader在构造实例时需要传入一个字符流,所以当我们想基于一个字节流进行读取时,要先将字节流转换为字符流后方可创建缓冲字符输入流BufferedReader。

3.2. 使用BR读取一行字符串

BufferedReader提供了一个可以便于读取一行字符串:

String readLine()

该方法连续读取一行字符串,直到读取到换行符为止,返回的字符串中不包含该换行符。若EOF则该方法返回null。

例如:

FileInputStream fis
=newFileInputStream("demo.txt");
InputStreamReader isr
=newInputStreamReader(fis);
BufferedReader br
=newBufferedReader(isr);
String str =null;
while((str = br.readLine())!=null){
    System.out.println(str);
}
br.close();

4. PrintWriter

4.1. 创建PrintWriter对象

PrintWriter是具有自动行刷新的缓冲该字符输出流。其提供了比较丰富的构造方法:

PrintWriter(File file)
PrintWriter(String fileName)
PrintWriter(OutputStream out)
PrintWriter(OutputStream out,boolean autoFlush)
PrintWriter(Writer writer)
PrintWriter(Writer writer,boolean autoFlush)

其中参数为OutputStream与Writer的构造方法提供了一个可以传入boolean值参数,该参数用于表示PrintWriter是否具有自动行刷新。

4.3. 使用PW输出字符数据

FileOutputStream fos
=newFileOutputStream("demo.txt");
OutputStreamWriter osw
=newOutputStreamWriter(fos,"UTF-8");
//创建带有自动行刷新的PW
PrintWriter pw =newPrintWriter(osw,true);
pw.println("大家好!");
pw.close();

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 12:15:47

黑马程序员--Java基础--文件数据IO操作的相关文章

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正

黑马程序员——java基础---IO(input output)流字符流

黑马程序员——java基础---IO(input output)流字符流 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- io(input output)流特点: 1,io流用来处理数据之间的传输 2,java对数据的操作是通过流的方式: 3,java用于操作流的对象都在io包中: 4,流按操作数据分为两种:字节流和字符流: 5,流按流向分为:输入流和输出流. 注意:流只能操作数据,而不能操作文件. 3.IO流的常用基类: 1)字节流的抽象

黑马程序员——Java基础---io(上)

黑马程序员——Java基础---io(上) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java I/O系统负责处理程序的输入和输出,I/O类库位于java.io包中,它对各种常见的输入流和输出流进行了抽象.如果数据流中最小的数据单元是字节,那么称这种流为字节流:如果数据流

黑马程序员——java基础——反射

 黑马程序员--java基础--反射 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 反射 其实就是动态加载一个指定的类,并获取该类中的所有的内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员. 反射就是把Java类中的各种成分映射成相应的java类. 简单说:反射技术可以对一个类进行解剖. 反射的基石-->Class类 1.java中的类是用来描述一类事物的共性,该类事物有什么属性,没有什么属性

黑马程序员——java基础——多线程

 黑马程序员--java基础--多线程 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程中的一个独立的控制单元.线程在控制着进程的执行.一个进程中至少有一个线程. 一个进程至少有一个线程在运行,当一个进程中出现多个线程时,就称这个应用程序是多线程应用程序,每个线程在栈区中都有自己的执行空间,自己的方法区.自己的变量.

黑马程序员--Java基础--01基本概念

1.Java的三大技术架构 JAVAEE(Java Platform Enterprise Edition):  开发企业环境下的应用程序,主要针对web程序开发: JAVASE(Java Platform Standard Edition): 完成桌面应用程序的开发,是其他两者的基础 JAVAME(Java Platform Micro Edition): 开发电子消费产品和嵌入式设备,如手机中的程序 我对三大技术构架理解 1.三大技术是指哪三大技术呢? 答:三大技术分别指JAVAEE,JAV

黑马程序员--java基础学习笔记5

黑马程序员--java基础学习笔记6 一.笔记内容概述: 数组-第二种定义格式.数组-常见操作-遍历-最值-选择排序-冒泡排序-排序位置置换代码提取.数组-排序的性能问题.数组-常见功能-查找-折半查找.进制转换-查表法-整合. 二.常用内容介绍: 1.数组初始化的三种方式: int[] arr = new int[3]; int[] arr = new int[]{1,2,3}; int[] arr = {1,2,3}; 2.查表法: 如果数据中出现了对应关系,而且对应关系的一方是有序的数字编

黑马程序员——Java基础---集合框架工具类

黑马程序员——Java基础<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java为操作Set.List和Map提供了一系列工具类,主要有Collections和Arrays.这两个工具类的特点:类中的方法都是静态的,不需要创建对象,直接使用类名调用即可.Collections:是集合对象

黑马程序员——java基础——内部类

 黑马程序员--java基础--内部类 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 内部类 如果A类需要直接访问B类中的成员,而B类又需要建立A类的对象.这时,为了方便设计和访问,直接将A类定义在B类中.就可以了.A类就称为内部类.内部类可以直接访问外部类中的成员.而外部类想要访问内部类,必须要建立内部类的对象. 内部类的访问规则 1,内部类可以直接访问外部类中的成员,包括私有. 之所以可以直接访问外部类中的成员,是因为内部类中持有