java基础-IO流基础

一、IO流概述及FileWriter类使用

1.1IO流概述及分类

IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的类都在IO包中
流按流向分为两种:输入流,输出流
在这里插入图片描述

1.2FileWriter类使用

  • A:打开帮助文档
  • B:点击显示,找到索引,看到输入框
  • C:你要学习什么内容,你就在框框里面输入什么内容
    举例:Random
  • D:看包
    java.lang包下的类在使用的时候是不需要导包的
  • E:看类的描述
    Random类是用于生成随机数的类
  • F:看构造方法
    Random():无参构造方法
    Random r = new Random();
  • G:看成员方法
    public int nextInt(int n):产生的是一个[0,n)范围内的随机数
    调用方法:
    看返回值类型:人家返回什么类型,你就用什么类型接收
    看方法名:名字不要写错了
    看形式参数:人家要几个参数,你就给几个,人家要什么数据类型的,你就给什么数据类型的
    int number = r.nextInt(100);

1.2.1FileWriter向文件中写数据

  • A:FileWriter向文件中写数据操作步骤:
    a:使用FileWriter流关联文件
    b:利用FileWriter的写方法写数据
    c:利用FileWriter的刷新方法将数据从内存刷到硬盘上
    d:利用FileWriter的关流方法将释放占用的系统底层资源
  • B:FileWriter方法:
    构造方法
    FileWriter(String fileName) 传入一个文件的路径
    成员方法
    void write(String str) 向文件中写str
    void flush() 将内存中的数据刷新到文件中
    void close() 关流释放系统底层资源
package com.itheima_01;
import java.io.FileWriter;
import java.io.IOException;

/*
 * 需求:往文件中写数据
 * 		写数据--输出流--FileWriter
 * 
 * FileWriter:
 * 		FileWriter(String fileName):传递一个文件名称
 * 
 * 输出流写数据的步骤:
 * 		A:创建输出流对象
 * 		B:调用输出流对象的写数据的方法
 * 		C:释放资源
 */
public class FileWriterDemo {
	public static void main(String[] args) throws IOException {
		//创建输出流对象
		//文件路径"d://a.txt";"d:a/txt";"d:///a.txt";
		//demoIO.txt 会写到项目根路径
		FileWriter fw = new FileWriter("d:\\a.txt");
		/*
		 * 创建输出流对象做了哪些事情:
		 * 		A:调用系统资源创建了一个文件
		 * 		B:创建输出流对象
		 * 		C:把输出流对象指向文件
		 */
		
		//调用输出流对象的写数据的方法
		//写一个字符串数据;此时只是将数据写入到缓冲区,未写入到文件中
		fw.write("IO流你好");
		//刷新,将数据写入文件
		fw.flush();
		
		//释放资源
		//通知系统释放和该文件相关的资源
		fw.close();
		
		//while(true) {}
		//若不释放资源,并且程序未执行完毕时,无法删除文件
	}
}

1.2.2FileWriter注意事项

  • 文件路径
    相对路径:相对当前项目而言的,在项目的根目录下(a.txt)
    绝对路径:以盘符开始的路径(d:\a.txt)

  • close()和flush()方法的区别:
    flush():刷新缓冲区。流对象还可以继续使用。
    close():先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。有close存在并且数据比较少时可以省略flush()方法

1.2.3FileWriter其它写方法

  • void write(String str):写一个字符串数据
  • void write(String str,int index,int len):写一个字符串中的一部分数据,从index(包含index)开始往后数len个数据
  • void write(int ch):写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值。‘a’,97 =》aa(文件中); 写入文件的数据都是字符,没有数字
  • void write(char[] chs):写一个字符数组数据,注意是char类型,char类型不仅可以用''单引号表示,也可以用数字表示;
  • void write(char[] chs,int index,int len):写一个字符数组的一部分数据

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

  • 如何实现数据的换行?
    \n可以实现换行,但是windows系统自带的记事本打开并没有换行,这是为什么呢?因为windows识别的换行不是\n,而是\r\n;其他系统的换行:
    windows:\r\n
    linux:\n
    mac:\r
  • 如何实现数据的追加写入?
    FileWriter(String fileName, boolean append)

二、FileReader类使用

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

public class Demo {
	public static void main(String[] args) throws IOException {
		//1.创建读数据的输入流对象
		FileReader fr = new FileReader("demoIO.txt");
		//2.调用读数据的方法
		int ch ;
		//fr.read() 读取的是数字表示的字符编码;当无数据时,返回-1
		while((ch=fr.read())!=-1){
			System.out.print((char)ch);
		};
		//3.释放资源
		fr.close();
	}
}

2.2利用FileReader和FileWriter完成文件复制

2.2.1读一个字符,写一个字符

public class Demo {

	public static void main(String[] args) throws IOException {
		// 1创建输入流对象
		// 创建输出流对象
		FileReader fr = new FileReader("demoIO.txt");
		FileWriter fw = new FileWriter("demoIO_copy.txt");

		// 2.读写数据
		int ch;
		while ((ch = fr.read()) != -1) {
			fw.write(ch);
		}
		// 3.释放资源
		fw.close();
		fr.close();
	}
}

2.2.2利用数组一次读多个字符

public class Demo {

	public static void main(String[] args) throws IOException {
		// 1.创建输入流对象
		FileReader fr = new FileReader("demoIO.txt");
		FileWriter fw = new FileWriter("demoIO_Copy.txt");
		// 2.读写数据
		// 2.1创建保存数据的数组
		char[] ch = new char[1024];
		// 2.2读取字符长度
		int len;
		// fr.read(ch):返回读取到数据的长度
		// ch数组,每次读一个字符,覆盖ch的一个元素,ch中可能有上次读到的数据
		while ((len = fr.read(ch)) != -1) {
			fw.write(ch, 0, len);
			System.out.print(new String(ch).substring(0, len));
		}
		//3.释放资源
		fr.close();
		fw.close();
	}
}

2.2.3拷贝文件的两种方式图解

在这里插入图片描述

三、缓冲流介绍和使用

和IO输入输出流相似,创建对象时要用FileWriter或者FileReader作为参数

3.1缓冲流的基本使用

public class Demo {

	public static void main(String[] args) throws IOException {
		// 1.创建缓存流对象
		BufferedReader br = new BufferedReader(new FileReader("demoIO.txt"));
		BufferedWriter bw = new BufferedWriter(new FileWriter("demoIO_copy.txt"));
		// 2.文件读写
		// 2.1读写,读一个字符写一个字符
		// int in;
		// while ((in = br.read()) != -1) {
		// bw.write(in);
		// }
		// 2.2读写,使用数组
		int len;
		char[] ch = new char[1024];
		while ((len = br.read(ch)) != -1) {
			bw.write(ch, 0, len);
			;
		}
		// 3.释放资源
		br.close();
		bw.close();
	}
}

3.2缓冲流的特有方法使用

  • BufferedReader
    • String readLine():一次读取一行数据,但是不读取换行符
  • BufferedWriter
    • void newLine():写一个换行符,这个换行符由系统决定,不同的操作系统newLine()方法使用的换行符不同
      windows:\r\n
      linux:\n
      mac:\r
// 1.创建缓存流对象
BufferedReader br = new BufferedReader(new FileReader("demoIO.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("demoIO_copy.txt"));
// 2.读写数据
String line;
while ((line = br.readLine()) != null) {
    bw.write(line);
    bw.newLine();
    bw.flush();
}
// 3.释放资源
br.close();
bw.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值