Java IO(输入输出)


Java IO技术可以实现数据的持久化

流概述

什么是流:流是一组有序的数据序列,根据操作类型,可分为输入流和输出流两种。
IO流提供了一条通道程序,可以将源中的字节序列送到目的地。源和目的地可以是文件、键盘、鼠标、内存、显示器等。

输入/输出流

Java中定义了许多类专门负责各种方式的输入输出,都在java.io包中。所有输入流类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;所有输出流都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类。

Java的字符是Unicode编码,是双字节的,InputStream是用来处理字节的,并不适合处理字符文本。Reader类(字符输入流)在处理字符串时简化了编程,更适合处理字符数据。

File类

File是java.io包中唯一代表磁盘文件本身的对象,File定义了一些平台无关的方法来操作文件并获取文件信息,常用方法如下:

创建文件
File file = new File("word.txt", true)    向文件中追加内容时要加true参数(是append的),新建则不用
file.createNewFile()

获取文件信息
getName()    返回文件名
canRead()    返回boolean
canWrite()    返回boolean
exits()    返回boolean
length()    返回文件长度(longgetAbsolutePath()    返回文件绝对路径
getParent()    返回文件的父路径
isFile()    返回是否是文件
isDirectory()    返回是否是目录

文件输入输出流

FileInputStream:继承InputStream类
FileOutputStream:继承OutputStream类

常用构造方法:
FileInputStream in = new FileInputStream(String name)
FileInputStream in = new FileInputStream(File file)   可以在将文件链接输入流之前对文件进行前置分析

int len = in.read(byte byt[])    从文件中读取数据到byt数组中,若要输出可以String(byt)
out.write(byte byt[])    将byt字节数组中的数据写入文件,字节数组可通过"123".getBytes()获取

由于汉字在文件中占用两个字节,若使用字节流,很可能会出现乱码,此时使用字符流会好一些。
FileReader和FileWriter字符流对应了FileInputStream和FileOutputStream

常用构造方法:
FileReader in = new FileReader(String name)
FileReader in = new FileReader(File file)   可以在将文件链接输入流之前对文件进行前置分析

int len = in.read(char byt[])    从文件中读取数据到byt数组中,若要输出可以String(byt)
out.write(char byt[])    将byt字节数组中的数据写入文件,字节数组可通过"123".getBytes()获取

带缓存的输入输出流

缓存是一种IO性能优化方法

BufferedInputStream & BufferedOutputStream

BufferedInputStream类可以对所有InputStream类进行带缓存的包装,以达到性能优化的目的

常用构造方法:
BufferedInputStream bufferedin = new BufferedInputStream(InputStream in)    默认缓存流为32字节
BufferedInputStream bufferedin = new BufferedInputStream(InputStream in, int size)    指定缓存流大小

字节数据文件的读取过程:文件 --> InputStream --> BufferedInputStream --> 目的地
BufferedOutputStream和OutputStream输出信息完全相同,只是BufferedOutputStream有一个flush()方法将缓存区的数据强制输出完

BufferedReader & BufferedWriter

BufferedReader常用方法
read()    读取单个字符
readLine()    读取一个文本行,并将其返回为字符串;无数据则返回null
BufferedWriter常用方法
write(String s, int off, int len)    写入字符串的某一部分,先写入缓存区,若想立即写入输出流,一定要调用flush方法
flush()    刷新该流的缓存
newLine()    写入一个行分隔符

数据输入输出流

数据输入输出流允许程序从底层输入流中读取基本Java数据类型,即:读取数据时不必再关心当前数值是哪种字节
DataInputStream 和 DataOutputStream类的构造方法如下:

DataInputStream dis = new DataInputStream (InputStream in) 
DataOutputStream dos = new DataOutputStream(OutputStream out)    

DataOutputStream类提供了三种字符串写入方法

writeBytes(String s)    将字符串中每个字符的低字节内容写入,因为java中的字符是Unicode编码双字节的
writeChars(String s)    将字符串中的每个字符都写入
writeUTF(String s)    将字符串按UTF编码后的字节长度写入,然后写入每个字节的UTF编码

DataInputStream只提供了 readUTF() 方法返回字符串。因为要在一个连续的字节流中读取一个字符串,没有特殊标记就无法确定字符串长度,不知道读到哪里才停,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值