目录
一、io是什么?
1.input和output:专门用来操作文件的。
二、流是什么?
1.流动的字节。
三、输入与输出的参照物
1.输入与输出的参照物是我们当前的程序。
四、File介绍
1.File在java中被称为文件类,也就是说,不管是文件还是文件夹,都是File对象。
五、File格式
1.注意:在放文件或文件夹的路径的时候,一般推荐放相对路径。
File file = new File("文件路径/文件夹路径");
六、File的常用方法
1.对象名.exists():判断文件或文件夹是否存在
File file = new File("123.txt");
System.out.println(file.exists());
2.对象名.isDirectory():判断当前的这个File对象是否是文件夹
File file = new File("123.txt");
System.out.println(file.isDirectory());
3.对象名.isFile():判断当前的File对象是否是文件
File file = new File("123.txt");
System.out.println(file.isFile());
4.对象名.length():获取当前File对象的字节长度(大小)
File file = new File("123.txt");
System.out.println(file.length());
5.对象名.createNewFile():创建一个新的文件
File file = new File("123.txt");
System.out.println(file.createNewFile());
6.对象名.delete():删除一个文件或文件夹
File file = new File("123.txt");
System.out.println(file.delete());
7.对象名.mkdir():创建一个文件夹
File file = new File("123");
System.out.println(file.mkdir());
8.对象名.getName():获取到当前文件的文件名(只获取文件名,不获取路径)
File file = new File("123.txt");
System.out.println(file.getName());
9.对象名.getPath():获取的文件的路径
// 实际上只是获取到了new一个File对象的时候,小括号中的字符串
File file = new File("123.txt");
System.out.println(file.getPath());
10.对象名.getAbsolutePath():获取到文件的绝对路径(全路径)
File file = new File("123.txt");
System.out.println(file.getAbsolutePath());
11.对象名.equals():在File类中的equals方法比较的是文件的路径,路径相同返回为true
File file = new File("123.txt");
File file2 = new File("456.txt");
System.out.println(file.equals(file2));
12.对象名.getParent():获取当前文件的相对路径的上一级目录的名字
File file = new File("123.txt");
System.out.println(file.getParent());
13.对象名.getParentFile():获取当前文件的相对路径的上一级目录的File对象
File file = new File("123.txt");
System.out.println(file.getParentFile());
14.对象名.isHidden():判断File对象是否是一个隐藏文件
File file = new File("123.txt");
System.out.println(file.isHidden());
15.对象名.lastModified():获取到File的最后修改时间
(1)最后修改时间/365/24/60/60/1000 + 1970 =当前年份
File file = new File("123.txt");
System.out.println(file.lastModified());
16.对象名.renameTo():重命名
File file = new File("123.txt");
File file2 = new File("345.txt");
file.renameTo(file2);
17.对象名.list():获取到文件夹下面的所有文件的名字列表
File file = new File("123.txt");
String[] list = file.list();
18.对象名.listFiles():获取到文件夹下面所有的File对象,返回值是一个File数组
File file = new File("123.txt");
File[] files = file.listFiles();
七、递归算法
1.递归的分类:
(1)直接递归:自己调自己;
(2)间接递归:A方法调用B方法,B方法调用C方法,C方法调用A方法;
2.递归的注意事项:
(1)递归一定要有条件限定,保证递归可以停下来,否则会发生栈内存溢出;
(2)在递归中虽然有限定条件,但是递归次数不能太多,否则也会发生栈内存溢出;
(3)构造方法,禁止递归;
3.递归和死循环的区别
(1)递归有出口,死循环没有出口;
4.递归和循环的区别
(1)递归算法:
- 优点:代码简洁、清晰、并且容易验证其正确性(必须是真正了解了算法的情况下)。
- 缺点:递归每一次运行都需要较多次的调用函数,如果调用层次比较深,需要额外的增加堆栈处理,会对执行效率有一定的影响,如果有一些代码不使用递归的话,代码会极其难看。
(2)循环算法:
- 优点:优点:速度快,结构简单。
- 缺点:缺点:并不是所有的问题都可以使用循环解决。
(3)总结 :
- 一般递归调用可以处理的算法,也通过循环去解决常需要额外的低效处理。
- 现在的编译器在优化后,对于多次调用的函数会有非常好的效率上的优化,效率未必低于循环。
八、FileInputStream
1.一般情况下,有Stream的就是字节流。
2.字符流:Reader/Writer。
3.字节输入流:FileInputStream
(1)对象名.read()
(2)read方法如果没有读到内容,会返回-1
File file = new File("F:\\Users\\Devil\\Desktop\\hash码.txt");
FileInputStream fis = new FileInputStream(file);
// 读取到第一个字节
int n = fis.read();
System.out.print((char) n);
// 通过byte数组读取整个文件
byte[] bytes = new byte[(int) file.length()];
fis.read(bytes);
System.out.println(new String(bytes));
// 通过byte数组分批次读取整个文件
byte[] bytes = new byte[16];
int n = -1;
while ((n = fis.read(bytes)) != -1){
// 通过bytes的字节数组创建字符串对象
// bytes:要转换的字节数组
// 0:偏移量,从第几个字节开始转换
// n:一共转换多少个字节
System.out.print(new String(bytes,0,n));
}