二十五、IO流与文件流

定义:Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。

分类:
1.根据处理数据类型可分:字节流与字符流。
2.根据数据流向可分为:输入流和输出流。

流结构:
在这里插入图片描述

1.文件字节输入/输出流

1.1 文件字节输入流(FileInputStream)
在这里插入图片描述
构造方法:
在这里插入图片描述
常用的方法:
在这里插入图片描述
1.2 文件字节输出流
在这里插入图片描述
构造方法:
在这里插入图片描述
常用的方法:
在这里插入图片描述
1.3 例子:

package Hcybx;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test {
	public static void main(String[] args) {
		//使用字节输出流写文件
		try {
			//当文件不存在时会自动创建一个,但是文件夹必须存在(否则报FileNotFoundException的异常)。
			FileOutputStream fos = new FileOutputStream("F:\\FOS\\fos.txt");
			//创建字符串,并且转换为byte数组
			byte[] by = "这是一个字节输出流文件".getBytes();
			fos.write(by);
			System.out.println("写入成功!");
			fos.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

在这里插入图片描述
在这里插入图片描述
1.4 例子:

package Hcybx;

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

public class Test {
	public static void main(String[] args) {
		//使用字节输入流读取文件
		File file = new File("F:\\FOS\\fos.txt");//必须填写正确的路径
		try {
			FileInputStream fis = new FileInputStream(file);
			//方法一:单个字节获取
			String str = "";
			int ch = 0;
			while((ch = fis.read())!=-1) {
				str += (char)ch;
			}
			System.out.println(new String(str.getBytes("ISO-8859-1")));
			//方法二:多个字节读取
//			byte[] by = new byte[2];//GBK格式汉字占2个字节      UTF-8格式占3个字节
//			while(fis.read(by) != -1) {
//				System.out.print(new String(by));
//			}
			fis.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

运行截图:
在这里插入图片描述

2.文件字符输入流/输出流

!比字节流的好处就是避免乱码的情况。

2.1 文件字符输入流(FileReader)
在这里插入图片描述
构造方法:
在这里插入图片描述
常用的方法:
在这里插入图片描述
2.2 文件字符输出流(FileWriter)
在这里插入图片描述
构造方法:
在这里插入图片描述
常用的方法:
在这里插入图片描述
2.3 例子:

package Hcybx;

import java.io.FileWriter;
import java.io.IOException;

public class Test {
	public static void main(String[] args) {
		//使用字符输入流写文件
		try {
			FileWriter fw = new FileWriter("F:\\FileWriter\\fw.txt", true);
			fw.write("今天是2019/8/30");
			fw.write("\r\n");//换行
			fw.write("I love you baby!", 0, 10);//截取部分
			fw.write("\r\n");//换行
			char[] ch = {'l','o','v','e'};
			fw.write(ch);//写入字符数组
			System.out.println("写入成功!");
			fw.flush();//刷新
			fw.close();//记得先刷新后关闭
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

在这里插入图片描述
在这里插入图片描述
2.4 例子:

package Hcybx;

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

public class Test {
	public static void main(String[] args) {
		//使用字符输出流读文件
		try {
			FileReader fr = new FileReader("F:\\FileWriter\\fw.txt");
			//方法一:一个一个字符读
			int ch = 0;
			while((ch = fr.read()) != -1) {
				System.out.print((char)ch);
			}
			//方法二:多个字符读取
//			char[] ch2 = new char[1024];
//			while(fr.read(ch2) != -1) {
//				System.out.println(new String(ch2));
//			}
			fr.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

运行截图:
在这里插入图片描述

发布了46 篇原创文章 · 获赞 41 · 访问量 8429

猜你喜欢

转载自blog.csdn.net/weixin_42635052/article/details/100152062