黑马程序员技术交流社区
标题:
【成都校区】 IO流
[打印本页]
作者:
你自己高兴就好
时间:
2019-4-11 13:53
标题:
【成都校区】 IO流
IO流
IO流
file类介绍
作用
file类是文件和目录名路径的抽象表示, 文件和目录是可以通过file封装成对象的,file封装的并不是真正存在的文件,仅仅是一个路径名,它可以存在,也可以不存在,将来我们是要通过具体的操作(其实就是调用file类中的方法)把这个路径的内容转换为具体存在的
file类的构造方法(三个) 注意:没有无参构造
1.File(String pathName)根据字符串路径创建一个File对象
2.File(String parent,String child)根据字符串父级路径和子级路径创建File对象
3.File(File parent,String child) 根据File类型父级路径和字符串子级路径创建File对象
File类的创建方法
boolean creatNewFile()创建一个新文件
boolean mkdir()创建单级目录(文件夹)
boolean mkdirs() 创建多级目录(文件夹)
File类的判断和获取方法
判断方法(三个)
public boolean isDirectory() | 测试此抽象路径名表示的File是否为目录
public boolean isFile() | 测试此抽象路径名表示的File是否为文件
public boolean exists() | 测试此抽象路径名表示的File是否存在
获取方法
public String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串
public String getPath() | 将此抽象路径名转换为路径名字符串
public String getName() | 返回由此抽象路径名表示的文件或目录的名称
public String[] list() | 返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
public File[] listFiles() | 返回此抽象路径名表示的目录中的文件和目录的File对象数组
删除功能
public boolean delete() | 删除由此抽象路径名表示的文件或目录
说明:如果要删除的目录中存在文件(包括隐藏的文件),该目录都无法被删除
绝对路径和相对路径
递归方法
介绍
以编程的角度来看,递归指的是方法定义中调用方法本身的现象
注意事项
把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解 - 递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算
递归一定要有出口。否则内存溢出 - 递归虽然有出口,但是递归的次数也不宜过多。否则内存溢出
IO流介绍和分类
I/O 输入/输出(Input/Output)
流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输
IO流的分类
按照数据的流向
输出流:写数据
输入流:读数据
按照数据类型
字节流
字节输入流 字节输出流
字符流
字符输入流 字符输出流
IO流的使用场景
如果操作的是纯文本文件,优先使用字符流
如果操作的是图片 shipping 音频等二进制文件,优先使用字节流
如果不确定文件类型,优先使用字节流,字节流是万能的流
字节流抽象基类
InputStream
这个抽象类是字节输入流的所有类的超类
OutputStream
这个抽象类是字节流输出流的所有类的超类
字节输出流
构造方法
FileOutputStream(String name):创建文件输出流以指定的名称写入文件
字节输出流写数据的三种方法
void write(int b) 将指定的字节写入此文件输出流 一次写一个字节数据
void write(byte[] b):将 (b.length字节从)指定的字节数组写入此文件输出流 【这里常用到的将字符串转换成字节数组(使用个体bytes()方法 返回字节数组),再将字节数组写入字节输出流】
void write(byte[] b, int off, int len):将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流
字节流写数据的两个小问题
1.字节流写数据如何实现换行
Windows:\r\n
linux:\n
mac:\r
字节流写数据如何实现追加写入
需要更改创建字节输出流对象的参数 public FileOutputStream(String name,boolean append) 如果第二个参数为true,则字节将写入文件的末尾而不是开头, 就实现了数据的追加
字节流写数据加异常处理
异常处理的格式
try-catch-finally try{ 可能出现异常的代码; }catch(异常类名 变量名){ 异常的处理代码; }finally{ 执行所有清除操作; }
finally特点 - 被finally控制的语句一定会执行,除非JVM退出 这样可以把释放资源的代码写在finally中,就会被执行了 同时需要注意将字节输出流对象放在try外面定义,扩大作用域范围
一般情况下这种异常处理还是使用throws处理,但是trycatch方法也要知道
字节输入流
构造方法
FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream ,该文件由文件系统中的路径名name命名
字节输入流读取数据的步骤
1.创建字节输入流对象
2.调用字节输入流对象的读数据方法
读取数据一次读取一个字节
read()方法调用,返回的是一个int类型的数值,该数值表示的是读取到的字节长度,在这里表示的是一个字节
读取s数据一次读取一个字节组
read(字节数组 b[]),返回的是读入缓冲区的总字节数,也就是实际的读取字节个数,用int len表示
通用格式为: byte[] bytes=new byte[1024]; int len; whie((len=fis.read(bytes)!=-1){ 循环体 }
释放资源
IO流就是用来处理设备间数据传输问题的。创建的应用:文件复制;文件上传,文件下载
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2