目录
File类
构造
1.File(String pathname): 给定文件路径(绝对路径/ 相对路径)封装成file对象
2.File(String parent, String child): 通过父路径名和子路径名, 创建file对象
3.File(File parent, String child): 通过父文件和子路径名, 创建file对象
File f1 = new File("D:\\Pro\\File\\HelloWorld.txt");
File f2 = new File("D:\\Pro\\File","HelloWorld.txt");
File f3 = new File("D:\\Pro\\File")
File f4 = new File(f3,"HelloWorld.txt");
常用方法
路径相关
1.public String getAbsolutePath(): 获取绝对路径
File f = new File("D:\\Pro\\File\\a.txt");
String abs = f.getAbsolutePath();
System.out.println("该文件的绝对路径是:"+abs);
2.public String getPath(): 获取封装时的路径
String path = f.getPath();
System.out.println("该文件封装时的路径是:"+path);
3.public String getName(): 获取最末的文件或者文件夹名
String name = f.getName();
System.out.println("该文件的名字是:"+name);
4.public String getParent(): 获取父路径
String parentName = f.getParent();
System.out.println("该文件的父文件名是:"+parentName);
5.public File getParentFile(): 获取父路径并封装成file
File parentFile = f.getParentFile();
System.out.println("该文件的父文件封装成file对象:"+parentFile);
判断
6.public boolean exists(): 判断路径是否真实存在
File fileOne = new File("D:\\Pro\\File\\HelloWorld.txt");
System.out.println("fOne存在吗:"+fileOne.exists());
7.public boolean isDirectory(): 判断是否是文件夹(不是文件夹也可能不存在)
System.out.println("fOne是文件夹吗:"+fileOne.isDirectory());
8.public boolean isFile(): 判断是文件(不是文件也可能不存在)
System.out.println("fOne是文件吗:"+fileOne.isFile());
创建
9.public boolean createNewFile(): 创建一个新的空文件
//创建文件 父路径必须存在 不然报异常
File file = new File("D:\\Pro\\File\\a");
boolean newFile = file.createNewFile();
System.out.println(newFile);
10.public boolean mkdir(): 创建单级文件夹
//创建文件夹 父路径必须存在 不然返回false
File file1 = new File("D:\\Pro\\File\\a\\b");
boolean mkdir = file1.mkdir();
System.out.println(mkdir);
11.public boolean mkdirs(): 创建多级文件夹
//中间可以有不存在的文件夹, mkdirs自动创建补齐
File file1 = new File("D:\\Pro\\File\\a\\b\\c");
boolean mkdirs = file1.mkdirs();
System.out.println(mkdirs);
删除
12.public boolean delete(): 删除文件或删除没有子文件的文件夹
//删除的内容无法在回收站找回
//若file是文件夹且文件夹中还有子文件或者空文件夹, 则删除不成功
boolean delete = file.delete();
System.out.println(delete);
遍历
13. public file[] listFiles(): 将文件夹中的直系文件封装成数组返回, 不包括file文件夹
当file是文件时 files==null , 当file是空文件夹时 files.length==0
File[] files = file.listFiles();
//一般搭配遍历使用
IO流
分类
1.输入流 和 输出流
针对内存来说的输入输出(读取,写入)
2.字节流 和 字符流
任何文件都可以使用字节流读取写入, 只有纯文本文件才能使用字符流读取写入
字节输出流
构造方法
1.FileOutputStream(File file): 封装file进去,如果存在清空文件内容, 不存在则创建一个文件
2.FileOutputStream(String path): 封装string底层转成file,如果存在清空文件内容, 不存在则创建一个文件
//输出流的创建 构造 封装一个file 或者 传入一个string底层封装成file
//如果存在, 清空文件内容,并绑定 不存在 则创建该文件 并绑定
FileOutputStream fos1 = new FileOutputStream(new File("io\\hello.txt"));
FileOutputStream fos2 = new FileOutputStream("io\\src\\com\\io\\world.txt");
3.FileOutputStream(File file,boolean append): 默认append是false,append为true则不清空原文件内容, 追加内容到文件中
4.FileOutputStream(String path,boolean append): 默认append是false,append为true则不清空原文件内容, 追加内容到文件中
FileOutputStream fos3 = new FileOutputStream(new File("io\\hello.txt"),true);
FileOutputStream fos4 = new FileOutputStream("io\\src\\com\\io\\world.txt",true);
写入方法
1.public void write(int i): 一次一个字节的写入
FileOutputStream fos1 = new FileOutputStream(new File("io\\hello.txt"));
fos1.write(97);
2.pubic void write(byte[] bytes): 一次一个数组的写入
byte[] bytes = {97,72,101,108,108,111};
fos.write(bytes);
//字节流对字符并不友好, 对于中文的写入使用 中文.getBytes()的方式
fos.write("中国".getBytes);
3.public void write(byte[] bytes,int off, int len): 一次写入数组一部分,从off索引开始写len个元素
fos.write(bytes,2,3);
字节输入流
构造方法(类比输出流)
1.FileInputStream(File file): 如果存在文件可读取, 不存在报异常, 是文件夹报异常(拒绝访问)
2.FileInputStream(String path): 封装string底层转成file, 不存在报异常, 是文件夹报异常(拒绝访问)
FileInputStream fis1 = new FileInputStream(new File("io\\hello.txt"));
FileInputStream fis2 = new FileInputStream("io\\hello.txt");
读取方法
1.public int read(int i): 每次读一个字节返回字节的int值 , 当读取int为-1表示读到文件末尾
int i = fis.read();
System.out.println("本次读取的内容是:"+i+"强转后得到的内容是:"+(char)i);
//这种方式不能用在读取中文上, 一个中文是两个或三个字节, 每次读取到的只是二分之一或者三分之一的内容
//遍历
while((i=fis.read)!=-1){
System.out.println("本次读取的内容是:"+i+"强转后得到的内容是:"+(char)i);
}
2.public int read(bytes[] b): 将字节放入数组读取 返回有效元素个数
每次字节数组读到内容会覆盖掉数组中上一次读取到的内容, 如果最后一次读取到的并不是完整的byte长度的内容, 会出现部分脏数据, read方法返回的是数组中有效的元素个数, 当返回-1表示读取到文件末尾
FileInputStream fis = new FileInputStream("Chapter-11-io\\hello.txt");
int i;
//一次读取1024个字节
byte[] b = new byte[1024];
while((i=fis.read(b))!=-1){
//创建一个string字符串,读取byte数组, 从0索引开始读i个元素
String s = new String(b,0,i);
System.out.println(s);
}
缓冲字节输出流
在字节输出流的基础上, 添加了一块缓冲区, 缓冲字节输出流并不具备写的能力, 只是将字节放到缓冲区中, 需要一个字节输出流将缓冲区种的内容写到文件
构造方法
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("io\\hello.txt")));
缓冲字节输入流
构造方法
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("io\\hello.txt")));
字符流相对于字节流, 更好的对文本类型的文件进行读取和写入
字符输出流(转换流)
字符流的父类是writer和reader, 不具备读和写的能力, 只是对字节和字符进行转换, 具体的读取写入功能需要字节流进行读取和写入
构造方法
字符输出流也叫做转换流, 使用它的构造方法,将字节输出流作为参数, 返回一个字符输出流, 完成从字节流到字符流的转换
1.OutputStreamWriter(OutputStream out): 以平台默认的编码方式进行写入
2.OutputStreamWriter(OutputStream out, String charsetName): 以自定义的编码方式写入
//以平台默认的编码方式进行写入
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(new File("io\\hello.txt")));
//以自定义的编码方式写入
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(new File("io\\hello.txt")),"GBK");
常用方法
1.public void write(int i): 一次写一个字符
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(new File("io\\hello.txt")));
//char类型在运算时提升为int, 因此可以直接写字符
osw.write('我');
//如果最后不释放资源, 则数据都留在了缓冲区中, 只有手动关闭流, 才真正把缓冲区的数据写入到文件
osw.close;
2.public void write(char[] c): 一次写一个字符数组
char[] c = {'你','好','呀','!'};
osw.write(c);
osw.close;
3.public void write(char[] c, int off, int len): 一次写一个字符数组, 从off开始写len个字符
char[] c = {'今','天','天','气','不','错','!'};
//将字符数组c的内容写入文件, 从0索引开始, 写4个字符 今天天气
osw.write(c,0,4);
osw.close;
4.public void write(String s): 一次写一个字符串
//写入一个换行符, 不会显示, 但是系统到这里会换行
osw.write("/r/n");
osw.close;
5.public void write(String s,int off, int len): 一次写一个字符串, 从off开始写len个字符
String s = "最近天气好热.";
//将字符串s的内容写入文件, 从索引2开始, 写4个字符 天气好热
osw.write(s,2,4);
osw.close;
字符输入流
构造方法
1.InputStreamReader(InputStream in): 以平台默认的编码方式对文件进行读取
2.InputStreamReader(InputStream in, String charsetName): 以自定义的编码方式对文件进行读取
//以平台默认的编码方式对文件进行读取
InputStreamReader isr = new InputStreamReader(new FileInputStream(new File("io\\hello.txt")));
//以自定义的编码方式对文件进行读取
InputStreamReader isr = new InputStreamReader(new FileInputStream(new File("io\\hello.txt")),"GBK");
常用方法
1.public int read(): 一次读一个字符, 将读取到的数据返回, 如果读到文件末尾, 返回-1
InputStreamReader isr = new InputStreamReader(new FileInputStream(new File("io\\hello.txt")));
int i;
while((i=isr.read())!=-1){
System.out.println("这次读取到的字符是:"+(char)i);
}
isr.close;
2.public int read(char[] c): 一次读一个字符数组, 返回读取到数组的有效个数, 读到末尾返回-1
每次字符数组读到内容会覆盖掉数组中上一次读取到的内容, 如果最后一次读取到的并不是完整的char[]长度的内容, 会出现部分脏数据, read方法返回的是数组中有效的元素个数, 当返回-1表示读取到文件末尾
char[] c = new char[1024];
int i;
while((i=isr.read(c))!=-1){
//每次读取数组c返回的有效个内容
String s = new String(c,0,i);
System.out.println(s);
}
便捷字符输出流
构造方法
1.FileWriter(File file): 底层封装了一个输出流对象, 再将file参数传进去, 相比字符输出流不能指定字符编码但更方便快捷
2.FileWriter(String fileName):
FileWriter fw = new FileWriter(new File("io\\hello.txt"));
FileWriter fw = new FileWriter("io\\hello.txt");
便捷字符输入流
构造方法
1.FileReader(File file): 底层封装了一个输入流对象, 再将file参数传进去, 更方便
2.FileReader(String fileName):
FileReader fr = new FileReader(new File("io\\hello.txt"));
FileReader fr = new FileReader("io\\hello.txt");
缓冲字符输出流
字符缓冲流相较于原生字符流或者便捷字符流, 速度更快, 还有一些特有方法
构造方法
BufferedWriter(Writer w): 传入一个字符输出流
//使用便捷字符输出流作为参数
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("io\\hello.txt")));
//使用原生字符输出流作为参数
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("io\\hello.txt"))));
特有方法
public void newLine(): 写一个换行符
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("io\\hello.txt")));
bw.write("今天天气很好");
bw.newLine();
bw.write("今天不会下雨了");
bw.close;
缓冲字符输入流
构造方法
BufferedReader(Reader r): 传入一个字符输入流
//传入原生字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("io\\hello.txt"))));
//传入便捷字符输入流
BufferedReader br = new BufferedReader(new FileReader(new File("io\\hello.txt")));
特有方法
public String readLine(): 一次读取一行的内容并返回, 如果读到文件末尾返回null
BufferedReader br = new BufferedReader(new FileReader(new File("io\\hello.txt")));
String info;
while((info=br.readLine())!=null){
System.out.println(info);
}
br.close;