p4 FileReader 和 FileWriter

打印 上一主题 下一主题

主题 928|帖子 928|积分 2784

FileReader 和 FileWriter

一、 FileReader 和 File Writer 介绍

FileReader 和 FileWriter 是字符流,即按照字符来操作 io
二、 FileReader 相关方法




  • 构造方法摘要
Constructor and DescriptionFileReader(File file)创建一个新的 FileReader ,给出 File读取。FileReader(String fileName)创建一个新的 FileReader ,给定要读取的文件的名称。FileReader(FileDescriptor fd)创建一个新的 FileReader ,给定 FileDescriptor读取。

  • 相关方法摘要
Modifier and TypeMethod and Descriptionintread()每次读取单个字符,返回该字符,如过达到文件末尾返回-1intread(char[])批量读取多个字符到数组中,返回读取到的字符数,如过达到文件末尾返回-1

  • 相关API:

    • new String(char[]):将char[]转换成String
    • new String(char[], off, len):将char[]的指定部分转换成String

  • 代码演示:
    1. import org.junit.jupiter.api.Test;
    2. import java.io.FileReader;
    3. import java.io.IOException;
    4. /**
    5. * @author
    6. * @version 1.0
    7. */
    8. public class FileReader_ {
    9.     public static void main(String[] args) {
    10.     }
    11.     /**
    12.      * 单个字符读取
    13.      */
    14.     @Test
    15.     public void fileReader01(){
    16.         String filePath = "e:\\story.txt";
    17.         //创建FileReader对象
    18.         FileReader fileReader = null;
    19.         int data = 0;
    20.         try {
    21.             fileReader = new FileReader(filePath);
    22.             //循环读取
    23.             while((data = fileReader.read()) != -1){
    24.                 System.out.print((char)data);
    25.             }
    26.         } catch (IOException e) {
    27.             e.printStackTrace();
    28.         }finally {
    29.             try {
    30.                 if(fileReader != null)
    31.                     fileReader.close();
    32.             } catch (IOException e) {
    33.                 e.printStackTrace();
    34.             }
    35.         }
    36.     }
    37.     /**
    38.      * 字符数组读取
    39.      */
    40.     @Test
    41.     public void fileReader02(){
    42.         String filePath = "e:\\story.txt";
    43.         FileReader fileReader = null;
    44.         int readLen = 0;
    45.         char[] buf = new char[8];
    46.         try {
    47.             //创建FileReader对象
    48.             fileReader = new FileReader(filePath);
    49.             //循环读取
    50.             while((readLen = fileReader.read(buf)) != -1){
    51.                 System.out.print((new String(buf, 0, readLen)));
    52.             }
    53.         } catch (IOException e) {
    54.             e.printStackTrace();
    55.         }finally {
    56.             try {
    57.                 if(fileReader != null)
    58.                     fileReader.close();
    59.             } catch (IOException e) {
    60.                 e.printStackTrace();
    61.             }
    62.         }
    63.     }
    64. }
    复制代码
三、 FileWriter 相关方法




  • 构造方法摘要
Constructor and DescriptionFileWriter(File file)给一个File对象构造一个FileWriter对象。FileWriter(File file, boolean append)给一个File对象构造一个FileWriter对象。FileWriter(String fileName)构造一个给定文件名的FileWriter对象。FileWriter(String fileName, boolean append)构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。FileWriter(FileDescriptor fd)构造与文件描述符关联的FileWriter对象。

  • 相关方法摘要
Modifier and TypeMethod and Descriptionvoidwriter()写入单个字符voidwriter(char[])写入指定数组voidwriter(char[], int off, int len)写入指定数组的指定部分voidwriter(String str)写入整个字符串voidwriter(String str, int off, int len))写入字符串的指定部分<ul>相关API:String类:toCharArray():将String转换成char[]
注意:FileWriter使用后,必须要关闭(close)或刷新(flush),否则写入不到指定的文件。在Java中使用带有缓冲的流时进行文件写入时,数据首先被缓存在内存中。当缓冲区满或者close()或flush()方法被调用时,缓冲区中的数据才会被真正地写入到文件中。如果没有关闭流或者flush缓冲区,缓冲区中的数据就会一直保留在内存中,而不会被写入到文件中。如果程序突然崩溃或者关闭,这些缓冲的数据将会丢失,这可能会导致数据的不完整或者文件损坏。
代码演示:
[code]import java.io.FileWriter;import java.io.IOException;/** * @author * @version 1.0 */public class FileWriter_ {    public static void main(String[] args) {        String filePath = "e:\\note.txt";        FileWriter fileWriter = null;        char[] chars = {'a','b','c'};        try {            //创建FileWriter对象            fileWriter = new FileWriter(filePath);//默认是覆盖写入            //这种构造方法在使用FileWriter时,如果文件不存在,则会自动创建一个新的文件,            // 如果文件已经存在,则会直接打开该文件并清空原有内容,从文件的开头开始写入新的内容。            //1. writer(int):写入单个字符            fileWriter.write('H');            //2. writer(char[]):写入指定数组            fileWriter.write(chars);            //3. writer(char[], off, len):写入指定数组的指定部分            fileWriter.write("中国四大名著".toCharArray(), 0, 3);            //4. writer(string):写入整个字符串            fileWriter.write("猪八戒娶媳妇");            //5.writer(string, off, len):写入字符串的指定部分            fileWriter.write("三打白骨精",0,2);            //在数据量大的情况下可以循环操作        } catch (IOException e) {            e.printStackTrace();        }finally {            //对应FileWriter,一定要关闭流,或者flush才能真正的把数据写入文件中            //看源码就知道原因            /*                源码:                private void writeBytes() throws IOException {                    this.bb.flip();                    int var1 = this.bb.limit();                    int var2 = this.bb.position();                    assert var2

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王海鱼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表