操作File常见方法:
String getName():获取文件名称
String getPath():获取文件路径
String getAbsolutePath():获取绝对路径
File getParentFile():获取上级目录文件
boolean exists():判断文件是否存在
boolean isFile() :是否是文件
boolean isDirectory():判断是否是目录
boolean delete() :删除文件
boolean mkdirs():创建当前目录和上级目录
File[] listFiles() :列出所有文件对象
ASCII编码表(英文符号有限)
-> GB2312编码表(使用两个字节一起来表示一个汉字)
-> Unicode是国际统一编码(某一个字符在全世界任何地方都是固定的)
ASCII:占一个字节,只能包含128个符号。不能表示汉字。
ISO-8859-1:也称之为latin-1,占一个字节,收录西欧语言,不能表示汉字。
GB2312/GBK/GB18030:占两个字节,支持中文。
ANSI:占两个字节,在简体中文的操作系统中ANSI 就指的是 GBK。
UTF-8:是一种针对Unicode的可变长度字符编码,是Unicode的实现方式之一,支持中文。在开发中建议使用。
UTF-8 BOM:是微软搞出来的一种编码,不要使用。
存储字母、数字、汉字:
存储字母和数字无论是什么字符集都占1个字节.
存储汉字,GBK家族占两个字节,UTF-8家族占3个字节。
不能使用单字节的字符集(ASCII、ISO-8859-1)来存储中文,否则会乱码。
注意:一定要保证编码和解码的字符相同,才能正确解码出信息。
经典案例:在表单中填写中文,为什么在服务端看到的是乱码问题。
情景分析,比如浏览器使用UTF-8编码,服务器使用ISO-8859-1编码。
此时编码和解码的字符类型不同,那么乱码就出现了。
先来分析乱码产生的原因:
//编码解码龙哥
//模拟国外服务器用的编码,没有收购中文,导致乱码
String str = "龙哥";
//先解码为二进制
byte[] bytes = str.getBytes("UTF-8");
System.out.println(Arrays.toString(bytes));
//在将二进制转为文字
String s = new String(bytes, "ISO-8859-1");
System.out.println(s);
//解决问题
//将国外浏览器解码后的文字,通过编码转为二进制,在通过utf-8解码成中文
System.out.println("========");
//将文字转为二进制
byte[] bytes1 = s.getBytes("ISO-8859-1");
String s1 = new String(bytes1, "UTF-8");
System.out.println(Arrays.toString(bytes1));
System.out.println(s1);
流向 | 字节流(单位是字节) | 字符流(单位是字符) |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
字节输入流FileInputStream,用于读取文件 字节输入流(程序) –-读取数据---- 文件
字节输出流FileOutputStream,用于写文件 字节输出流 (程序) ----写入信息 ----- 文件
需求:使用文件字节输入流进行输出操作
//作业目的:掌握输出操作
//文件源
File file = new File("src\\IO流01\\第四题\\a.txt");
//拿到文件--》数据,将数据进行输入到程序中,输入流
//管道
//将文件源里输入到程序里,通过管道文件输入流
InputStream inputStream = new FileInputStream(file);
System.out.println((char) inputStream.read());
byte[] buffer = new byte[10]; //每次十个字节
int read = inputStream.read(buffer);
System.out.println(read);
System.out.println(Arrays.toString(buffer));
System.out.println(new String(buffer));
需求:使用文件字节输入流进行输入操作
/* 作业目的:掌握输入操作*/
//文件源
File file = new File("src\\IO流01\\第四题\\a.txt");
//管道
//输出操作,将程序里的数据写入文件源,通过管道
FileOutputStream fileOutputStream = new FileOutputStream(file);
byte[] bytes = new byte[]{97,96};
fileOutputStream.write(65);
fileOutputStream.write(bytes);
String str = "你好啊";
fileOutputStream.write(str.getBytes());
fileOutputStream.close();
字符输入流Reader,用于读取文件 字节输入流(程序) –-读取数据---- 文件
字符输出流Writer,用于写文件 字节输出流 (程序) ----写入信息 ----- 文件
需求:演示字符文件输入流(FileReader)-输入操作
/*作业目的:掌握字符文件输入流(FileReader)-输入操作*/
//演示字符文件输入流
//拿到源头
File file = new File("src\\IO流01\\第四题\\a.txt");
//通过源头获取通道
FileReader fileReader = new FileReader(file);
char[] chars = new char[5];
int len = fileReader.read(chars);
System.out.println(len);
System.out.println(Arrays.toString(chars));
int len2 = fileReader.read(chars);
System.out.println(len);
System.out.println(new String(chars,0,1));
fileReader.close();
需求:演示字符文件输出流(FileWriter)-输出操作
//作业目的:掌握字符文件输出流(FileWriter)-输出操作
File file = new File("src\\IO流01\\第四题\\a.txt");
FileWriter fileWriter = new FileWriter(file);
fileWriter.write(97);
fileWriter.write("牛逼");
fileWriter.write(new char[]{'l','e'});
fileWriter.close();