目录
1.File类
1.1概述
File类表示文件或文件夹的抽象路径。抽象路径的意思是路径可以存在也可以不存在。
1.2构造方法
方法介绍:
方法 | 说明 |
public File(String pathname) | 给定路径创建File对象 |
public File(String parent,String child) | 给定父路径和子路径创建File对象 |
public File(File parent,String child) | 给定父路径的File对象和子路径创建File对象 |
示例:
//给定路径创建File对象
File file1 = new File("E:\\study\\test01.txt");
System.out.println(file1);
//给定父路径和子路径创建File对象
File file2 = new File("E:\\study","test02.txt");
System.out.println(file2);
//给定父路径的File对象和子路径创建File对象
File parent = new File("E:/study");
File file3 = new File(parent,"test03.txt");
System.out.println(file3);
输出结果:
E:\study\test01.txt
E:\study\test02.txt
E:\study\test03.txt
File类只是代表文件或文件夹的抽象类路径。
1.3获取方法
方法介绍:
方法 | 说明 |
getAbsolutePath() | 获取绝对路径 |
getPath() | 获取创建对象时的路径 |
getName() | 获取文件名 |
length() | 获取文件大小(文件夹不行) |
示例:
File file = new File("C:\\Users\\levi\\Desktop\\123.png");
//getAbsolutePath 获取File对象的绝对路径(从盘符开始)
System.out.println(file.getAbsolutePath());
//getPath 获取穿件File对象时传入的路径
System.out.println(file.getPath());
//getName 获取文件名
System.out.println(file.getName());
//length 获取文件大小 无法获取文件夹大小
System.out.println(file.length());
输出结果:
C:\Users\levi\Desktop\123.png
C:\Users\levi\Desktop\123.png
123.png
57437
1.4绝对路径和相对路径
绝对路径:从盘符开始的路径叫绝对路径。
相对路径:不以盘符开始写的路径就是相对路径。
1.5判断方法
方法介绍:
方法 | 说明 |
exists() | 判断路径是否存在 |
isFile() | 判断是否是文件 |
isDirectory() | 判断是否是文件夹 |
示例:
File file = new File("abc.txt");
File file2 = new File("src\\study");
//exists 判断路径是否存在
System.out.println(file.exists());
System.out.println(file2.exists());
//isFile 判断是否是文件
System.out.println(file.isFile());
System.out.println(file2.isFile());
//isDirectory 判断是否是文件夹
System.out.println(file.isDirectory());
System.out.println(file2.isDirectory());
1.6创建删除方法
方法介绍:
方法 | 说明 |
createNewFile() | 创建一个文件 |
delete() | 删除一个文件或空文件夹(不可以删除有文件的文件夹) |
mkdir() | 创建单层文件夹 |
mkdirs() | 创建任意层文件夹 |
示例:
File file1 = new File("src\\study\\fileAndIO\\abc.txt");
//createNewFile 创建文件
try {
file1.createNewFile();
} catch (IOException e) {
System.out.println("创建文件异常");
}
//mkdir 创建单层文件夹
File file2 = new File("src\\study\\fileAndIO\\aaa");
file2.mkdir();
//mkdird 创建任意层文件夹
File file3 = new File("src\\study\\fileAndIO\\bbb\\ccc");
file3.mkdirs();
//delete 删除一个文件或文件夹
file1.delete();
file2.delete();
1.7遍历目录的方法
方法介绍:
方法 | 说明 |
list() | 获取目录下所有内容的名称 |
listFiles() | 获取目录下所有内容的File对象形式 |
示例:
File file = new File("C:\\Users\\levi\\Desktop\\web文档");
//list 获取目录下所有内容的名称
String[] list = file.list();
for (int i = 0; i < list.length; i++) {
System.out.println(list[i]);
}
//listFiles 获取目录下所有内容的File对象形式
File[] files = file.listFiles();
for (File f : files){
System.out.println(f);
}
遍历文件夹,输出文件夹下java文件
File file = new File("C:\\Users\\levi\\Desktop\\web文档");
//遍历文件夹 获取以.java结尾的文件
String[] list = file.list();
for (String s : list) {
if (s.endsWith(".java")) System.out.println(s);
}
执行结果:
1.java
1234.java
2.java
3.java
我们发现1234.java是个文件夹,也跟着输出了,所以我们需要换一种方法去找java文件。
File file = new File("C:\\Users\\levi\\Desktop\\web文档");
//遍历文件夹 获取以.java结尾的文件
File[] files = file.listFiles();
for (File f : files) {
if (f.isFile() && f.getName().endsWith(".java")) System.out.println(f.getName());
}
执行结果:
1.java
2.java
3.java
1.8查找文件夹中所有java文件
利用递归的思想,将每一层文件夹下的文件进行判断。
public static void main(String[] args) {
method(new File("C:\\Users\\levi\\Desktop\\web文档"));
}
public static void method(File file){
File[] files = file.listFiles();
for (File f : files) {
if (f.isFile()){
if (f.getName().endsWith(".java")) System.out.println(f);
} else {
method(f);
}
}
}
2.IO流
2.1什么是IO
I就是in,O就是out。IO对于数据就是输入和输出。
2.2IO的分类
3.字节流
在计算机中任何数据都是以字节的方式保存的。字节流可以以字节的方式来操作数据。
3.1字节输出流父类OutputStream
常用方法:
方法 | 说明 |
close() | 关闭流资源 |
write(byte[] b) | 输出字节数组 |
write(byte[] b,int off,int len) | 输出字节数组的一部分,off表示开始索引,len表示字节个数 |
write(int b) | 输出一个字节 |
3.2字节输出流子类FileOutputStream
构造方法:
方法 | 说明 |
public FileOutputStream(File file) | 向指定文件位置输出数据 |
public FileOutputStream(String name) | 向指定字符串路径输出数据 |
public FileOutputStream(File file,boolean b) | 创建对象的同时指定是否续写true表示是 |
public FileOutputStream(String name,boolean b) | 创建对象的同时指定是否续写true表示是 |
构造方法示例:
/**
* 注意事项 :
* 如果文件不存在,构造方法会创建文件。
* 如果文件存在,构造方法会覆盖文件。
* 构造方法不可以指向文件夹(拒绝访问)
*/
//new FileOutputStream(String pathName)
FileOutputStream fos1 = new FileOutputStream("src\\study\\IO\\123.txt");
//new FileOutputStream(File file)
FileOutputStream fos2 = new FileOutputStream(new File("src\\study\\IO\\123.txt"));
/**
* 第二个参数的布尔值表示是否续写。
* 如果为true,创建文件不会覆盖,而是在原来的文件上继续写。
* 如果为false,创建文件覆盖。
*/
//new FileOutputStream(String pathName,Boolean b)
FileOutputStream fos3 = new FileOutputStream("src\\study\\IO\\123.txt",true);
//new FileOutputStream(File file,Boolean b)
FileOutputStream fos4 = new FileOutputStream(new File("src\\study\\IO\\123.txt"),true);
常用方法示例:
FileOutputStream fos = new FileOutputStream("src\\study\\IO\\123.txt");
//write(int b) 输出一个字节 输出一个字节,一个字节的取值范围 -128~127
fos.write(97);
//填写的是数字,输出的是对应的字符
//write(byte[] b) 输出字节数组
byte[] arr = {98, 99, 100,101,102};
fos.write(arr);
String str = "---我爱java---";
byte[] bytes = str.getBytes();
fos.write(bytes);
//write(byte[] b,int off,int len) 输出字节数组的一部分,off表示开始索引,len表示字节个数
fos.write(arr,2,3);
//close() 关闭流资源 关了之后就不能再用了
fos.close();//如果不关闭,文件一直在占用不会释放资源
3.3输入流父类InputStream
常用方法:
方法 | 说明 |
close() | 关闭流资源 |
read() | 每次读取一个字节,返回值代表的是字节的值 |
read(byte[] b) | 每次读取一个数组的字节,返回值代表读取到的字节个数 |
3.4输入流子类FleInputStream
构造方法:
方法 | 说明 |
FileInputStream(File file) | 从指定的File文件读取数据 |
FileInputStream(String name) | 从指定字符串路径位置读取数据 |
构造方法示例:
/**
* 注意事项:
* 如果文件不存在,构造方法会报错(系统找不到指定文件)
* 构造方法只能指向一个文件,不可以指向文件夹。(拒绝访问)
*/
//FileInputStream(File file)
FileInputStream fis1 = new FileInputStream("src\\study\\IO\\123.txt");
//FileInputStream(String name)
FileInputStream fis2 = new FileInputStream(new File("src\\study\\IO\\123.txt"));
常用方法示例:
FileInputStream fis = new FileInputStream("src\\study\\IO\\123.txt");
//read()
//每次读取一个字节,返回值代表的是字节的值
/*System.out.println(fis.read());//97 a
System.out.println(fis.read());//98 b
System.out.println(fis.read());//13 \r
System.out.println(fis.read());//10 \n
System.out.println(fis.read());//99 c
System.out.println(fis.read());//-1 如果返回了一个-1,则表示读到了末尾,没有数据了*/
int i ;
while((i = fis.read()) != -1){
System.out.println(i);
}
//read(byte[] b)
//每次读取一个数组的字节,返回值代表读取到的字节个数
//close()
//关闭流资源
fis.close();
FileInputStream fis = new FileInputStream("src\\study\\IO\\123.txt");
//read(byte[] b)
//每次读取一个数组的字节,返回值代表读取到的字节个数
//将输入读到数组中,返回的是读取到的字节个数
//byte[] arr = new byte[10];
//System.out.println(fis.read(arr));//5
//System.out.println(Arrays.toString(arr));//[97, 98, 13, 10, 99, 0, 0, 0, 0, 0]
/*byte[] arr = new byte[4];
System.out.println(fis.read(arr));//4
System.out.println(Arrays.toString(arr));//[97, 98, 13, 10]
System.out.println(fis.read(arr));//1
System.out.println(Arrays.toString(arr));//[99, 98, 13, 10]
System.out.println(fis.read(arr));//-1 文件读取到最后 返回-1表示没有了
System.out.println(Arrays.toString(arr));//[99, 98, 13, 10]*/
byte[] arr = new byte[4];//每次读取4个字节
int len;//读到的字节个数
while ((len = fis.read(arr)) != -1){//读到的字节个数不等于-1 说明读到东西了 读到了几个len就是几
String str = new String(arr,0,len);//通过字节数组构造字符串,从第一个字节开始,获取len个字节拼成字符串
System.out.print(str);
}
//close()
//关闭流资源
fis.close();
4.字符流
字符流专门用来操作中文文本,因为一个中文占用多个字节。
4.1字符输入流父类Reader
常用方法:
方法 | 说明 |
close() | 关闭流资源 |
read() | 读取一个字符 |
read(char[] chs) | 读取一个字符数组的内容 |
4.2字符输入流子类FileReader
构造方法:
方法 | 说明 |
FileReader(File file) | 使用File对象的路径创建输入流 |
FileReader(String fileName) | 使用字符串路径创建输入流 |
构造方法示例:
/*
注意事项:
如果文件不存在,会抛出异常(报错:系统找不到指定的文件)
构造方法只能写文件,不能写文件夹(报错:拒绝访问)
*/
FileReader fr = new FileReader("src\\study\\IO\\中文.txt");
FileReader fr2 = new FileReader(new File("src\\study\\IO\\中文.txt"));
常用方法示例:
FileReader fr = new FileReader("src\\study\\IO\\中文.txt");
//read() 读取一个字符
/*System.out.println(fr.read());//25105
System.out.println(fr.read());//29233
System.out.println(fr.read());//106
System.out.println(fr.read());//97
System.out.println(fr.read());//118
System.out.println(fr.read());//97
System.out.println(fr.read());//-1*/
int i;
while ((i = fr.read()) != -1){
//System.out.println(i);
System.out.print((char) i);
}
//close 关流
fr.close();
FileReader fr = new FileReader("src\\study\\IO\\中文.txt");
//read(char[] chs) 读取一个字符数组的内容 返回读到的字符数量,读到的内容封装在数组中
char[] chs = new char[4];
int len;
while ((len = fr.read(chs)) != -1){
System.out.print(new String(chs,0,len));
}
//close 关流
fr.close();
4.3字符输出流父类Writer
常用方法:
方法 | 说明 |
close() | 关闭流资源 |
flush() | 刷新 |
write(int c) | 写出一个字符 |
write(char[] cbuf) | 写出一个字符数组的内容 |
write(char[] b, int off, int len) | 写出一个字符数组的一部分 |
write(String str) | 写出一个字符串 |
4.4字符输出流子类FileWriter类
构造方法:
方法 | 说明 |
FileWriter(File file) | 用File对象所表示的路径创建输出流对象 |
FileWriter(String fileName) | File字符串所表示的路径创建输出流对象 |
FileWriter(File file,boolean b) | 用File对象所表示的路径创建输出流对象,true表示续写 |
FileWriter(String fileName,boolean b) | File字符串所表示的路径创建输出流对象,true表示续写 |
构造方法示例:
/*
注意事项:
如果文件不存在,会自动创建文件
如果文件已存在,会覆盖原有文件
构造方法中只能写文件,不能写文件夹(报错:拒绝访问。)
如果加上一个true,表示在原有文件内容上续写
*/
FileWriter fw1 = new FileWriter("src\\study\\IO\\中文.txt");
FileWriter fw2 = new FileWriter(new File("src\\study\\IO\\中文.txt"));
FileWriter fw3 = new FileWriter("src\\study\\IO\\中文.txt",true);
FileWriter fw4 = new FileWriter(new File("src\\study\\IO\\中文.txt"),true);
常用方法示例:
FileWriter fw = new FileWriter("src\\study\\IO\\中文.txt");
/**
* 在输出数据时,会先进入缓冲区,如果缓冲区满了或者刷新时,才会将缓冲区的数据写入到文件中.
*/
//write(int c)写出一个字符
fw.write(97);
fw.write(98);
//flush()刷新
fw.flush();//将缓冲区的数据写入到文件中
//close()关闭流资源
fw.close();//释放流资源时,会自动刷新缓冲区剩余内容
FileWriter fw = new FileWriter("src\\study\\IO\\中文.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,1,3);
//write(String str)写出一个字符串
fw.write("我爱java");
fw.close();//释放流资源时,会自动刷新缓冲区剩余内容
以上就是部分io流的知识点啦,后续会继续补充。各位大佬如发现有知识点错误或者有不同的建议与意见,欢迎评论、私信指正,本人才疏学浅还需向各位大佬学习,还请不吝赐教!在此感谢各位的观看!谢谢!