黑马程序员-java基础IO流(1)

来源:互联网 发布:深圳市云计算协会 编辑:程序博客网 时间:2024/06/10 07:15

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

一、IO流

概述:

(1)IO流用来处理设备之间的数据传输。

(2)Java对数据的操作是通过流的方式。

(3)Java用于操作流的对象都在IO包中。

(4)流按操作数据分为两种:字节流和字符流。

(5)流按流向分为:输入流和输出流。


二、FileWriter类

1、定义:

用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。

注:文件是否可用或是否可以被创建取决于底层平台。特别是某些平台一次只允许一个 FileWriter(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。

2、常用方法:

常用的方法如下:

        FileWriter(File file) -> 根据给定的 File 对象构造一个 FileWriter 对象。

        FileWriter(String fileName) -> 根据给定的文件名构造一个 FileWriter 对象。

        FileWriter(String fileName,boolean append) -> 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。

        close() -> 关闭此流,但要先刷新它。

    flush() -> 刷新该流的缓冲。

    write(char[] cbuf) -> 写入字符数组。

    write(char[] cbuf,int off,int len) -> 写入字符数组的某一部分。

    write(String str) -> 写入字符串。

3、练习

(1)问题:往c盘的demo.txt文件中写入"abcde"字符串。

package com.itheima;

import java.io.FileWriter;
import java.io.IOException;

/**
 * FileWriter对象
 * 描述:往c盘的demo.txt文件中写入"abcde"字符串
 * 
 * @author jjy
 */
public class FileWriterDemo06{
    
    public static void main(String args[])throws IOException{
   
    //创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。
    //而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。
    //其实该步骤就是在明确数据存放的目的地。
    FileWriter fw = new FileWriter("c:\\demo.txt");
   
    //调用write方法,将字符串写入到流中
    fw.write("abcde");
   
    //刷新流对象中的缓冲中的数据。
    //将数据刷到目的地中
    fw.flush();
   
    //关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据
    //将数据刷到目的地中。
    //和flush区别:flush刷新后,流可以继续使用,close刷新后,流将关闭
    fw.close();
   
    }
}


运行结果:




三、FileReader类

1、定义:

用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。
注:要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。

2、常用方法:


常用的方法如下:


        FileReader(File file) -> 在给定从中读取数据的File的情况下创建一个新FileReader。


        FileReader(String fileName) -> 在给定从中读取数据的文件名的情况下创建一个新 FileReader。


close() -> 关闭该流并释放与之关联的所有资源。


read() -> 读取单个字符。


read(char[] cbuf) -> 将字符读入数组。


read(char[] cbuf, int off, int len) -> 将字符读入数组的某一部分。


3、练习
(1)问题:


package com.itheima;


import java.io.FileReader;
import java.io.IOException;


/**
 *第二种方式:通过字符数组进行读取D盘下的demo.txt文件,然后在控制台上显示。
 * FileWriter对象
 * @author jjy
 */
public class FileReaderDemo10{
    
    public static void main(String args[]){
    
    FileReader fr = null;
try {

//创建一个文件读取流对象,和制定名称的文件相关联
//要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException
fr = new FileReader("D:\\Workspaces\\MyEclipse 10\\exam\\src\\com\\itheima\\demo.txt");
    
//定义一个字符串数组,用于存储读到字符。
//该read(char[])返回的是读到字符个数。
char[] buf = new char[1024];
int num = 0;
while((num=fr.read(buf))!=-1){
System.out.println(new String(buf,0,num));
}

fr.close();
   
} catch (IOException e) {
System.out.println(e.toString());

}finally{
try {
if(fr!=null){
fr.close();
}


} catch (IOException e) {
System.out.println(e.toString());
}
}
    }
}


运行结果:
abcdefghaha

0 0