您的位置:首页 > 编程语言 > Java开发

java基础知识9——IO

2018-02-12 17:01 417 查看

IO流概述

IO流概述及分类

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

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

Java用于操作流的类都在IO包中

流按流向分为两种:输入流,输出流



FileWriter类使用(字符输出流)

FileWriter向文件中写数据

A:FileWriter向文件中写数据操作步骤:

a:使用FileWriter流关联文件

b:利用FileWriter的写方法写数据

c:利用FileWriter的刷新方法将数据从内存刷到硬盘上

d:利用FileWriter的关流方法将释放占用的系统底层资源

B:FileWriter方法:

构造方法

FileWriter(String fileName) 传入一个文件的路径

成员方法

void write(String str) 向文件中写str

void flush() 将内存中的数据刷新到文件中

void close() 关流释放系统底层资源

FileWriter其它写方法

// 写一个字符串数据
void write(String str);
// 写一个字符串中的一部分数据
void write(String str,int index,int len);
// 写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值。'a',97,上传到文件中显示的都是字符a
void write(int ch);
// 写一个字符数组数据
void write(char[] chs);
// 写一个字符数组的一部分数据
void write(char[] chs,int index,int len);


FileWriter写入换行以及向文本末尾追加

如何实现数据的换行?

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


如何实现数据的追加写入?

// 第二个参数表示,是否开启追加,默认为false,所以之前的构造方法FileWriter(String fileName);中每次输出的数据,都会覆盖之前的数据,当append的值为true时,之前的数据就不会丢失
FileWriter fw = new FileWriter("c.txt",true);


FileReader类使用(字符输入流)

FileReader读数据一次读取一个字符

FileReader fileReader = new FileReader();
fileReader.reader();


以下是代码:

@Test
public void test() throws Exception{
// 创建输入流对象
FileWriter fileWriter = new FileWriter("F:\\IO.txt");

// 输入数据
fileWriter.write("输入对");

// 刷新
fileWriter.flush();

// 关闭流
fileWriter.close();

// 创建输出流对象
FileReader fileReader = new FileReader("F://IO.txt");

// 循环输出
int ch ;
while((ch = fileReader.read()) != -1) {
System.out.println((char)ch);
}

// 关闭输出流
fileReader.close();
}


这里需要注意,fileReader.reader(),这个方法,当文件中没有数据时,获取到的值是-1,所以可以通过这个特性进行判断文件是否循环完毕;还有一点,就是通过fileReader.reader获取的数据是根据选择的FileReader中的方法的返回值决定的,一般选用返回值为int类型的,如果是中文,需要通过强制转换将整形转换为字符型

利用FileReader和FileWriter完成文件复制

读一次写一次

public void test2() throws Exception {
// 创建输入流对象
FileReader fileReader = new FileReader("F:\\IO.txt");

// 创建输出流对象
FileWriter fileWriter = new FileWriter("F:\\IO2.txt");

// 通过输入流对象获取数据
int ch;
while((ch = fileReader.read()) != -1) {
// 通过输出流对象将数据写入复制的文件中
fileWriter.write(ch);
}

// 关闭输出流
fileWriter.close();

// 关闭输入流对象
fileReader.close();
}


利用字符数组拷贝文件

public void test3() throws Exception {
// 创建输入流对象
FileReader fileReader = new FileReader("F:/IO.txt");

// 创建输出流对象
FileWriter fileWriter = new FileWriter("F:/IO2.txt");

// 循环读取文件----创建字符数组, 创建长度用于接收读取到的字符数
char[] ch = new char[1024];
int len;
while((len = fileReader.read(ch)) != -1) {
// 将读取到的数据写入新的文件中
fileWriter.write(new String(ch, 0, len));
}

// 关闭流
fileWriter.close();

4000
fileReader.close();
}


拷贝文件的两种方式图解



缓冲流介绍和使用

介绍

是一个高效的流,底层使用了输入流和输出流完成

BufferedWriter和BufferedReader

底层使用字符输入流和字符输出流对象,是高效的字符流

高效的原因

包装 FileReader 之后
它的 read 方法把数据读到 cbuf 内
就不是单纯通过 IO 了
public BufferedReader(Reader in, int sz)
构造函数本身可以接受 sz 来设置缓存大小
默认是 8192 (8k)
它开始会先从 IO 读取 8k 内容到自己设置的内存缓冲区内
调用 bufReader.read 方法时
会从 BufferedReader 缓存区中读取内容
避免每次 read 都通过 IO
实际上减少了 IO 访问次数。
同理
BufferedWriter 和 FileWriter 一样如此
因此
BufferedWriter、BufferedReader会相对更高效。


缓冲流复制文本文件的两种方式

第一种方式:使用缓冲流不使用字符数组(一次读取一个字符)

第二种方式:使用缓冲流使用字符数组(一次读取一个字符数组)

缓冲流的特有方法使用

BufferedWriter

void newLine():写一个换行符,这个换行符由系统决定,不同的操作系统newLine()方法使用的换行符不同

windows:\r\n

linux:\n

mac:\r

BufferedReader

String readLine();一次读取一行数据,但是不读取换行符

java基础知识1——数据类型

java基础知识2——运算符

java基础知识3——流程控制语句

java基础知识4——数组

java基础知识5——方法

java基础知识6——面向对象

java基础知识7——String&StringBuilder

java基础知识8——ArrayList集合

java基础知识9——IO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java java基础