12、输入和输出处理

输入和输出(I/O)处理(一)

学习阶段存储方式的演变:

临时存储:变量 -> 数组 -> 对象 -> 对象数组 -> 集合[最常用的程序内临时存储的顶级存储方式]

持久化存储:文件

1. 掌握File类的常用API

文件的概念:相关记录或者放在一起的数据的集合。 它是需要储存在"长期储存"的设备上的,有了它我们就可以实现持久化存储。

java.io.File类:可以实现对文件(File)/文件夹(目录directory)的操作。

构造方法

  1. File(String pathname) 直接根据字符串类型地址获取对应的文件对象
  2. File(String parent,String child) 根据字符串类型的父路径和子路径获取对应的文件对象
  3. File(File parent,String child) 根据文件类型的父路径和字符串类型的子路径获取对应的文件对象
1.File(String pathname)
File file = new File("d:/a.txt");
File file = new File("d:\\a.txt");

 2.File(String parent父路径,String child子路径)
通常应用于:你已经获取到了某个文件的父路径  然后只需要通过本构造即可实现路径自动拼接
File file = new File("d:", "a.txt");

3.File(File parent,String child)
通常应用于:你已经获取到了某个文件的父路径(File对象型的)....
File parent = new File("d:");
File file = new File(parent , "a.txt");
// 获取文件的字节数
System.out.println(file.length());

普通方法

  1. 获取文件的字节数:long length()
  2. 判断文件/文件夹是否存在:boolean exists();
  3. 判断是否是文件:boolean isFile();
  4. 判断是否是文件夹:boolean isDirectory();
  5. 获取相对路径:String getPath(); // 你可以理解为 File构造传入什么路径 就得到什么路径
  6. 获取绝对路径:String getAbsolutepath(); // 如果File构造传入的是相对路径 则可以根据它找到对应的绝对路径,但是如果本身就是绝对路径 则直接显示。
  7. 创建文件:boolean createNewFile();
  8. 创建文件夹:boolean mkdir();
  9. 删除文件/空文件夹:boolean delete();
  10. 获取文件名称:String getName();
  11. 获取文件夹的子目录:File[] listFiles();

2. 掌握流的概念和分类

I/O流概念

输入/输出流

:水流 电流 车流 数据流… 流动的概念

​ 流动性

​ 方向性:相对于程序为参照物,流是有读取和写入操作,是有方向的。

流的分类

按照方向性分类:

输入流:读 InputStream Reader

输出流:写 OutputStream Writer

按照处理单元:

字节流:可以用来传输一切内容。音频、视频、图片、文本… 根据美国ASCII码进行通信传输的

​ 字节输入流InputStream 字节输出流OutputStream

字符流:可以用来传输文本内容 根据不同国家进行了相应文字转换(它是基于字节流产生的)

​ 字符输入流Reader 字符输出流Writer

基类是抽象类无法创建对象,所以需要寻找对应的子类。

FileInputStream

FileOutputStream

3. 掌握使用字节流实现文件复制

字节输入流FileInputStream

构造:

FileInputStream(File file);

FileInputStream(String pathname);

常用方法:

  1. 读取一个字节数据:int read();
  2. 读取一个字节数组长度的字节数据 返回实际读取到的字节数量:int read(byte[] b);
  3. 读取输入流中从指定索引开始,指定长度的字节数据到字节数组中:int read(byte b,int offs,int len);
  4. 关流:void colse();

字节输出流FileOutputStream

构造:

FileOutputStream(File file);

FileOutputStream(String path);

FileOutputStream(File/String file,boolean append); 如果为true表示可以追加数据 而不是覆盖数据

常用方法:

  1. void write(int b); 输出一个字节
  2. void write(byte[] b); 输出一个字节数组的内容
  3. void write(byte[] b,int offs,int len); 输出一个字节数组中的指定范围的内容
  4. void close(); 关流
案例:文件的复制
/**
 * 实现文件复制 将d:/a.txt 复制到 c:/a.txt
 */
public class Test {
	public static void main(String[] args) throws IOException {
		FileInputStream fis = null;		
		FileOutputStream fos = null;
		try {
			// 1.指定数据源和输出目的地
			fis = new FileInputStream("d:/a.txt");
			fos = new FileOutputStream("c:/a.txt");
			
			// 2.读取数据
			// 临时存储读取到的数据
			byte[] buffer = new byte[1024];
			int len = 0;
			while((len = fis.read(buffer)) != -1) {
				// 3.写入数据  读取到多少写出去多少
				fos.write(buffer,0,len);
			}	
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			// 4.关流
			// 先开的后关
			if(fos != null) {
				fos.close();
			}
			if(fis != null) {
				fis.close();
			}
		}
	}
}

输入和输出处理(二)

1. 掌握基本的字符流的使用

字符流的基类

​ Reader

​ Writer

字符输入流

常用实现类

​ FileReader

构造

​ FileReader(File file);

​ FileReader(String pathname);

常用方法

​ int read(char[] buffer); 读取数据到字符数组中 返回读取的字符数

​ int read(char[] buffer,int offset,int len); 读取指定长度的字符数据到数组中 返回读取的字符数

字符输出流

​ FileWriter

构造

​ FileWriter(File file);

​ FileWriter(String pathname);

​ FileWriter(String/File pathname,boolean append); 追加数据

常用方法

​ void write(String str); 输出一个字符串

​ void write(String str,int offset,int len); 输出一个字符串的一部分

​ void write(char[] buffer); 输出一个字符数组

​ void writer(char[] buffer,int offset, int len); 输出一个字符数组的一部分

关流方法:void close(); 在try-catch中可以通过try()形式自动关流。

2. 掌握高效字符流的使用

高效字符输入流

BufferedReader

构造:

​ BufferedReader(Reader re);

常用方法:

​ String readLine(); 读取一行数据

​ 其他同普通字符输入流,但是比之更加高效。

高效字符输出流

BufferedWriter

构造

​ BufferedWriter(Writer wr);

常用方法

​ 方法基本和普通字符输出流一样,但是比之更加高效。(都是重新重写自Writer类的相关方法)

4. 掌握序列化和反序列化的实现(对象流)

读写对象数据。

序列化:将对象按照指定的规则存储到文件中。

反序列化:将文件中的数据按照指定的规则转换为对象。

序列化

ObjectOutputStream

反序列化

ObjectInputStream

public class Demo2 {
	public static void main(String[] args) {
		try (
			// 构造:ObjectInputStream(InputStream is)
			ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:/hotel.txt"));
			){
			// 反序列化
			Object obj = ois.readObject();
			Hotel hotel = (Hotel)obj;
			System.out.println(hotel);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值