IO框架(2)
字符编码
ISO-8859-1:收录除ASCII外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。
UTF一8:针对Unicode码表的可变长度字符编码
GB2312:简体中文
GBK:简体中文、扩充
BIG5:台湾,繁体中文
当编码方式和解码方式不一致时,会出现乱码
字符流
字符流的父类(抽象类):
- Reader:字符输入流
- public int read (){}
- public int read(char[] c){}
- public int read (char[] b, int off,int len){}
- Writer:字符输出流
- public void write(int n){}
- public void write(String str){}
- public void write(char[] c){}
文件字符流
FileReader:public int read (char[] c)//从流中读取多个字符,将读到内容存入c数组,返回实际读到的字符数;如果达到文件的尾部,则返回-1。
FileWriter:public void write(String str)//一次写多个字符,将b数组中所有字符,写入输出流。
字符流复制文件不能复制图片和二进制文件
复制文件最好的方式是字节流,可以复制任何形式的文件
FileReader读取文件
package IO;
import java.io.FileReader;
//FileReader读取文件
public class Demo08 {
public static void main(String[] args) throws Exception{
//1. 创建文件字符输入流
FileReader a = new FileReader("d:\\aaa.txt");
//2. 读取
//2.1 单个读取
// int data = 0;
// while ((data=a.read())!=-1){
// System.out.print((char) data);
// }
//2.2 创建数组一次读取多个
char[] b = new char[1024];
int c = 0;
while ((c=a.read(b))!=-1){
System.out.println(new String(b,0,c));
}
//3. 关闭
a.close();
}
}
FileWriter写文件
package IO;
import java.io.FileWriter;
//FileWriter的使用
public class Demo09 {
public static void main(String[] args) throws Exception{
//1. 创建对象
FileWriter a = new FileWriter("d:\\bbb.txt",true);
//2. 写入
for (int i = 0; i < 10; i++) {
a.write("Java是C++的优化");
}
//3. 关闭
a.close();
}
}
使用FileReader和FileWriter复制文件
package IO;
import java.io.FileReader;
import java.io.FileWriter;
//使用FileReader和FileWriter复制文件 不能复制图片和其他二进制文件
public class Demo10 {
public static void main(String[] args) throws Exception{
FileReader a = new FileReader("d:\\aaa.txt");
FileWriter b = new FileWriter("d:\\ccc.txt");
int c = 0;
while ((c=a.read())!=-1){
b.write(c);
}
a.close();
b.close();
}
}
字符缓冲流
缓冲流:BufferedReader/BufferedWriter
- 高效读写
- 支持输入换行符
- 可一次写一行、读一行
BufferedReader的使用
package IO;
import java.io.BufferedReader;
import java.io.FileReader;
//使用字符缓冲流读取文件
public class Demo11 {
public static void main(String[] args) throws Exception{
//1. 创建缓冲流
FileReader a = new FileReader("d:\\aaa.txt");
BufferedReader b = new BufferedReader(a);
//2. 读取
//2.1
// char[] d = new char[1024];
// int c = 0;
// while ((c=b.read(d))!=-1){
// System.out.println(new String(d,0,c));
// }
//2.2 一行一行的读取
String line = null;
while ((line=b.readLine())!=null){
System.out.println(line);
}
//3. 关闭
b.close();
}
}
BufferedWriter的使用
package IO;
import java.io.BufferedWriter;
import java.io.FileWriter;
//BufferedWriter的使用
public class Demo12 {
public static void main(String[] args) throws Exception{
//1. 创建
FileWriter a = new FileWriter("d:\\ddd.txt");
BufferedWriter b = new BufferedWriter(a);
//2. 写入
for (int i = 0; i < 10; i++) {
b.write("Java是优秀的编程语言");
b.newLine();//写入一个换行符
}
//3. 关闭
b.close();
}
}
打印流
PrintWriter:
- 封装了print() / println()方法,支持写入后换行。
- 支持数据原样打印
package IO;
import java.io.PrintWriter;
//演示PrintWriter的使用
public class Demo13 {
public static void main(String[] args) throws Exception{
//1. 创建打印流
PrintWriter a = new PrintWriter("d:\\print.txt");
//2. 打印
a.println(97);
a.println(true);
a.println(3.14);
a.println('a');
//3. 关闭
a.close();
}
}
转换流
桥转换流:InputStreamReader/OutputStreamWriter
- 可将字节流转换为字符流。
- 可设置字符的编码方式。
package IO;
import java.io.FileInputStream;
import java.io.InputStreamReader;
//InputStreamReader的使用,可以指定使用的方法
public class Demo14 {
public static void main(String[] args) throws Exception{
//1. 创建对象
FileInputStream a = new FileInputStream("d:\\bbb.txt");
InputStreamReader b = new InputStreamReader(a,"utf-8");
//2. 读取文件
int c = 0;
while ((c=b.read())!=-1){
System.out.print((char) c);
}
//3. 关闭
b.close();
}
}
package IO;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
//OutputStreamWriter的使用,使用指定的编码
public class Demo15 {
public static void main(String[] args) throws Exception{
//1. 创建数组
FileOutputStream a = new FileOutputStream("d:\\eee.txt");
OutputStreamWriter b = new OutputStreamWriter(a,"gbk");
//2. 写入
for (int i = 0; i < 10; i++) {
b.write("我爱中国\r\n");
}
//3. 关闭
b.close();
}
}
File类
概念:代表物理盘符中的一个文件或者文件夹。
方法:
- createNewFile()//创建一个新文件
- mkdir()//创建一个新目录
- delete()//删除文件或空目录
- exists()//判断File对象所对象所代表的对象是否存在
- getAbsolutePath(//获取文件的绝对路径
- getName ()//取得名字
- getParent )//获取文件/目录所在的目录
- isDirectory()//是否是目录
- isFile()//是否是文件
- length()//获得文件的长度
- listFiles()//列出目录中的所有内容
- renameTo()//修改文件名为
package IO;
import java.io.File;
import java.util.Date;
//File类的使用(1)文件操作
public class Demo16 {
public static void main(String[] args) throws Exception{
//separator();
fileOpe();
}
//1. 分隔符
public static void separator(){
System.out.println("路径分隔符"+ File.pathSeparator);
System.out.println("名称分隔符"+File.separator);
}
//2. 文件操作
public static void fileOpe()throws Exception{
//1. 创建文件
File file = new File("d:\\file.txt");
//System.out.println(file.toString());
if (!file.exists()) {
boolean b = file.createNewFile();
System.out.println("创建结果" + b);
}
//2. 删除文件
//2.1 直接删除
//System.out.println("删除的结果:"+file.delete());
//2.2 使用JVM退出时删除
// file.deleteOnExit();
// Thread.sleep(5000);
//3. 获取文件信息
System.out.println("获取文件的绝对路径:"+file.getAbsolutePath());
System.out.println("获取路径:"+file.getPath());
System.out.println("获取名称:"+file.getName());
System.out.println("获取父目录:"+file.getParent());
System.out.println("获取文件长度:"+file.length());
System.out.println("文件创建时间:"+new Date(file.lastModified()).toLocaleString());
//4. 判断
System.out.println("是否可写:"+file.canWrite());
System.out.println("是否是文件:"+file.isFile());
System.out.println("是否隐藏:"+file.isHidden());
}
}
package IO;
import java.io.File;
import java.util.Date;
//File类的使用(2)文件夹操作
public class Demo17 {
public static void main(String[] args) throws Exception{
directoryOpe();
}
public static void directoryOpe()throws Exception{
//1. 创建文件夹
File file = new File("d:\\aaa\\bbb\\ccc");
System.out.println(file);
if (!file.exists()){
//file.mkdir();//只能创建单级目录
System.out.println("创建结果:"+file.mkdirs());//创建多级目录
}
//2. 删除文件夹
//2.1 直接删除(只能删除空目录)
//System.out.println("删除结果:"+file.delete());//只删除最底层的文件夹,也就是ccc
//2.2 推出时JVM删除
// file.deleteOnExit();
// Thread.sleep(5000);
//3. 获取文件夹的信息
System.out.println("获取绝对路径:"+file.getAbsolutePath());
System.out.println("获取路径:"+file.getPath());
System.out.println("获取文件夹名称:"+file.getName());//最底层的名称
System.out.println("获取父目录:"+file.getParent());
System.out.println("获取创建时间:"+new Date(file.lastModified()).toLocaleString());
//4. 判断
System.out.println("是否是文件夹:"+file.isDirectory());
System.out.println("是否隐藏:"+file.isHidden());
//5. 遍历文件夹
File file1 = new File("d:\\cod");
String[] file2 = file1.list();
System.out.println("========================");
for (String s:file2) {
System.out.println(s);
}
}
}