文档章节

Java基础知识_day10_(IO流,FileWriter,FileReader,BufferedWriter,BufferedReader)

S
 Sunmos
发布于 2017/05/13 00:19
字数 2145
阅读 3
收藏 0
点赞 0
评论 0

内容摘要:

  • IO流概述及分类
  • FileWriter类和FileReader类
  • BufferedWriter和BufferedReader类

1. IO流概述及分类

概述:

IO流用于处理设备间的数据传输问题,读取文件及传输文件。

分类:

IO流的分类是针对于Java程序而言的。
输入流:Java程序读取数据;
输出流:Java程序写数据。

2. FileWriter(输出流)和FileReader(输入流)类

2.1 FileWriter类

2.1.1 构造方法

FileWriter(String FileName):传递一个文件名;
FileWriter(String FileName,boolean append): 传递一个文件名,并设置是否是追加写数据的方式,append为true时,追加方式,默认是false,此处说的追加指的是两次输出流调用同一个文件,同一个输出流中是可以实现追加写数据的.

2.1.2 输出流写数据步骤

创建对象(包含以下内容)
  - 调用系统资源创建文件(如果文本不存在,不会重新创建文本;不能创建文件夹)
  - 创建输出流对象
  - 输出流指向文件
调用输出流对象的写数据方法
释放资源

2.1.3 转义字符及路径问题

\\代表单\,\t代表制表符,\r\n代表是回车键.
绝对路径:以盘符开始的完整路径(d:\a.txt);
相对路径:相对于当前项目而言,文件会创建在项目的根目录下(a.txt).

2.1.4 成员方法

void write(String str):写一个字符串
void write(String str,int index,int len):写字符串中部分数据
  注意:其中的index不能索引越界,len也不能超过可以截取的字符串的长度.
void write(int ch):写一个字符数据,可以使用字符’A’,也可以是字符对应的ASCII值;
void wirte(char[] chs):写一个字符数组
void write(char[] chs,int index,int len):写一个字符数组的一部分
  注意:其中的index不能索引越界,len也不能超过可以截取的字符串的长度.
close():
  关闭输出流,先缓冲区的数据fluseh方法;
  然后通知系统释放和该文件相关的系统资源;
  流对象关闭后,不能再继续使用(不能再写数据到文件).
flush():刷新内存缓冲区,将要写入的字符串写入到文件;可以继续使用流对象写数据.
close和flush方式将数据写入文件的区别:
  前者是关闭了流对象,后续无法再向文件中写数据;
  后者只是将缓冲区中数据写到文件,还可以再向文件写数据,然后再执行此方法将数据写到文件.

2.1.5 常见问题

换行:不同操作系统平台下,换行符不同

windows:  \r\n
linux:     \n
mac:     \r

数据追加写数据:

构造方法:FileWriter(String filename,boolean append):
传递一个文件名,并设置是否是追加写数据的方式,append为true时,追加方式,默认是false.

2.1.6 案例
package com.heimaIO;
import java.io.FileWriter;
import java.io.IOException;
/* * FileWriter:向文件中写数据,输出流 * 成员方法: * void write(String str):写一个字符串 * void write(String str,int index,int len):写字符串中部分数据 * 注意:其中的index不能索引越界,len也不能超过可以截取的字符串的长度 * void write(int ch):写一个字符数据,可以使用字符'A',也可以是字符对应的ASCII值 * void wirte(char[] chs):写一个字符数组 * void write(char[] chs,int index,int len):写一个字符数组的一部分 * 注意:其中的index不能索引越界,len也不能超过可以截取的字符串的长度 */
public class FileWriterDemo2 {
        public static void main(String[] args) throws IOException{
            // 创建对象
            // 在当前项目的根目录下创建一个java.txt文件
            FileWriter fw = new FileWriter("java.txt");
            // 调用输出流的write方法写字符串
            // void write(String str):写一个字符串
            fw.write("Somnus");
            // void write(String str,int index,int len):写字符串中部分数据
            fw.write("Somnus", 3, 4); // 会报错:java.lang.StringIndexOutOfBoundsException
            // void write(int ch):写一个字符,可以使用字符'A',也可以是字符对应的ASCII值
            // 下面两种写法的结果相同,都是把字符'A'写入文件
            fw.write('A');
            fw.write(97);
            // void wirte(char[] chs):写一个字符数组的一部分
            char[] chs = {'s','o','m','n','u','s'};
            fw.write(chs);
            // void write(char[] chs,int index,int len):写一个字符数组的一部分
            fw.write(chs, 3, 4); // 会报错:java.lang.StringIndexOutOfBoundsException
            // 刷新缓冲区
            fw.flush();
            // 关闭系统资源
            fw.close();
        }
}
package com.heimaIO;
import java.io.FileWriter;
import java.io.IOException;
/* * FileWriter:向文件中写数据,输出流 * 常见问题: * 换行:不同操作系统平台下,换行符不同 * windows: \r\n * linux: \n * mac: \r * 数据追加写数据: * 构造方法:FileWriter(String filename,boolean append): * 传递一个文件名,并设置是否是追加写数据的方式,append为true时,追加方式,默认是false */
public class FileWriterDemo3 {
        public static void main(String[] args) throws IOException{
            // 创建对象
             FileWriter fw = new FileWriter("java.txt");
            // 换行
            fw.write("somnus");
            fw.write("\r\n");   // 输出换行
            fw.write("hello");
            // 构造方法:FileWriter(String filename,boolean append)实现追加写数据
            // 创建对象
            FileWriter fw1 = new FileWriter("java.txt", true);
            fw1.write("hello");
            fw1.write("somnus");
            // 刷新缓冲区
            fw.flush();
            fw1.flush();
            // 关闭系统资源
            fw.close();
            fw1.close();
        }
}

2.2 FileReader类

2.2.1 构造方法

FileReader(String filename): filename不能为空并且必须是已经存在的文件名,否则会报异常.

2.2.2 输入流写数据步骤

创建输入流对象;
调用输入流的读数据方法;
释放资源.

2.2.3 成员方法

int read():一次读取一个字符,读完当前字符后,下次就读取下一个字符,没有数据时返回-1, 读取字符时需要将结果强制类型转换为char类型,否则显示的是字符对应的值;
int read(char[] chs):一次读取一个字符数组,读完当前字符后,下次就读取下一个字符,没有数据时返回-1, 返回的是每次实际读取的字符的个数.

2.2.4 案例
public class FileReaderDemo3 {
        public static void main(String[] args) throws IOException {
            // 创建输入流对象
            FileReader fr = new FileReader("java.java");
            // 创建输出流对象
            FileWriter fw = new FileWriter("java1.java");
            char[] chs = new char[1024]; // 数组的长度一般是1024及其整数倍
            int len = 0; // 每次实际读取的字符的个数
            // 读取数据,当数据读取完毕,会返回-1
            /*while((len = fr.read(chs)) != -1) { // 每次读取几个字符,就从字符数组中取出几个字符 System.out.println(new String(chs,0,len)); }*/
            // 赋值文本
            while((len = fr.read(chs)) != -1) {
                // 赋值文本,将本次实际读取的字符个数,复制到文本文件
                fw.write(chs, 0, len);
            }
            // 刷新缓冲区,将数据写入到文件,可以不写此方法,
            // 后面的close方法释放系统资源时会将缓冲区中数据写入到文件
            // fw.flush();
            // 释放资源
            fw.close();
            fr.close();
        }
}

3. BufferedWriter(输出缓冲流)和BufferedReader(输入缓冲流)类

3.1 BufferedWriter类

3.1.1 概述

输出缓冲流:是在FileWriter类的基础上加强功能,因此创建本类的对象需要FileWriter的实例对象作为参数;
BufferedWriter具有FileWriter的成员方法;
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入.

3.1.2 构造方法

public BufferedWriter(Writer w): 创建一个使用默认大小输出缓冲区的缓冲字符输出流.
使用: BufferedWriter bw = new BufferedWriter(new FileWriter(“文件名”));
void newLine():写一个换行符,由系统决定是哪个换行符.

3.2 BufferedReader类

3.2.1 概述

输入缓冲流:是在FileReader类的基础上加强功能,因此创建本类的对象需要FileReader的实例对象作为参数;
BufferedReader具有FileReader的成员方法;
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取.

3.2.2 构造方法

public BufferedReader(Reader in):创建一个使用默认大小输入缓冲区的缓冲字符输入流.
使用: BufferedReader br = new BufferedReader(new FileReader(“文件名”));
String readLine():一次读一行数据,但是不读取换行符,没有数据时返回null值.

3.3 BufferedWriter与BufferedReader类案例

public class BufferedStreamDemo {
    public static void main(String[] args) throws IOException {
        // 创建输出缓冲流对象
        BufferedWriter bw = new BufferedWriter(new FileWriter("java2.java"));
        // 创建输入缓冲流对象
        BufferedReader br = new BufferedReader(new FileReader("java1.java"));
        // 赋值文本
        /*int ch; while((ch=br.read())!=-1) { // 将文本写入文件 bw.write(ch); }*/
        // 赋值文本
        String line;
        // 每次读取一行数据
        while((line=br.readLine()) != null) {
            // 每次写一个字符串
            bw.write(line);
            // 写完一行要写一个换行
            bw.newLine();
            // 刷新数据到文件
            bw.flush();
        }
        // 释放资源
        bw.close();
        br.close();
    }
}

本文转载自:http://blog.csdn.net/l631106040120/article/details/64128809

共有 人打赏支持
S
粉丝 0
博文 34
码字总数 0
作品 0
成都
java InputStream 文件读写 网络UDP/TCP

java io流 传输操作 字节流和字符流的区别: 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,字符流就是 : 字节流+编码表。 处理对象不同:字节流能处理所有类型的数据(如...

cicue
2014/09/15
0
0
Java【基础系列】-文件编码与格式

本章主题: 简要的回顾java的基础知识 读文件: BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可使用默认的大小。...

止静
2014/07/31
0
0
探究java.io之I/O类和接口

基于流的I/O系统被打包到java.io包中,本系列介绍那些自Java最初发布以来就已提供且广泛使用的部分。然而,从1.4版本开始,Java添加了另一套I/O系统,被称为NIO(也就是new I/O系统的缩写)。...

柳哥
2014/11/10
0
0
Java I/O系统 字符流

IO流:用于处理设备上的数据。 设备:硬盘,内存,键盘录入。 IO有具体的分类: 1:根据处理的数据类型不同,字节流和字符流。 2:根据流向不同,输入流和输出流。 字符流的由来: 因为文件编...

坦途abc
03/14
0
0
java编程学习:文件流操作!

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
06/04
0
0
Java基础笔记21

21.01_IO流(字符流FileReader) 1.字符流是什么 字符流是可以直接读写字符的IO流 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写出. 2.FileR...

dreamkong
2017/12/11
0
0
详细介绍Java语言中的IO系统

Java的核心库java.io提供了全面的IO接口,包括:文件读写,标准设备输出等等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在具体使用中很多初学者...

风一样
2011/08/03
0
0
关于Java编程基础学习输入输出IO的问题

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
05/23
0
0
Java IO流分析整理——概念

Java中的流,可以从不同的角度进行分类。 按照数据流的方向不同可以分为:输入流和输出流。 按照处理数据单位不同可以分为:字节流和字符流。 按照实现功能不同可以分为:节点流和处理流。 ...

的书法上的
2014/05/29
0
0
深入理解 Java中的 流 (Stream)

最近在看《Hadoop:The Definitive Guide》,对其分布式文件系统HDFS的Streaming data access不能理解。基于流的数据读写,太抽象了,什么叫基于流,什么是流?Hadoop是Java语言写的,所以想理...

SeanCai
2012/12/19
0
6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

数据结构与算法2

一个数组的例子,实现查找,显示和删除的功能。 public class array {public static void main(String[] args){long[] arr;arr = new long[100];int nElems = 0;int j;...

沉迷于编程的小菜菜
15分钟前
0
0
Python3 基于 requests 批量下载图片

Python3 基于 requests 批量下载图片 import requestsheaders = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Encod......

leeyi
16分钟前
0
0
Sparkstreaming and Kafka

简介 Kafka 0.10的Spark Streaming集成设计与0.8 Direct Stream方法类似。 它提供了简单的并行性,Kafka分区和Spark分区之间的1:1对应关系,以及对偏移量和元数据的访问。 但是,由于较新的...

刺猬一号
20分钟前
0
0
java获取当前时间所在一周的周一和周日日期

/** * 当前时间所在一周的周一和周日时间 * @param time 当前时间 * @return */ public static Map getWeekDate(String time) { Map map = new HashedMap(); SimpleDateFormat sdf = new Si......

小弱鸡
48分钟前
0
0
Redis数据的导出和导入(dump和load方式)

网上有些文章已经不再适用,本人也是踩了些坑,在此记录下。 迁移redis数据一般有如下3种方式: 第三方工具redis-dump,redis-load aof机制,需要开启aof功能 rdb存储机制 这里介绍第一种方式...

iplusx
53分钟前
1
0
ElasticSearch 高亮显示大文档搜索结果

2016年12月,我们开始研究Ambar——一个文档搜索系统。Ambar使用ElasticSearch作为核心搜索引擎。 在Ambar开发的过程中,我们处理了很多与ES相关的问题,我们想分享我们得到的宝贵经验。让我...

九州暮云
今天
1
0
Python 使用 pywifi 模块 破解wifi密码

git https://github.com/awkman/pywifi 常见常量 from pywifi import const# Define interface status.IFACE_DISCONNECTED = 0IFACE_SCANNING = 1IFACE_INACTIVE = 2IFACE_CONNEC......

阿豪boy
今天
2
0
phpstorm使用Iedis

phpstorm的redis插件Iedis是真好用 看了网上挺多的文章,但是由于我系统还是ubuntu,就有点尴尬了,现在破解之后,留个笔记,即使自己之后有需要也可以很快翻阅 先下载资源 资源下载 zip压缩...

贤郎--均灵
今天
0
0
第三章 spring-bean之FactoryBeanRegistrySupport(4)

前言 从FactoryBeanRegistrySupport类的名字可以看出FactoryBeanRegistrySupport负责FactoryBean的注册与支持。如果想知道FactoryBean相关的资料,请阅读spring-bean中关于FactoryBean的解读...

鸟菜啊
今天
0
0
CentOS “Destination Host Unreachable”问题解决办法

挑战极速安装CentOS时遇到局域网主机不能通信的情况: [root@zjd network-scripts]# ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=......

wffger
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部