递归,File类概述,字节输出输入流和字符输出输入流

File类概述

该类位于java.io包中。

该类是文件和路径名的抽象表示形式。
java把电脑中的文件和文件夹封装为了一个File类,我们可以使用File类对文件和文件夹进行操作,我们可以使用File类的方法:
创建一个文件或文件夹
删除文件或文件夹
获取文件或文件夹
判断文件或文件夹是否存在
对文件夹进行遍历
获取文件的大小
File类是一个和系统无关的类,任何操作系统都可以使用这个类的方法。

File类的静态成员变量

static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
static char pathSeparatorChar 与系统有关的路径分隔符。

static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
static char separatorChar 与系统有关的默认名称分隔符。

路径分隔符:Windows为;分号,linux为:冒号。
名称分隔符:Windows为\反斜杠,linux为/斜杠。

因为每个系统都不同,所以程序中的操作路径不能固定。

绝对路径和相对路径

绝对路径:是指一个完整的路径,从盘符开始。例如:C:\Windows\System32

相对路径:是指一个简化的路径,相对于当前项目的根目录。如果使用当前项目的根目录,路径可以简化书写。例如:C:\Windows\System32\a.txt 可以简化为1.txt。(可以省略项目的根目录。)

注意:
1.路径不区分大小写。
2.路径中的文件名称分隔符,在操作时需要写两个,因为存在转义。

File类的构造方法

1.File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新的File实例。
参数:
String pathname:字符串的路径名称
路径可以是相对路径可以是绝对路径。
路径可以存在,也可以不存在。
创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况。

2.File(String parent,String child) 根据parent路径名字符串和child路径名字符串创建一个新File实例。
参数:
String parent:父路径
String chile:子路径。
相比上一个的好处:
父路径和子路径可以单独书写,使用灵活,父子路径都可以变化。

3.File(File parent,String child) 根据parent抽象路径名和child路径名字符串创建一个新的File实例。
参数:
String parent:父路径
String chile:子路径。
相比上一个好处:
父路径和子路径可以单独书写,使用灵活,父子路径都可以变化。
父路径是File类型,可以使用File类的方法对路径进行一些操作,再使用路径创建对象。

File类常用方法

获取功能的方法

public String getAbsolutePath() 返回此File的绝对路径名字符串。
获取构造方法中传递的路径,无论路径是绝对的还是相对的,都返回绝对路径。

public String getPath() 返回此File的路径名字符串。
获取构造方法中传递的路径,是什么就返回什么。

public String getName() 返回由此File表示的文件或目录的名称。
获取的就是构造方法传递路径的结尾部分(文件或文件夹)。

public long length() 返回由此File表示的文件的长度。
获取的是构造方法指定的文件的大小,以字节为单位。
注意:
1.文件夹是没有大小概念的,不能获取文件夹的大小。
2.如果构造方法中给出的路径不存在,那么length返回0。

判断功能的方法

public boolean exists() 此File表示的文件或目录是否存在。存在true,不存在false。

public boolean isDirectory() 此File表示的是否为目录,是true,不是false。

public boolean isFile() 此File表示的是否为文件,是true,不是false。
注意:
以上两个方法的使用前提是路径必须存在,否则都返回false。

创建删除功能的方法

public boolean createNewFile() 当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
创建文件的路径和名称在构造方法中给出(构造方法的参数)
返回值:布尔值
true:文件不存在,创建文件,返回true。
false:文件存在,不会创建,返回false。
注意:
1.此方法只能创建文件,不能创建文件夹。
2.创建文件的路径必须存在,否则会抛出IOException异常。

public boolean mkdir() 创建单级文件夹
public boolean mkdirs() 既可以创建单级文件夹,也可以创建多级文件夹。
创建文件夹的路径和名称在构造方法中给出(构造方法的参数)
返回值:布尔值
true:文件夹不存在,创建文件夹,返回true。
false:文件夹存在,不会创建,返回false。构造方法中给出的路径不存在返回false。
注意:
1.此方法只能创建文件夹,不能创建文件。

public boolean delete() 删除由此File表示的文件或目录。
此方法可以删除构造方法路径中给出的文件或目录。
返回值:布尔值
true:文件或文件夹删除成功,返回true。
false:文件夹中有内容,不会删除返回false。构造方法中路径不存在返回false。
注意:
delete方法是直接在硬盘删除文件或文件夹,不进入回收站,所以删除要谨慎。

遍历目录功能的方法

public String[] list() 返回一个String数组,表示该File目录中的所有子文件或目录。
public File[] listFiles() 返回一个File数组,表示该File目录中的所有子文件或目录。

注意:
这两个方法遍历的是构造方法中给出的目录,如果构造方法给出的目录的路径不存在或不是一个目录,都会抛出空指针异常。

递归的概念

递归:方法自己调用自己
递归的分类:直接和简介递归。
直接递归:方法自己调用自己。
间接递归:A方法调用B方法,B方法调用C方法,C方法调用A方法。

注意:
1.递归要有结束条件,无限制递归会导致栈溢出。
2.递归次数太多也会导致栈溢出。

使用前提:
当调用方法的时候,方法的主体不变,每次调用方法的参数不同,可以使用递归。

IO概述

什么是IO:数据的传输可以看成是一种数据的流动,按照流动的方向,以内存为基准,分为输入input和输出output,即流向内存是输入流,流出内存的是输出流。

java中IO操作主要是指使用java.io包下的内容,进行输入输出操作。

IO的分类:
根据数据点额流向分为:输入流和输出流
输入流:把数据从其他设备上读取到内存中的流。
输出流:把数据从内存中写入到其他设备上的流。

格局数据的类型分为:字节流和字符流
字节流:以字节为单位,读写数据的流。
字符流:以字符为单位,读写数据的流。

顶级父类:

输入流输出流
字节流字节输入流
InputStream
字节输出流
OutputStream
字符流字符输入流
Reader
字符输出流
Writer

字节流

一切皆为字节:一切文件数据在存储时,都是以二进制数字的形式保存的,传输时也是如此,所以字节流可以传输任意文件数据,在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据。

字节输出流(OutputStream)

java.io.OutputStream:字节输出流,此抽象类是表示输出字节流的所有类的超类。

它定义了一些子类共性的成员方法:

public void close()  关闭此输出流并释放与此流相关联的任何系统资源。

public void flush()  刷新此输出流并强制任何缓冲的输出字节被写出

public void write(byte[] b)  将b.length字节从指定的字节数组写入此输出流。

public void write(byte[] b,int off,int len)  从指定的字节数组中写入len字节,从偏移量off开始输出到此输出流。

public abstract void write(int b)  将指定的字节输出流。

java.io.FileOutputStream extends OutputStream
FileOutputStream:文件字节输出流。
作用:把内存中的数据写入到硬盘的文件中。

构造方法:

FileOutputStream(String name)  创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputStream(File file)  创建一个向指定File对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name,boolean append) 创建一个向具有指定name 的文件中写入数据的输出文件流。
FileOutputStream(File file,boolean append)  创建一个向指定File对象表示的文件中写入数据的文件输出流。

参数:写入数据的目的地
String name:目的地是一个文件的路径。
File file:目的地是一个文件
boolean append:是否续写,为true则续写,否则创建新文件覆盖原文件重写。

构造方法的作用:
1.创建一个FileOutputStream对象
2.会根据构造方法中传递的文件或者文件路径,创建一个空文件
3.会把FileOutputStream对象指向创建好的文件。

字节输出流的使用步骤:
1.创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
2.调用FileOutputStream对象中的方法write(),把数据写入到文件中
3.释放资源。

写数据的时候,会把10进制的整数,转换为二进制的整数。
任意的文本编辑器都会在打开文件的时候查询编码表,把字节转换为字符表示,0-127会查询ASCII表,其他值会查询系统默认码表。

写换行符:每个系统的换行符不同,windows为/r/n,linux为/n,mac为/r,换行符也是字符串,所以需要调用字符串的getBytes()方法转换为字符数组。

字节输入流(InputStream)

java.io.InputStream:抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。

它定义了字节输入流的基本共性功能方法:

public void close():关闭此输入流并释放与此流相关联的任何系统资源。

public abstract int read():从输入流读取数据的下一个字节。

public int read(byte[] b):从输入流中读取一些字节数,并将它们存储到字节数组b中。

java.io.FileInputStream extends InputStream
FileInputStream:文件字节输入流。
作用:把硬盘中的数据写入到内存中。

构造方法:

FileInputStream(File file)  通过打开一个到实际文件的链接来创建一个流,该文件通过文件系统中的File对象file指定。

FileInputStream(FileDescriptor fdObj)  通过使用文件描述符fdObj创建一个流,该文件描述符表示到文件系统中某个实际文件的现有链接。

FileInputStream(String name)  通过打开一个到实际文件的连接来创建一个流,该文件通过文件系统中的路径名name指定。

参数:
String name:文件的路径
File file:文件

构造方法的作用:
1.会创建一个FileInputStream对象
2.会把FileInputStream对象指向构造方法中要读取的文件。

字节输入流的使用步骤:
1.创建FileInputStream对象,构造方法中绑定要读取的数据源
2.使用FileInputStream对象中的方法read,读取文件
3.释放资源

read方法读取到文件末尾会返回-1。

读取多个字节时,字符数组的长度一般定义为1024或其整数倍。

在同时存在输入和输出流时,先关闭输出流,后关闭输入流。

字符流

当使用字节流读取文本文件时,可能会有小问题,就是遇到中文字符时,可能会乱码的问题,那是因为一个中文字符可能占用多个字节存储,所以java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。

字符输出流(Writer)

java.io.Writer抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。

它定义了一些子类共性的成员方法:

public void write(int c)  写入单个字符

public void write(char[] cbuf)  写入字符数组

public abstract void write(char[] cbuf,int off ,int len)  写入字符数组的某一部分

public void write(String str)  写入字符串

public void write(String str,int off ,int len)  写入字符串的某一部分

public void flush()  刷新该流的缓冲

public void close()  关闭此流,但是要先刷新它

java.io.FileWriter extends OutputStreamReader extends Writer
FileWriter:文件字符输出流。
作用:把内存中字符数据写入到文件中

构造方法:

FileWriter(File file)  根据给定的File对象构造一个FileWriter对象。

FileWriter(File file,boolean append)  根据给定的File对象构造一个FileWriter对象。

FileWriter(FileDescriptor fd)  构造与某个文件描述符相关联的FileWriter对象。

FileWriter(String fileName)  根据给定的文件名构造一个FileWriter对象。

FileWriter(String fileName,boolean append)  根据给定的文件名以及指示是否附加写入数据的boolean值来构造FileWriter对象。

参数:
String fileName:文件的路径
File file:文件
boolean append:是否续写,为true则续写,否则创建新文件覆盖原文件重写。

FileReader构造方法的作用:
1.创建一个FileWriter对象
2.会根据构造方法中传递的文件或文件路径,创建文件
3.会把FileWriter对象指向创建好的文件

字符输出流的使用步骤:
1.创建FileWriter对象,构造方法中绑定要写入数据的目的地
2.使用FileWriter中的方法write,把数据写入到内存缓冲区中(存在字符转字节的过程)
3.使用FileWriter中的方法flush,把内存缓冲区中的数据刷新到文件中
4.释放资源(会把内存缓冲区中的数据刷新到文件中)。

flush方法和close方法的区别:
flush:刷新缓冲区,流对象可以继续使用,没有关闭
close方法:先刷新缓冲区,然后通知系统释放资源,流对象不可以再被使用了。

字符输入流(Reader)

java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。

它定义了一些子类共性的成员方法:

public void close() : 关闭此流并释放与此流相关联的任何系统资源

public int read() : 从输入流读取一个字符

public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组cbuf中。

java.io.FileReader extends InputStreamReader extends Reader
FileReader:文件字符输入流。
作用:把硬盘中的数据以字符的方式写入到内存中。

构造方法:

FileReader(File file)  在给定从中读取数据的File情况下创建一个新FileReader。

FileReader(FileDescriptor fd)  在给定从中读取数据的FileDescriptor的情况下创建一个新FileReader。

FileReader(String fileName)  在给定从中读取数据的文件名的情况下创建一个新FileReader。

参数:
String fileName:文件的路径
File file:文件

FileReader构造方法的作用:
1.创建一个FileReader对象
2.会把FileReader对象指向要读取的文件

字符输入流的使用步骤:
1.创建FileReader对象,构造方法中绑定要读取的数据源
2.使用FileReader对象中的方法read读取文件
3.释放资源

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值