IO知识点总结

文件的概念

狭义的文件:

存储在硬盘上的数据,以文件为单位,进行组织;文件夹也叫做"目录",也是一种特殊的文件(文件里存储的也是文件)

这章笔记的内容都是指狭义的文件

广义的文件:

操作系统负责管理软硬件资源,操作系统往往会把这些资源统一抽象成文件进行管理-----"一切皆文件"

比如,有一个网卡,就把这个网卡抽象成一个"文件",创建了特殊的文件来表示网卡;从网卡接收数据,就读取这个文件,往网卡发送数据,就写这个文件

再比如,有一个键盘,想从键盘种读取数据,也是将键盘抽象成一个"文件"(stdin),读这个文件就能读取到用户输入的内容了

绝对路径与相对路径

绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径,完整的描述文件位置的路径就是绝对路径

路径之间使用\(反斜杠)分隔,当然/(斜杠)也可以,一般推荐使用/(斜杠)来分隔

相对路径首先需要一个"基准路径"(现在的位置),以基准路径为起点,往下继续走直到到达目标路径的表示方式

什么是缓冲区

我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 为了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写入设备中,这个区域一般称为缓冲区

但造成一个结果,就是我们写的数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,调用 flush(刷新)操作,将数据刷到设备中

File类中的文件操作

文件操作是属于操作系统层面提供的一些API,不同的操作系统提供的API是不一样的,JAVA作为一个跨平台语言,为了统一代码,就在JVM中把不同系统的文件操作API进行了封装

构造File对象:

File 对象名 = new File("路径");

根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径

File类当中的常用方法:

修饰符及返回值类型方法名说明
StringgetParent()返回 File 对象的父目录路径
StringgetName()返回 FIle 对象的纯文件名称+后缀名
StringgetPath()返回 File 对象的文件路径
StringgetAbsolutePath()返回 File 对象的绝对路径
StringgetCanonicalPath()返回 File 对象的修饰过的绝对路径
booleanexists()判断 File 对象描述的文件是否真实存在
booleanisDirectory()判断 File 对象代表的文件是否是一个目录
booleanisFile()判断 File 对象代表的文件是否是一个普通文件
booleancreateNewFile()根据 File 对象,自动创建一个空文件。成功创建后返回 true
booleandelete()根据 File 对象,删除该文件。成功删除后返回 true
voiddeleteOnExit()进程退出时,根据 File 对象,删除该文件
String[]list()返回 File 对象代表的目录下的所有文件名
File[]listFiles()返回 File 对象代表的目录下的所有文件,以 File 对象表示
booleanmkdir()创建 File 对象代表的单层目录
booleanmkdirs()创建 File 对象代表的多层目录
booleanrenameTo(File dest)传递一个File对象,进行文件改名
booleancanRead()判断用户是否对文件有可读权限
booleancanWrite()判断用户是否对文件有可写权限

文本文件与二进制文件

数据文件被分为文本文件或者二进制文件

数据在内存中以二进制的形式存储,如果不加转换的输出到硬盘,就是二进制文件

如果要求在硬盘上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件

文件内容的读写操作

把硬盘上的数据往内存上面写就是输入

把内存上的数据往硬盘上面写就是输出

文件内容的读写也叫做"流"(stream),计算机中的流其实是一种信息的转换,把文件内容的读写操作比喻成水流

java标准库在"流"的概念上,提供了一组类,完成文件内容的读写操作

读写文件分为两种:一种是字节流(按字节读和写),一种是字符流(按字符读和写)

InputStream和OutputStream是字节流的,Reader和Writer是字符流的,Scanner和PrintWriter也是字符流的

打开文件以后一定要记得close()文件,不然会出现文件资源泄露的情况!!!

InputStream:

读数据,把数据从硬盘读到内存中,InputStream 只是一个抽象类,要使用还需要具体的实现类,使用FileInputStream

修饰符及返回值类型方法名说明
intread()读取一个字节的数据,返回 -1 代表已经完全读完了
intread(byte[] b)最多读取 b.length 字节的数据到 b 中,返回实际读到的数量;-1 代表以及读完了
intread(byte[] b, int off, int len)b数组从 off 开始的位置读,读len个字节,返回实际读到的数量;-1 代表以及读完了
voidclose()关闭字节流

FileInputStream:

InputStream的具体实现类

方法名说明
FileInputStream(File file)利用 File 构造文件输入流
FileInputStream(String name)利用文件路径构造文件输入流

OutputStream:

写数据,把数据从内存写入到硬盘中,OutputStream只是一个抽象类,要使用还需要具体的实现类,使用FileOutputStream

使用OutputStream写文件的时候,只要打开文件成功,就会把文件原有内容清空

修饰符及返回值类型方法名说明
voidwrite(int b)写入一个字节的数据
voidwrite(byte[] b)将 b 这个字节数组中的数据全部写入到文件中
intwrite(byte[] b, int off, int len)将 b 这个字节数组中从 off 开始的数据写入到文件中,一共写 len 个,返回实际写的数量;-1 代表以及写完了
voidclose()关闭字节流
voidflush()重要:我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 为了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,调用 flush(刷新)操作,将数据刷到设备中。

FileOutputStream:

OutputStream的具体实现类

方法名说明
FileOutputStream(File file)利用 File 构造文件输出流
FileOutputStream(String name)利用文件路径构造文件输出流

Reader:

读数据,把数据从硬盘读到内存中,Reader 只是一个抽象类,要使用还需要具体的实现类,使用FileReader

修饰符及返回值类型方法名说明
intread()读取一个字符的数据,返回 -1 代表已经完全读完了
intread(char[] b)最多读取 b.length 字符的数据到 b 中,返回实际读到的数量;-1 代表以及读完了
intread(char[] b, int off, int len)b数组从 off 开始的位置读,读len个字符,返回实际读到的数量;-1 代表以及读完了
voidclose()关闭字符流

FileReader:

Reader的具体实现类

方法名说明
FileReader(File file)利用 File 构造文件输入流
FileReader(String name)利用文件路径构造文件输入流

Writer:

写数据,把数据从内存写入到硬盘中,Writer只是一个抽象类,要使用还需要具体的实现类,使用FileWriter

修饰符及返回值类型方法名说明
voidwrite(int b)写入一个字符的数据
voidwrite(char[] b)将 b 这个字符数组中的数据全部写入到文件中
voidwrite(String b)写入b字符串数据
intwrite(char[] b, int off, int len)将 b 这个字符数组中从 off 开始的数据写入到文件中,一共写 len 个,返回实际写的数量;-1 代表以及写完了
intwrite(String[] b,int off,int len)将b字符串从off开始的数据写入到文件中,一共写len个,返回实际写的数量;-1 代表以及写完了
voidclose()关闭字符流
voidflush()重要:我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 为了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,调用 flush(刷新)操作,将数据刷到设备中。

FileWriter:

Writer的具体实现类

方法名说明
FileWriter(File file)利用 File 构造文件输出流
FileWriter(String name)利用文件路径构造文件输出流

Scanner:

可以使用Scanner传入一个输入字节流来简化开发,Scanner是字符流的

Scanner 名字 = new Scanner(输入字节流);

PrintWriter:

可以使用PrintWriter传入一个输出字节流来简化开发,PrintWriter是字符流的

PrintWriter 名字 = new PrintWriter(输出字节流);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java中的IO操作总结(四) 前面已经把java io的主要操作讲完了 这一节我们来说说关于java io的其他内容 Serializable序列化 实例1:对象的序列化 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.Serializable; @SuppressWarnings("serial") //一个类要想实现序列化则必须实现Serializable接 class Person implements Serializable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String toString() { return "Name:" + this.name + ", Age:" + this.age; } } public class Demo { public static void main(String[] args) { String path = File.separator + "home" + File.separator + "siu" + File.separator + "work" + File.separator + "demo.txt"; Person p1 = new Person("zhangsan",12); Person p2 = new Person("lisi",14); //此处创建文件写入流的引用是要给ObjectOutputStream的构造函数玩儿 FileOutputStream fos = null; ObjectOutputStream oos = null; try { fos = new FileOutputStream(path); oos = new ObjectOutputStream(fos); //这里可以写入对象,也可以写入其他类型数据 oos.writeObject(p1); oos.writeObject(p2); } catch (IOException e) { e.printStackTrace(); } finally { try { oos.close(); } catch (IOException e) { e.printStackTrace(); } } } } 解压密码 www.jiangyea.com

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值