java:FILE类和IO流

FILE类

文件介绍

通过程序将数据放在硬盘中长久保存的途径

FILE类

代表一个文件或者目录,通过File类的方法可以获取文件的大小,判断文件是否存在或者创建文件和文件夹

重写了toString,直接打印对象会输出地址

注意:File对象只能对文件操作不能操作文件里的内容
File对象的创建
构造器

创建对象时,对应的文件可以存在也可以不存在

public File(String pathname) 
//根据文件路径创建文件对象
public File(String parent,String child)
//根据父路径和子路径创建文件对象
public File(File parent,String child)
//根据父路径对应文件对象和子路径名字创建文件对象

linux系统中

File f1 = new File("D:/resourse/ab.txt");

Windows系统中

File f1 = new File("D:\\resourse\\ab.txt")

通过File类中的separator()静态方法可以在不同操作系统中返回对应分隔符

所以可以编写跨平台的文件目录

File f1 = new File("D:"+File.separator+"resource"+File.separator+"ab.txt");
常用方法
public boolean exists()
//判断当前文件对象对应的文件路径是否存在,存在返回true
public boolean isFile()
//判断当前文件对象指代的是否是文件,是文件返回true
public boolean isDirectory()
//判断当前文件对象指代的是否是文件夹,是文件夹返回true
public String getName()
//获取文件的名称(包含后缀)
public long length()
//获取文件的大小,返回字节个数
public long lastModified()
//获取文件的最后修改时间
public String getPath()
//获取创建文件对象时,使用的路径
public String getAbsolutePath()
//获取绝对路径
public boolean delete()
//删除文件或目录(目录下有文件不能删除)
public boolean mkdir()
//创建路径对应的目录
public boolean mkdirs()
//创建路径对应的目录(包含需要但不存在的父目录)
public boolean createNewFile()
//创建对象对应路径下不存在的文件,创建成功返回true
public boolean renameTo(File dest)
//将文件对象名字改成dest的名字

文件路径

windows中使用\作为目录分隔符

但java中\为转义字符

所以在目录中应该使用两个

\\

来表示目录的分隔符(正则同理)

但linux或mac所需的正斜杠/不需要考虑这么多

绝对路径和相对路径

绝对路径

从根目录开始的完整路径

相对路径

相对于当前工作路径的路径

在IDEA中开发项目时,工作目录通常为项目的根目录,即项目文件夹所在的路径

文件遍历

一级文件名称:目录下的子文件和子目录(不包含子目录的子文件和子目录)名称

一级文件对象:目录下的子文件和子目录(不包含子目录的子文件和子目录)对象

当参数为文件或不存在时,返回null

空文件夹返回空数组

隐藏文件也能被返回,但对无权限访问的文件返回null

public String[] list()
//获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回
public File[] listFiles()
//获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回

递归

递归将方法分解为更小的子问题,直到终止递归

递归需要一个出口,不然会无限循环

递归实现文件遍历

search(f,filename)//查找方法 f参数为目录,filename为要找的文件名
1,获取f下所有一级文件对象
2,遍历这些文件对象
3,如果文件为所要找的则输出文件路径
4,如果文件对象中有文件夹则对文件夹继续调用search()方法递归遍历
5,当这个目录为空或者目录不存在时退出递归

文件遍历-队列

采用非递归算法进行文件遍历

使用队列,可以选择LinkedList

while遍历队列直到队列为空

判断队列中取出的元素是目录还是文件

如果为目录,取出目录中文件再装入队列

如果为文件直接进行判断

IO流

File类只能操作文件,但不能操作文件中的内容,而IO流就可以直接对文件中的数据进行直接操作

JAVA IO(input/output)是JAVA编程语言中用于处理输入输出的API

提供了一组类和接口,用于读取和写入数据

包括文件网络和控制台等

IO流的分类

按流向分为输入流和输出流:

请添加图片描述

输入流:

用于从外部数据源(文件/网络)读取数据到程序中

输出流:

用于将程序中的数据输出到外部目标(文件/网络)

按类型分为字节流和字符流:

请添加图片描述

字节流:以字节为单位进行读写操作,可以处理所有数据

在操作中文时可能会出现乱码

字节输入流:用于从外部数据源读取字节数据

字节输出流:用于将字节数据输出到外部目标

字符流:以字符为单位进行读写操作,适合处理文本数据

支持中文

字符输入流:用于从外部数据源读取字符数据

字符输出流:用于将字符数据输出到外部目标

IO流体系

字节流
InputStream(字节输入流):

所有字节输入流的基类,提供了读取字节的基本方法

FileInputStream:用于从文件中读取字节数据

OutputStream(字节输出流):

所有字节输出流的基类,提供了写入字节的基本方法

FileOutputStream:用于将字节数据接入文件

字符流
Reader(字符输入流):

所有字符输入流的基类,提供了读取字符的基本方法

FileReader:用于从文件中读取字符数据

Writer(字符输出流):

所有字符输出流的基类,提供了写入字符的基本方法

FileWriter:用于将字符数据写入文件

IO流的体系

在Java.io包下

请添加图片描述

字节输入流操作InputStream

一个用于从文件或数据源中读取字节数据的抽象类

通常使用其子类FileInputStream类

主要功能是从数据源中读取字节数据,可以逐个字节读入,也可以一次读取多个

构造器

字节输入流指向的文件不存在会发生异常

public FileInputStream(File file)//创建字节输入流管道连通源文件
public FileInputStream(String pathname)//同上
常用方法

注:数组读写的效率要远远高于字节读写

public int read()
//每次读取一个字节返回,如果没有数据可读会返回-1
public int read(byte[] buffer)
//每次用一个字节数组去读取数据,返回字节数组读取了多少个字节,如果没有数据可读会返回-1
//数组长度决定读取个数
//把读到的数据存到数组中,可以直接用String接收
//String s = new String(new byte[5]);
//返回读到的数据个数,没读到返回-1

字节输出流操作OutputStream

用于将数据写入到输出源(文件/网络)的流,是一个抽象类

通常使用其子类FileOutputStream类

构造器

如果输出流连通的文件不存在会自动创建一个

append默认为false,代表不追加写数据(会清空原有数据)

append为true代表在原有数据后追加数据

public FileOutputStream(File file)
//创建字节输出流管道和源文件对象连通
public FileOutputStream(String filepath)
//创建字节输出流管道和源文件对象连通
public FileOutputStream(File file,boolean append)
//创建字节输出流管道和源文件对象连通,可以追加数据
public FileOutputStream(String filepath,boolean append)
//创建字节输出流管道和源文件对象连通,可以追加数据
常用方法

如果需要写入字符串,可以使用字符串的getBytes()方法转成字节数组

public void write(int a)
//写出一个字节
public void write(byte[] buffer)
//写出一个字节数组
public void write(byte[] buffer,int pos,int len)
//写出一个字节数组的一部分,pos=开始索引,len=长度
public void close() throws IOException
//关闭流

资源释放

关流,断开流对象和文件之间的关联

1,对象.close()

直接关闭流

2,捕获(不推荐)

将文件处理语句放入try中捕获

将释放语句.close()放入finally中释放

在finally中需要做空指针判断和IO异常捕获

3,JDK7后处理方法

使用try-with-resource

只有实现了AutoCloseable接口的对象才能放入try中

try(资源对象1;资源对象2){
	可能会出现问题的代码
}catch(异常类型 变量名){
	处理异常的方案
}

自动释放资源,无需close

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值