输入输出--Java IO流

1.什么是I/O?
(1)Java IO即Java 输入输出系统
(2)在JDK1.4之后,为了提高Java IO的效率,Java又提供了一套新的IO,Java New IO简称Java NIO。它在标准java代码中提供了高速的面向块的IO操作。
2.流
1.流的介绍
在Java IO中,流是一个核心的概念。流从概念上来说是一个连续的数据流。你既可以从流中读取数据,也 可以往流中写数据。流与数据源或者数据流向的媒介相关联。在Java IO中流既可以是字节流(以字节为单位进 行读写),也可以是字符流(以字符为单位进行读写)。在JAVA中把不同的输入/输出源(键盘、文件、网络等) 抽象表述为“流”。
2.流分为输人与输出流
(1)输入流:
①字节输入流:InputStream
②字符输入流:Reader
(2)输出流:
①字节输出流:OutputStream
②字符输出流:Writer
3.在Java中,InputStream和OutputStream是java.io包中所有字节流API类的基类
4.在Java中,Reader和Writer是java.io包中所有字符流API类的基类
5.API规律:由这四个抽象类派生出来的子类的名称是以其抽象父类名称为后缀,以功能为前缀。所以判定 某一个具体的流的父类,就找出它的结尾的类名是什么,它的抽象父类就是什么
6.字符流产生的背景:
1.相同的字符到不同的编码表中对应的二进制数字 (也就是码值) 不一样。
2.所以相同的码值 (实际为二进制数字) 对应到不同的码表可能会因为某个码表不存在该码值而出现查找不到对应字符的情况,这样就会出现乱码。

7.字符流的诞生:
为了解决乱码的问题,Java在字节流的基础上融合了编码表,从而产生了字符流。这样使用字符流直接处理文本数据是非常方便的。
字节流是通用的,字符流是基于字节流的

3.file文件
1.file文件的定位:路径(文件夹+文件名)
2.文件:文件名 后缀(默认的打开方式) 文件内容
3.file属于一个类,它的构造函数:
File(String pathname)
根据一个路径得到File对象
File(String parent, String child)
根据一个目录和一个子文件/目录得到File对象
File(File parent, String child)
根据一个父File对象和一个子文件/目录得到File对象
4.创建一个File类型对象,路径分为相对路径和绝对路径,判断该对象对应的文件/路径在电脑中是否存在
exists()用于判断File对象是否存在
File f1 = new File(相对路径/绝对路径);
System.out.println(f1.exists());

File f2 = new File(父路径,子路径/文件名);
System.out.println(f2.exists());

File f3 = new File(File类型对象,子路径/文件名);
System.out.println(f3.exists());
5. file类的几种创建方式:
boolean mkdir()
创建文件夹,如果存在这样的文件夹,就不创建了,路径不存在返回flase
boolean mkdirs()
创建文件夹,如果父文件夹不存在,会帮你创建出来
boolean createNewFile()
创建文件,路径不存在抛出异常,如果存在这样的文件,就不创建了
6. 注意事项:若创建文件或者文件夹忘了写盘符路径,那么默认在项目路径下
需求:指定路径的File对象,mkdir创建文件夹,路径存在和路径不存在
需求:指定路径的File对象,mkdirs创建文件夹,路径存在和路径不存在
需求:指定路径的File对象,createNewFile创建文件,路径存在和路径不存在
7.file类的获取功能:
String getAbsolutePath()
获取文件的绝对路径
File getAbsoluteFile()
获取文件的绝对路径
String getPath()
获取文件的相对路径
String getName()
获取名称
String[] list()
获取指定目录下的所有文件或者文件夹的名称数组
File[] listFiles()
获取指定目录下的所有文件或者文件夹的File数组
File[] listRoots()
获取电脑中的盘符
String[] list (FilenameFilter filter)
获取指定目录下被FilenameFilter筛选后的文件,返回String类型数组
注意:FilenameFilter实现类中的accept(File file,String name)中两个参数,第一个参数为File对象可以表示为一个路径,第二个参数为该路径下的文件名
File[] list (FilenameFilter filter)
获取指定目录下被FilenameFilter筛选后的文件,返回String类型数组
File[] listFiles (FileFilter filter)
获取指定目录下被FileFilter筛选后的文件,返回File类型数组
注意:FileFilter实现类中的accept(File file)只有一个参数,该参数指代的是一个文件的路径,和FilenameFilter中的区别在于,FilenameFilter中两个参数合在一起才能指定一个文件,而FileFilter则没有将路径和文件名分开,通过观察两个接口的名称也能看出二者的区别
8. file类的判断功能:
(1)为什么需要存在判断方法:在IO的所有操作中,大家可以发现针对文件和文件夹的操作是不一样的,最明显的是API都不同
(2)API:
boolean exists()
判断路径表示的文件或者文件夹是否存在
boolean isDirectory()
判断当是否是一个文件夹
boolean isFile()
判断当前是否是一个文件
9.file的删除功能:
boolean delete()
若是文件就直接删除,若是文件夹则必须是空文件夹。多重目录不能删除
4.递归
1.递归:本质上就是方法自己调用自己,但是递归不能无限制去调用,因为递归调用是无限次调用,而电脑内存是有限的,所以递归的使用需要慎重
2.斐波拉契数列,假设有函数f(x)且f(0)=0、f(1)=1,第x个值公式为f(x)=f(x-1)+f(x-2),根据以上给出的条件实现x为任意数时的值的代码实现
public static int f(int x){
if (x == 0) {
return 0;
}else if (x == 1) {
return 1;
}
return f(x-1)+f(x-2);
}
注意:1. 每一次方法的执行都是独立
2. 方法出口,不然程序会形成死循环

1.IO流分类
输入输出--Java IO流_第1张图片

1.节点流:又叫低级流 处理流:高级流、包装流
2.字节流和字符流的区别在于数据处理单位的不同。
①字节流:一次读或写8位二进制。字节流关于输入(InputStream)和输出(OutputStream)的基类有两个
②字符流:一次读或写16位二进制。字符流关于输入(Reader)和输出(Writer)的基类有两个
3.java中操作流的类分类:
4.整体API分类
输入输出--Java IO流_第2张图片

5.按照功能进行API分类:
输入输出--Java IO流_第3张图片
2.字节流
1.字节输入流【FileInputStream】
字节输入流读取文件的实现步骤:
1.关联实体文件,创建FileInputStream对象
2.调用read方法
3.关闭输入流【close】
2.字节输出流【FileOutputStream】
字节流输出数据的代码实现步骤:
1.关联实体文件,创建输出流对象
2.调用write方法
3.关闭输出流
3.字符流
1.字符输入流【FileReader】
字符输入流读取文件的实现步骤:
1.关联实体文件,创建FileReader对象
2.调用read方法
3.关闭输入流【close】
2.字符输出流【FileWriter】
字符流输出数据的代码实现步骤:
1.关联实体文件,创建输出流对象
2.调用write方法
3.关闭输出流
注意事项:
如果输出的文件路径不存在,则抛出异常
如果输出的文件不存在,则自动创建新的文件
如果输出流对象没有设置追加,且输出路径和文件是一致的,则会覆盖前次的输出内容
4.转换流
1.概念介绍:
电脑中任何数据都是以二进制形式存在的,文件被读取显示通过字节流读取然后转换为字符流显示,若需要将数据写入文件中,那么数据最终在文件中写入的是二进制形式,所以可以显示指定二进制流关联文件,字符流转换为字节流
2.字节流转字符流【InputStreamReader】
字节流转成字符流的步骤:
1.准备一个字节流
2.将字节流转成字符流输出
3.关闭流
3.字符流转字节流【OutputStreamWriter】
字符流转字节流步骤:
1.准备一个字符流
2.将字符流转换为字节流
3.关闭流
注:close()关闭流资源,先开的后关,后开的先关

你可能感兴趣的:(输入输出--Java IO流)