一、File类的常用API
1、File类
在包java.io.File下、代表操作系统的文件对象(文件、文件夹)。
2、File类提供了诸如:
定位文件,获取文件本身、删除文件、创建文件(文件夹)等功能。
注意:File类不能读取文件内容,如果需要访问文件内容,需使用输入/输出流。
File创建对象:
//创建File对象(指定文件或者文件夹的路径)
File f1=new File("C:\\Users\\86130\\Desktop\\test.xlsm")//表示文件或文件夹的路径
File f2=new File("C:\\Users\\86130\\Desktop,test.xlsm")//第一个参数是路径名,第二个参数是文件名
// 访问一个文件夹
File file = new File("E:/resource");
int txtCount = 0, jpgCount = 0, docCount = 0, otherCount = 0;
String[] list = file.list(); // 获取当前目录下所有的”一级文件名称“到一个字符串数组中
// 增强for循环遍历数组
for (String name : list){
System.out.println(name.getName())
}
3、File类的常用方法
String getAbsolutePath() | 返回由该对象表示的文件的绝对路径名 |
---|---|
String getName() | 返回表示当前对象的文件名或路径名(如果是路径,则返回最后一级子路径名) |
String getParent() | 返回当前 File 对象所对应目录(最后一级子目录)的父目录名 |
boolean isAbsolute() | 测试当前 File 对象表示的文件是否为一个绝对路径名。该方法消除了不同平台的差异,可以直接判断 file 对象是否为绝对路径。在 UNIX/Linux/BSD 等系统上,如果路径名开头是一条斜线/ ,则表明该 File 对象对应一个绝对路径;在 Windows 等系统上,如果路径开头是盘符,则说明它是一个绝对路径。 |
boolean isDirectory() | 测试当前 File 对象表示的文件是否为一个路径 |
boolean isFile() | 测试当前 File 对象表示的文件是否为一个“普通”文件 |
long lastModified() | 返回当前 File 对象表示的文件最后修改的时间 |
long length() | 返回当前 File 对象表示的文件长度 |
String[] list() | 返回当前 File 对象指定的路径文件列表 |
String[] list(FilenameFilter) | 返回当前 File 对象指定的目录中满足指定过滤器的文件列表 |
boolean mkdir() | 创建一个目录,它的路径名由当前 File 对象指定 |
boolean mkdirs() | 创建一个目录,它的路径名由当前 File 对象指定 |
boolean renameTo(File) | 将当前 File 对象指定的文件更名为给定参数 File 指定的路径名 |
4、递归获取文件
import java.io.File;
public class test {
public static void diaoyong(File f1) {//递归调用方法
if(f1.isDirectory()) {//判断f1是否为文件夹,如果是文件夹再遍历文件夹里面的文件
File[] ff=f1.listFiles();//获取子文件夹中的文件
for(File f:ff) {//遍历子文件夹中的文件
diaoyong(f);//递归调用,如果子文件夹中还包含文件夹,则递归调用重新遍历,直至所有的文件遍历结束
}
}else {
System.out.println(f1.getName());//如果文件不是文件夹,则打印出文件名字。
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
File f2=new File("d:/cai/Documents(c++)");//new一个file对象
diaoyong(f2);//调用递归方法,遍历输出file文件下的所有文件名
}
}
二、io流
1、概述
IO流也称为输入流、输出流,用来读写文件。
在Java中,文件的输入和输出是通过流(stream)来实现的,流的概念源于unix中管道(pipe)的概念。在unix系统中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。
一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个url。对于流而言,不用关心数据是如何传输的,只需要向源端输入数据,从目的端获取数据即可。
输入流的抽象表示形式是接口inputstream;输出流的抽象表示形式是接口outputstream。
2、io流分类
注意:
输入出流:InputStream、OutputStream、Reader、Writer都是属于抽象类。创建对象时,需要new它的实现类。
使用字节流,中文可能会出现乱码;使用字符流,可以避免中文乱码问题。(一个中文占据2个字节)
字节流的读取
//创建File对象
File file = new File("C:\\Users\\86130\\Desktop\\test.txt");
//基于File创建字节输入流
InputStream in = new FileInputStream(file);
//读取一个字节
int i = in.read();
System.out.println((char)i);
//----------------------------------------
InputStream in = new FileInputStream(file);
//创建字节缓冲区(大小为总可读字节数)
byte[] arr = new byte[i];
//将流中读取的字节内容存储到数组中
int total = in.read(arr);
//将字节数组转换为String字符串
System.out.println(new String(arr));
//---------------------------------------
//创建文件输入流对象(文件:一个文本)
InputStream in = new FileInputStream("C:\\Users\\86130\\Desktop\\test.txt");
//创建缓冲区(购买一个大小适中的水桶)
byte[] b = new byte[1024];
//声明临时变量表示每次读取的实际字节数
int len = 0;
while((len = in.read(b)) != -1){
String s = new String(b,0,len);
System.out.println(s);
}
使用FileOutputStream
进行文件写出操作
try(OutputStream os = new FileOutputStream("C:\\Users\\86130\\Desktop\\test01.txt",true);){
//写出一个字节到文件中
String msg = "abcdef";
os.write(msg.getBytes());
}catch (IOException e){
e.printStackTrace();
}
图片和部分代码参考网友帖子:https://blog.csdn.net/weixin_48006490/article/details/126649763