一、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();
        }

img

图片和部分代码参考网友帖子:https://blog.csdn.net/weixin_48006490/article/details/126649763

posted on 2023-01-02 11:23  吃饱饱没烦恼  阅读(36)  评论(0编辑  收藏  举报