File—IO流
因为变量,数组,对象,集合这些数据容器都在内存中,一旦程序结束,或者断电,数据就丢失了。想要长久保存,就要存在文件中(File)
文件可以长久保存数据。
文件在电脑磁盘中保存,即便断电,或者程序终止,文件中的数据也不会丢失。
File类
File是Java.io.包下的类,File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)。
File其对象代表具体的文件/文件夹,只能操作文件本身,调用其提供的方法对象进行操作。
注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据。(用IO流读取数据()可以读写文件,或网络中的数据)
File对象既可以代表文件,也可以代表文件夹。
File封装的对象
绝对路径:只要带盘符的都称为绝对路径 相对路径:不带盘符的,默认是你的idea工程下直接寻找文件的。一般用来找工程下的项目文件。都称为相对路径
File file1 = new File("E:\\java\\gittecode\\Javaai\\file-io\\FileDemo1");File file2 = new File(" Javaai\\file-io\\FileDemo1");
File类提供的创建和删除文件的方法
注意:delete方法默认只能删除空文件夹,删除后的文件不会进入回收站。
File提供的遍历文件夹的方法
使用listFiles方法时的注意事项:
当主调是文件,或者路径不存在时,返回null
当主调是空文件夹时,返回一个长度为0的数组
当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回
当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
当主调是一个文件夹,但是没有权限访问该文件夹时,返回null
UTF-8字符集
是Unicode字符的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节。
英文字符,数字等之占一个字节(兼容标准ASCLL编码),汉字字符占用3个字符
ASCII字符集:只有英文,数字,符号等,占一个字节。
GBK字符集:汉字占2个字节,英文,数字占一个字节。
UTF-8字符集:汉字占3个字节,英文,数字占1个字节。
注意:1.字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码。
2.英文,数学一般不会乱码,因为很多字符集都兼容了ASCII编码。
字符集的编码,解码操作
使用程序对字符串进行编码和解码操作
对字符的编码
对字符的解码
public static void main(String[] args) throws UnsupportedEncodingException {String str = "宋可love";//byte[] bytes = str.getBytes();byte[] bytes = str.getBytes("GBK");System.out.println(bytes.length);System.out.println(Arrays.toString(bytes));//解码String s1 = new String(bytes);String s2 = new String(bytes,"GBK");System.out.println(s2);}
IO流
I指Input,称为输入流:负责把数据读到内存中去。
O指Output,称为输出流:负责写数据出去。
IO流按照流方向:分为输入流,输出流。
IO流按照流的内容:分为字节流(适合操作所有类型的文件),字符流(只适合操作纯文本文件)。
所以IO流分为四大体系:
FileInputStream(文件字节输入流)
作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中去。
注意事项:
1.使用FilelnputStream每次读取一个字节,读取性能较差,并且读取汉字输出会乱码。
2.使用FileInputStream每次读取多个字节,读取性能得到了提升,但读取汉字输出还是会乱码。
使用字节流读取中文要保证输出不乱码,可以定义一个与文件一样大的字节数组,一次性读取完文件的全部字节。
一次读取完全部文件
注意:如果文件过大,创建的字节数组也会过大,可能会引起内存溢出。
读取文本适合用字符流,字节流适合用做数据的转移,比如:文件复制
FIleOutStream(文件字节输出流)、
作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去
字节输出流如何实现写出去的数据可以换行
.write("\r\n").getBytes());