File
- FFile是java.io.包下的类,File类的对象,用于代表当前操作系统的文件(可以是文件或文件夹)。
注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据
创建对象
注意:
- File对象既可以代表文件,也可以代表文件夹。
- File封装的对象仅仅是一个路径名
绝对路径、相对路径
- 绝对路径:从盘符开始
File file1=new File("D:\\itheima\\a.txt");
- 绝对路径:不带盘符,默认直接到当前工程下的目录寻找文件
File file2=new File("模块名\\a.txt");
常用方法
1、判断文件类型,获取文件信息
2、创建文件、删除文件
注意:delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站
3、遍历文件夹
使用listFiles方法时的注意事项:
- 当主调是文件,或者路径不存在时,返回null
- 当主调是空文件夹时,返回一个长度为0的数组
- 当主调是一个有内容的文件夹时,将里面所有一级文件 和文件夹的路径放在File数组中返回
- 当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
- 当主调是一个文件夹,但是没有权限访问该文件夹时,返回null
方法递归
- 递归是一种算法,在程序设计语言中广泛应用
- 从形式上说,方法调用自身的形式称为方法递归
猴子吃桃
public class RecurisionTest4 {
public static void main(String[] args) {
//猴子吃桃
/*发(10)=1
* 公式: f(x)-f(x)/2-1=f(x+1)
* f(x)=2*f(x+1)+2*/
System.out.println(f(1));
System.out.println(f(2));
System.out.println(f(3));
System.out.println(f(4));
System.out.println(f(5));
System.out.println(f(6));
System.out.println(f(7));
System.out.println(f(8));
System.out.println(f(9));
System.out.println(f(10));
}
public static int f(int x){
if(x==10){
return 1;
}else{
return 2*f(x+1)+2;
}
}
}
字符集
编码:把字符按照指定字符集编码成字节。
解码:把字节按照指定字符集解码成字符。
标准ASCII字符集
- ASCII(American Standard Code for Information Interchange):美国信息交换标准代码,包括了英文、字符等
- 标准ASCII使用一个字节存储一个字符,首尾是0,总共可表示128个字符,对美国人来说完全够用
GBK(汉字内码扩展范围,国标)
- 汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式储存
- 注意:GBK兼容了ASCII字符集
- GBK规定:汉字的第一个字节的第一位必须是1
Unicode字符集(统一码)
- Unicode是国际组织制定的,可以容纳世界上所有文字、符号的字符集。
- 4个字节表示一个字符,占存储空间,通信效率低
UTF-8
- 是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节, 2个字节,3个字节,4个字节
- 英文字符、数字等只占一个字节(兼容标准ASCII编码),汉字字符占用三个字节
- 技术人员在开发时都应该使用utf-8编码
注意:
- 字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码
- 英文数字一般不会乱码,因为很多字符集都兼容了ASCII编码
IO流
- 用于读写数据的(可以读写文件或网络中的数据) 输入输出流
I值Input,称为输入流:负责把数据读到内存中 O指输出流:负责写数据出去
io流的分类
字节输入流:
以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流
字节输出流:
以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流
字符输入流:
以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流
字符输出流:
以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络中去的流
IO流-字节流
文件字节输入流
FileInputStream
- 作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中去。
注意事项:使用FileInputStream每次读取一个字节,读取性能较差,并且读取汉字输出会乱码;定义一个与文件一样大的字节数组,一次性读取完文件的全部字节可以保证不乱码
一次读取完全部字节
方式一:自己定义一个字节数组与被读取的文件大小一样大,然后使用该字节数组,一次读完文件的全部字节。
方式二:Java官方为InputStream提供了如下方法,可以直接把文件的全部字节读取到一个字节数组中返回
直接把文件数据全部读取到一个文件字节数组可以避免乱码,但是如果文件过大,创建的字节数组也会过大,可能引起内存溢出。
字节流适合做数据的转移;读写文本内容更适合用字符流
文件字节输出流
FileOutStream
- 作用:以内存为基准,