【编程语言】java--IO类基础知识

IO流
字节流:通用
字符流: 对象里面融合了编码表
四个基类
两个字节流的,两个字符流的
InputStream  OutputStream
Reader  writer
字符流:
数据的最常见体现形式:文件
那么先以操作文件为主来演示
找到操作文件的子类 FileWriter
//创建一个filewriter对象,该对象已被初始化就必须要明确被操作的文件,而且该文件会被创建在指定的目录下,如果该目录下已有同名文件,将被覆盖
其实该就是明确数据要存放的目的地
调用write方法将字符串写入到流中
flush刷新流对象中的数据,将对象刷到目的地中
close关闭流资源,但关闭之前会刷新一下内部的缓冲中的数据,和flush的区别是 flush刷新后流可以继续使用
fw.write("");
IO异常的专业处理
finally的用法  关闭资源,比如文件
对已有文件的续写 使用不同的构造方法 FileWriter("",true)//代表不覆盖已有的文件,并在已有文件的末尾处进行数据的续写
换行\r\n

定义变长数组


复制的原理将C盘的文件存储在D盘
1.在D盘创建一个文件,用于存储C盘文件中的数据
2.定义读取流和C盘文件关联
3.通过不断地读写完成数据的读写
按字符读
while((ch = fr.read()) != -1)
{
fw.write(ch);
}


fw = new FileWriter("");
while(len=fr.read(buf) != -1)
{
fw.write(buf,0,len);
}


注意 异常的处理


finally
{
if(fr != null)
  try
{
fr.close();
}
catch(IOException e)
{


}


}


day19
字符流的缓冲区
BufferReader 
BufferWriter 
缓冲区的出现是为了提高流的读写效率,创建缓冲区之前应该先有流
//创建一个字符写入流对象
FileWriter fw = new FileWriter("buf.txt");
//为了提高字符写入流的技术,加入了缓冲技术:原理:封装了数组,变成对象,只要将需要提高效率的流对象,传给缓冲区就可以
BufferWriter  bufw = new BufferedWriter(fw)
bufw.writer(“dfsf”);
只要用到缓冲区就要记得刷新
不用了bufw.close()
其实关闭缓冲区就是在关闭缓冲区中的流对象
功能1提高效率;
功能2换行:newLine()换行函数 windows\r\n  linux \n
BufferedWriter bufw = new BufferedWriter(fw)
bufw.write("abcd"+x)???


BufferedReader
//创建一个读取流对象和文件相关联
FileReader fr = new FileWriter("buf.txt')
//将其传给缓冲对象的构造函数
String s1 = bufr.readLine()
BufferedReader的readLine()方法的结束条件,是返回空值,但如果是文本中间有一行是空的,那么这个条件怎么判断,如果按照原来的判断方法,这个空行之后的数据就不能够读了,因为满足了循环中终止的条件,求解释!
返回的一行数据中的有效数据,不包括最后的换行
通过缓冲区复制一个java文件
BufferedReader bufr = null;
BufferedWriter bufw = null;
bufr = new BufferedReader() 
bufw = new BufferedWriter()


readLine方法的原理:无论是读一行还是读取多个字符,最终都是在都是使用read方法一次读一个的方法
readLine内部使用数组实现,读完单个字符把它临时存在数组里面,读到\r时不读,读到\n是认为结束,然后把这个字符串读取出来
明白这个原理后,可以自定义个一样的方法来模拟readLine方法


装饰设计模式:
BufferedReader是对FileReader功能的增强
当想要对已有的对象进行功能增强时,可以定义一个类将已有对象传入,基于已有的功能,并提供加强功能。
通常通过构造函数接受被装饰的对象,并提供更强的功能。
继承的区别:
MyReader //专门用于读取数据的类。
MyTextReader   他俩效率有点低,于是就想到了使用缓冲技术
MyMediaReader为了对他们的功能进行复写。
扩展性不好,臃肿,装饰模式更灵活,降低了类之间的关系
装饰类因为增强已有对象,具备的功能和已有对象是相同的,只不过是提供了更强的功能,所以装饰类和被装饰类通常都属于一个体系中的,装饰类和被装饰类都属于同一个父类或者接口。


从继承结构变成了组合结构。


LineNumberReader


练习模拟一个带行号的缓冲区对象


File类
将文件或文件夹封装成对象。方便对文件与文件夹的属性信息进行操作
File构造函数参数可变,也可不变


File类的常用方法
1.创建 
CreateFile()删除  createTempFile()在指定位置创建文件,如果该文件已经存在,则,不创建,返回false
和输出流不一样,输出流对象一创建就覆盖原来有的
mkdir()创建文件夹,只能创建一级目录
File dir = new File("abc")
mkdirs()创建多级目录
2.删除


boolean delete()
void deleteOnExit()在程序退出时删除指定文件


3.判断
canExecute()可执行
canRead() canWrite() compareTo() exists()文件是否存在
isDirectory()
isFile()
记住:在判断文件是否是文件或者目录是,必须先判断该文件封装的内容是否存在
isHidden();
isAbsoolute()
4.获取信息

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值