JAVA基础学习day19--IO流一、FileWrite与FileReader

一、IO简述

1.1、简述

IO:input/output

IO流用来处理设备之间的数据传输

Java对数据的操作是通过流的方式

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

1.2、结构

字节流抽象类:

InputStream,OutputStream

字符流抽象类:

Reader、Writer。

ps:由这四4个派生出来子类名称都是以父类名作为子类名的后缀

如:InputStream的子类FileInputStream

如:Reader的子类FileReader;

1.3、分类

按操作数据方式为两种:字节流与字符流

按流向分:输入流,输出流

二、Writer

2.1、writer

写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。

字段摘要
protected Object lock
用于同步针对此流的操作的对象。
构造方法摘要
protected
Writer()

创建一个新的字符流 writer,其关键部分将同步 writer 自身。

protected
Writer(Object lock)

创建一个新的字符流 writer,其关键部分将同步给定的对象。

方法摘要
Writer append(char c)

将指定字符添加到此 writer。

Writer append(CharSequence csq)

将指定字符序列添加到此 writer。

Writer append(CharSequence csq, int start,
int end)

将指定字符序列的子序列添加到此
writer.Appendable
abstract
void
close()

关闭此流,但要先刷新它。

abstract
void
flush()

刷新该流的缓冲。

void write(char[] cbuf)

写入字符数组。

abstract
void
write(char[] cbuf,
int off, int len)

写入字符数组的某一部分。
void write(int c)

写入单个字符。

void write(String str)

写入字符串。

void write(String str,
int off, int len)

写入字符串的某一部分。

三、FileWriter与FileReader

3.1、FileWriter

构造方法摘要
FileWriter(File file)
根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(File file,
boolean append)

根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(FileDescriptor fd)

构造与某个文件描述符相关联的 FileWriter 对象。

FileWriter(String fileName)

根据给定的文件名构造一个 FileWriter 对象。

FileWriter(String fileName,
boolean append)

根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造
FileWriter 对象。
package com.pb.io.demo1;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
/*
 * close:关闭流,会将流关闭,不能再使用
 * flush:flush刷新后,流可以继续使用,
 */
public class WriterDemo {

    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        File file=null; //文件
        FileWriter fw=null; //字符输出流
        try {
            file=new File("d:/demo.txt");
            // fw=new FileWriter(file);//如果有这个文件就会覆盖
             //如果要追加到文件内容后面就使用true
             fw=new FileWriter(file,true);
             System.out.println("请输入内容,请输入 over后结束");
             String str=null; //接收输入的内容
             char [] buf=new char[1024];//定义缓冲区大小
             do{
                  str=input.nextLine();
                  buf=str.toCharArray();//转换为字符数组
                  fw.write(buf); //将字符数组写入
                  fw.flush();//刷新流
             }while(!str.equals("over"));
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            //使用finally关闭流
            try {
                if(fw!=null)
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
         System.out.println("写入结束");

    }

}

3.2、FileReader

构造方法摘要
FileReader(File file)
在给定从中读取数据的 File 的情况下创建一个新 FileReader
FileReader(FileDescriptor fd)

在给定从中读取数据的 FileDescriptor 的情况下创建一个新
FileReader

FileReader(String fileName)

在给定从中读取数据的文件名的情况下创建一个新
FileReader


3.3示例 单个字符读取

package com.pb.io.demo1;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/*
 * 单个字符读取
 */

public class FileReaderDemo {

    public static void main(String[] args) {

        File file=null; //文件
        FileReader fr=null; //字符输入流

        try {
            file=new File("d:/demo.txt");
            fr=new FileReader(file);
            int  len=0;//接收读出内容

            while((len=fr.read())!=-1){
                System.out.println((char)len);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                //关闭流
                if(fr!=null)
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

3.4、示例 数组方式读取 建议使用

package com.pb.io.demo1;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;

/*
 * 通过字符数组 读取
 */

public class FileReaderDemo {

    public static void main(String[] args) {

        File file=null; //文件
        FileReader fr=null; //字符输入流

        try {
            file=new File("d:/demo.txt");
            fr=new FileReader(file);
            //接收读出内容数组
            char [] buf=new char [1024]; //一般为1024的整数倍
            int len=0;
            while((len=fr.read(buf))!=-1){ //读取内容到字符数组
                System.out.println(new String(buf,0,len));//读有多少,就输出多少

            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                //关闭流
                if(fr!=null)
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

四、完整和复制文件

4.1、字符输入流和字符输入流

package com.pb.io.demo1;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class FileWriterAndFileReader {

    public static void main(String[] args) {
        File file = new File("d:\\demo.txt");
        Output(file);
        input(file);
    }

    // 写入文件
    private static void Output(File file) {
        FileWriter fw = null;
        Scanner input = new Scanner(System.in);
        try {
            fw = new FileWriter(file, true);
            // 声明变量来接收用户输入
            System.out.println("请输入要写入的内容:输入over结束");
            String str = null;
            // 声明缓冲区
            char[] buf = new char[1024];
            do {
                str = input.nextLine(); // 接收用户输入
                buf = str.toCharArray(); // 转换为数组
                fw.write(buf, 0, buf.length);// 写入

            } while (!(str.equals("over")));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fw != null) {
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    // 读写文件
    private static void input(File file) {
        FileReader fr = null;
        try {
            fr = new FileReader(file);
            // 定义字符数组
            char[] buf = new char[1024];// 缓冲区大小
            int len = 0;// 长度读取的字符个数
            while ((len = fr.read(buf)) != -1) {
                System.out.println(new String(buf, 0, len));
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fr != null) {
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

4.2、复制文件

package com.pb.io.demo1;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * 复制的原理 将一个文件存储到另一个文件中 边读边写 先读再写
 *
 */
public class CopyFileDemo {

    public static void main(String[] args) {
        File soure = new File("d:\\demo.txt");
        File objFile = new File("e:\\q.txt");
        copy1(soure, objFile);
        copy2(soure, objFile);
    }
    /*
     * 读一个复制一个
     */
    public static void copy1(File soure, File objFile) {
        FileReader fr = null;
        FileWriter fw = null;
        try {
            // 声明读,写流对象
            fr = new FileReader(soure);
            fw = new FileWriter(objFile,true);
            int ch = 0;
            int count=0;
            // 开始读
            while ((ch = fr.read()) != -1) {
                count++;
                System.out.println("正在读取"+count+"行");
                fw.write(ch);
                fw.write("\r\n"); //换行
                System.out.println("正在写入"+count+"行");
            }
            System.out.println("读写完成");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

            try {
                if (fw != null)
                    fw.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (fr != null)
                    fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
    /*
     * 数组方式读取复制
     */
    public static void copy2(File soure, File objFile) {
        FileReader fr = null;
        FileWriter fw = null;
        try {
            // 声明读,写流对象
            fr = new FileReader(soure);
            fw = new FileWriter(objFile,true);
            int ch = 0;
            int count=0;
            char [] buf=new char[1024];
            // 开始读
            while ((ch = fr.read(buf)) != -1) {
                count++;
                System.out.println("正在读取"+count+"行");
                fw.write(buf,0,ch);
                fw.write("\r\n"); //换行
                System.out.println("正在写入"+count+"行");
            }
            System.out.println("读写完成");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

            try {
                if (fw != null)
                    fw.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (fr != null)
                    fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

}

 

时间: 2024-10-13 01:17:09

JAVA基础学习day19--IO流一、FileWrite与FileReader的相关文章

Java基础之(IO流)

简介: 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. 一.File类 java.io.File类:文件和目录路径名的抽象表示形式,与平台无关 File ,能新建.删除.重命名文件和目录.但 File 不能访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流. File对象可以作为参数传递给流的构造函数 File类的常见构造方法: 1.public F

【Java基础总结】IO流

字节流 1. InputStream 字节输入流 代码演示 1 InputStream in = System.in; 2 3 System.out.println("int read(byte b) 方法演示"); 4 //int read() 5 int bt = 0; 6 while((bt=in.read())>0){ 7 System.out.print(bt+" "); 8 if(bt == 10){ //回车\r(13) 换行\n(10) 9 b

java基础学习总结——流

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——流 一.JAVA流式输入/输出原理 流是用来读写数据的,java有一个类叫File,它封装的是文件的文件名,只是内存里面的一个对象,真正的文件是在硬盘上的一块空间,在这个文件里面存放着各种各样的数据,我们想读文件里面的数据怎么办呢?是通过一个流的方式来读,咱们要想从程序读数据,对于计算机来说,无论读什么类型的数据都是以010101101010这样的形式读取的.怎么把文件里面的数据读出来呢?你可以把文件想象成一

Java基础学习总结——Java对象的序列化和反序列化

一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存.比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些s

转载:java基础学习总结——java读取properties文件总结

java基础学习总结--java读取properties文件总结 一.java读取properties文件总结 在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResourceAsStream方法和InputStream流去读取properties文件,使用getResourceAsStream方法去读取properties文件时需要特别注意properties文件路径的写法,测试项目如下: 1.1.项目的

java基础学习总结——网络编程

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——网络编程 一.网络基础概念 首先理清一个概念:网络编程 != 网站编程,网络编程现在一般称为TCP/IP编程. 二.网络通信协议及接口 三.通信协议分层思想 四.参考模型 五.IP协议 每个人的电脑都有一个独一无二的IP地址,这样互相通信时就不会传错信息了. IP地址是用一个点来分成四段的,在计算机内部IP地址是用四个字节来表示的,一个字节代表一段,每一个字节代表的数最大只能到达255. 六.TCP协议和UD

java之十 高级IO流

java.io定义的输入/输出类列于下表: ObjectInputStream.GetField和ObjectOutputStream.PutField是Java2新添的内部类. java.io包还包含两个不受java2欢迎的类,这两个类没有在上表中列出:LineNumberInputStream和StringBufferInputStream.新代码不应该使用两个类. 下面是由java.io定义的接口: FileFilter接口是Java2新增的. java.io包中有很多类和接口.包括字节和

JAVA基础学习流程

JAVA基础学习: 第一步:学习JAVA的开发环境配置.开发第一个Java程序.也建议大家开始使用eclipse等IDE,不必纠结是不是一定要从记事本开始. 第二步:学习数据类型.运算符.变量.这是编程的基础,是程序的“砖块”.这些内容大多数编程语言都有,而且非常类似. 第三步:学习控制语句.这是编程的基础,是程序的“混凝土”.有了控制语句+变量,理论上你就可以写任意的程序了.因此,这是进入程序的门槛,需要大量的练习. 第四步:学习面向对象基础.通过类.对象.包等基本概念讲解.学习的时候,一定要

Java基础学习总结--多态

一.面向对象的三大特性:封装.继承.多态 ? 从一定角度来看,封装和继承几乎都是为多态而准备的. 二.什么是多态? ? 指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 三.实现多态的技术以及三个必要条件: ? 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法. 三个必要条件: 继承 重写 父类引用指向子类对象 四.多态的作用.好处.类型

java 基础学习

a+b: 1 import java.util.Scanner; 2 public class Main { 3 4 public static void main(String args[]){ 5 Scanner cin=new Scanner(System.in); 6 int a,b; 7 a=cin.nextInt(); 8 b=cin.nextInt(); 9 System.out.println(a+b); 10 11 } 12 } 字符串.字符输入: 1 import java.