目录
File类
File类,应为翻译“文件类”。用于文件操作的类。File表示文件或文件夹的抽象路径,既然是抽象路径,那么当然这个路径是可以存在的也可以是不存在的。File类有以下几个构造方法:
1、构造方法
方法 | 说明 |
public File(String pathname) | 给定路径名称创建File对象 |
public File(String parent,Stirng child) | 给定父路径和子路径创建File对象 |
public File(File parent,String child) | 给定父路径的File类型和子路径创建File对象 |
import java.io.File;
//在java语言中 ""里面的\必须写成\\
// \本身是转义字符的意思
public class Test01 {
public static void main(String[] args) {
//File的构造方法
//public File(String pathname)
//给定路径名称创建File对象
File f = new File("C:\\Users\\jin\\Desktop\\day10");
//File f = new File("C:/Users/jin/Desktop/day10");
System.out.println(f);
//public File(String parent, String child)
//给定父路径和子路径创建File对象
//File f2 = new File("C:\\Users\\jin\\Desktop","day10");
File f2 = new File("C:\\Users\\jin","Desktop\\day10");
System.out.println(f2);
//public File(File parent, String child)
//给定父路径的File类型和子路径创建File对象
File f3 = new File("C:\\Users\\jin\\Desktop");
File f4 = new File(f3,"day10");
System.out.println(f4);
}
}
2、常用方法
说完了File类的构造方法,接下来就是File类的常用方法:
常用方法 | 说明 |
getAbsolutePath() | 获取文件的绝对路径 |
getpath() | 获取创建路径 |
getName() | 获取文件或文件夹名称 |
length() | 获取文件字节长度 |
import java.io.File;
public class Test02 {
public static void main(String[] args) {
//获取方法
File f = new File("C:\\Users\\jin\\Desktop\\123.txt");
//getAbsolutePath()
//获取绝对路径(从盘符开始的路径就是绝对路径)
System.out.println(f.getAbsolutePath());
//getPath()
//获取创建对象时的路径
System.out.println(f.getPath());
//getName()
//获取文件名(获取最后一级名字)
System.out.println(f.getName());
//length()
//获取文件大小,不能获取目录的大小
//文件大小就是文件的字节数
System.out.println(f.length()); //435字节
}
}
3、判断方法
判断方法,用于判断文件或文件夹是否存在,通常使用下面几个
判断方法 | 说明 |
exists() | 判断路径是否存在 |
isFile() | 判断是否是文件 |
isDirectory() | 判断是否是文件夹(目录) |
import java.io.File;
public class Test04 {
//判断方法
public static void main(String[] args) {
File f = new File("day10\\src");
//exists()
//判断路径是否存在
System.out.println(f.exists());
//isFile()
//判断是否是文件,如果不是文件或不存在false
System.out.println(f.isFile());
//isDirectory()
//判断是否是文件夹(目录),如果不是文件夹或不存在false
System.out.println(f.isDirectory());
}
}
4、创建删除方法
当文件或者文件夹不存在的时候,可以直接使用File类进行创建,方法如下:
创建、删除方法 | 说明 |
createNewFile() | 创建新文件 |
delete() | 删除(1、不能删除有文件的文件夹。 2、此方法删除的文件不经过回收站) |
mkdir() | 创建单层文件夹 |
mkdirs | 创建多层文件夹 |
import java.io.File;
import java.io.IOException;
public class Test05 {
//创建删除方法
public static void main(String[] args) throws IOException {
File f0 = new File("day10\\aaa\\sfsd.txt");
File f = new File("day10\\aaa");
//createNewFile()
//创建一个文件
f.createNewFile();
//delete()
//删除一个文件或空文件夹(不能删除有文件的文件夹)
//删除方法不走回收站,你别删除有用的文件
f0.delete();
f.delete();
//mkdir()
//创建单层文件夹
File f2 = new File("day10\\aaa");
f2.mkdir();
//mkdirs()
//创建任意层文件夹
File f3 = new File("day10\\bbb\\ccc");
f3.mkdirs();
}
}
5、遍历目录方法
遍历方法 | 说明 |
list() | 获取目录下所有内容的名称 |
listFiles() | 获取目录下所有内容的File对象形式 |
import java.io.File;
public class Test06 {
public static void main(String[] args) {
File f = new File("C:\\Users\\jin\\Desktop\\day10");
//list()
//获取目录下所有内容的名称
String[] list = f.list();
//遍历
for (String s : list) {
System.out.println(s);
}
System.out.println("---------------------------");
//listFiles()
//获取目录下所有内容的File对象形式
File[] files = f.listFiles();
//遍历
for (File file : files) {
System.out.println(file);
}
}
}
IO流
IO流中,I代表的是in,o代表的是out,IO是对于数据的输入和输出。
IO分类:
1)按照方向分为:输入流和输出流
2)按照类型分为:字节流和字符流
而我要介绍的则是:字节输入流、字节输出流、字符输入流和字符输出流。
1、字节流
计算机中任何数据都是以字节的方式保存的,字节流可以 以字节的方式操作数据
1.1、字节输出流OutputStream
字节输出流父类OutputStream是一个抽象方法,具有以下常用的方法,我们在创建对象的时候,通常使用的是其子类:FileOutputStream(接下来介绍)
方法 | 说明 |
close | 释放资源 |
write(byte[] b) | 输出字节数组 |
write(byte[] b,int off,int len) | 输出字节数组的一部分,off表示开始索引,len表示个数 |
write(int b ) | 输出一个字节 |
1.1.1、字节输出流子类FileOutputStream
此类具有四个构造方法,如下:
特点: 1)如果要写入文件不存在,不会报错,则会创建相应的文件
2)使用以下前两种构造方法,则存在字节覆盖问题,后两种不存在覆盖问题
3)构造方法只能指向文件,不能指向文件夹(报错:拒绝访问。)
构造方法 | 说明 |
public FileOutputStream(File file) | 向指定文件位置输出数据 |
public FileOutputStream(String name) | 向指定字符串路径输出数据 |
public FileOutputStream(File file, boolean b) | 创建对象的同时是否续写,true表示续写 |
public FileOutputStream(String name,boolean b) | 创建对象的同时是否续写,true表示续写 |
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class Test01 {
public static void main(String[] args) throws FileNotFoundException {
//字节输出流的构造方法
/*
注意事项:
如果文件不存在构造方法会创建文件
如果文件已存在构造方法会覆盖文件
构造方法只能指向文件,不能指向文件夹(报错:拒绝访问。)
true表示续写,如果文件存在不会覆盖之前的内容,在原来内容的基础上续写
*/
//new FileOutputStream(String pathname) :参数表示路径名称
//FileOutputStream fos = new FileOutputStream("day10\\123.txt");
//new FileOutputStream(File file) :参数表示路径名称
//FileOutputStream fos2 = new FileOutputStream(new File("day10\\123.txt"));
//new FileOutputStream(String pathname,boolean b)
//:参数表示路径名称,第二个参数表示是否续写
FileOutputStream fos = new FileOutputStream("day10\\123.txt",true);
//new FileOutputStream(File file,boolean b)
//:参数表示路径名称,第二个参数表示是否续写
//FileOutputStream fos2 = new FileOutputStream(new File("day10\\123.txt"),true);
}
}
方法的使用演示:
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test02 {
//FileOutputStream的方法
public static void main(String[] args) throws IOException {
//创建对象
FileOutputStream fos = new FileOutputStream("day10\\123.txt");
//write(int b) byte -128 ~ 127
//输出一个字节,保存的是对应的字符
fos.write(97);
//write(byte[] b)
//输出字节数组
byte[] arr = {65,66,68,100,102};
fos.write(arr);
//write(byte[] b, int off, int len)
//输出字节数组的一部分。off表示开始索引,len表示个数
fos.write(arr,2,3);
//close()
//关闭流资源,关闭之后就不能用了
fos.close();
}
}
1.2、输入流父类InputStream
方法 | 说明 |
---|---|
close() | 关闭流资源 |
read() | 每次读取一个字节,返回值代表的是字节 |
read(byte[] b) | 每次读取一个数组的字节,返回值代表读取到的字节个数 |
1.2.1.输入流子类FileInputStream
注意事项:
1) 如果文件不存在,构造方法会报错 (报错:系统找不到指定的文件。)
2)构造方法只能指向文件,不能指向文件夹(报错:拒绝访问。)
方法 | 说明 |
---|---|
FileInputStream(File file) | 从指定的File文件读取数据 |
FileInputStream(String name) | 从指定字符串路径位置读取数据 |
构造方法演示:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class Test04 {
public static void main(String[] args) throws FileNotFoundException {
//字节输入流FileInputStream的构造方法
//FileInputStream(File file)
//从指定的File文件读取数据
FileInputStream fis = new FileInputStream(new File("day10\\123.txt"));
//FileInputStream(String name)
//从指定字符串路径位置读取数据
//FileInputStream fis2 = new FileInputStream("day10\\123.txt");
}
}
常用方法演示(读字节数组为例):
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
public class Test06 {
public static void main(String[] args) throws IOException {
//创建对象
FileInputStream fis = new FileInputStream("day10\\123.txt");
//read(byte[] b)
//每次读取一个数组的字节,返回值代表读取到的字节个数
//把数据放到数组中,返回的是字节个数
//循环
byte[] arr = new byte[5];
int len;
while((len=fis.read(arr)) != -1){
System.out.print(new String(arr,0,len));
}
//close()
//关闭流资源
fis.close();
}
}
2、字符流
字符流专门用来操作中文文本,因为一个中文占用多个字节
2.1、字符输入流父类Reader
方法 | 说明 |
close() | 关闭流资源 |
read() | 读取一个字符 |
read(char[] chs) | 读取一个字符数组内容 |
2.1.2、FileReader类
注意事项:
1) 如果文件不存在,会抛出异常(报错:系统找不到指定的文件)
2)构造方法只能写文件,不能写文件夹(报错:拒绝访问)
方法 | 说明 |
FileReader(File file) | 使用file对象路径创建输入流 |
FileReader(String fileName) | 使用字符串路径创建输入流 |
使用方法:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class Test04 {
//FileReader的构造方法
public static void main(String[] args) throws FileNotFoundException {
FileReader fr = new FileReader("day10\\123.txt");
//FileReader f2 = new FileReader(new File("day10\\123.txt"));
}
}
一次读取一个字符数组:
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
public class Test06 {
public static void main(String[] args) throws IOException {
//创建对象
FileReader fr = new FileReader("day10\\123.txt");
//read(char[] arr)
//每次读取多个字符,返回值表示读到的字符个数,如果读到了末尾返回-1
//循环
char[] chs = new char[5];
int len;
while((len=fr.read(chs)) != -1){
System.out.println(new String(chs,0,len));
}
//关闭流资源
fr.close();
}
}
2.2.字符输出流父类Writer
方法 | 说明 |
---|---|
close() | 关闭流资源 |
flush() | 刷新 |
write(int c) | 写出一个字符 |
write(char[] cbuf) | 写出一个字符数组的内容 |
write(char[] b, int off, int len) | 写出一个字符数组的一部分 |
write(String str) | 写出一个字符串 |
2.2.1、FileWriter类
注意事项:
1) 如果文件不存在,会自动创建文件
2) 如果文件已存在,会覆盖原有文件
3) 构造方法中只能写文件,不能写文件夹(报错:拒绝访问。)
4)如果加上一个true,表示在原有文件内容上续写
方法 | 说明 |
---|---|
FileWriter(File file) | 用File对象所表示的路径创建输出流对象 |
FileWriter(String fileName) | File字符串所表示的路径创建输出流对象 |
FileWriter(File file,boolean b) | 用File对象所表示的路径创建输出流对象,true表示续写 |
FileWriter(String fileName,boolean b) | File字符串所表示的路径创建输出流对象,true表示续写 |
构造方法:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Test01 {
public static void main(String[] args) throws IOException {
//字符输出流FileWriter构造方法
//new FileWriter(String name)
//FileWriter fw = new FileWriter("day10\\123.txt");
//new FileWriter(File file)
//FileWriter fw2 = new FileWriter(new File("day10\\123.txt"));
//new FileWriter(String name,boolean b)
//FileWriter fw = new FileWriter("day10\\123.txt",true);
//new FileWriter(File file,boolean b)
FileWriter fw = new FileWriter(new File("day10\\123.txt"),true);
}
}
常用方法:
import java.io.FileWriter;
import java.io.IOException;
public class Ttest03 {
public static void main(String[] args) throws IOException {
//FileWriter的输出方法
FileWriter fw = new FileWriter("day10\\123.txt");
//write(int c)
//写出一个字符
fw.write(97);
fw.write('a');
fw.write('我');
//write(char[] cbuf)
//写出一个字符数组的内容
char[] arr = {'a','b','c','d'};
fw.write(arr);
//write(char[] b, int off, int len)
//写出一个字符数组的一部分
fw.write(arr,2,2);
//write(String str)
//写出一个字符串
fw.write("abcdefg");
//关闭
fw.close();
}
}
字节流:
操作文本文档以外的数据时一定使用字节流字符流:
操作文本文档就用字符流