Java_1_17

File 类

  • File代表文件或者文件夹的类
    • 即将文件或者文件夹通过File类封装成对象
  • 是文件和目录路径名的抽象表示
  • 对于file而言,其封装的并不是一个真正存在的文件,只是一个路径名。
    • 它可以存在,也可以不存在
    • 将来是要通过具体的操作吧这个路径的内容转换为具体存在的

常见构造方法

方法名说明
public File(String pathname)通过将给定的路径名字符串转换为抽象路径来创建新的File实例
public File(String parent,String child)从父路径名字符串和子路径名字符串创建新的File实例
public File(File parent,String child)从父抽象路径名和子路径名字符串创建新的File实例
### 绝对路径和相对路径 + 绝对路径 + 以盘符开始的路径,完整的路径名 + 不需要任何其他信息就可以定位它所表示的文件 + 相对路径 + 相对于某某的路径 + File file = new File("aaa.txt"); + //相对于当前项目下的路径 + File file = new File("src\\aaa.txt"); + //相对于src下的路径 + 必须使用取自其他路径名的信息进行解释 ### 常用成员方法 #### 创建功能
方法名说明
public boolean createNewFile()当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新文件,不能创建文件夹
public boolean mkdir()创建由此抽象路径名命名的目录,即文件夹;只能创建**单级文件夹**
public boolean mkdirs()创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录;即可以创建**多级文件夹**
#### 删除功能
方法名说明
public boolean delete()删除由此抽象路径名表示的文件或目录
  • 当删除一个目录中 有内容时(目录或者文件),必须先删除里面的目录和文件,才能删除该目录
  • 使用 delete() 删除不走回收站
判断和获取功能
方法名说明
public boolean isDirectory()测试此抽象路径名表示的file是否为目录
public boolean isFile()测试此抽象路径名表示的file是否为文件
public boolean exists()测试此抽象路径名表示的File是否存在
public String getAbsolutePath()返回此抽象路径名的绝对路径
public String getPath()/td> 将此抽象路径名转换为路径名字字符串
public String getName()返回由此抽象路径名表示的 文件 或 目录 的名称
public String[] list()返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
public File[] listFiles()/td> 将此抽象路径名表示的**目录中**的文件和目录的File对象的数组
public long length()/td> 获取当前抽象路径名表示的长度,大小
## IO流 ### IO流概述 + IO + 输入/输出,input/output + 流 + 是一种抽象概念,是对数据传输的总称; + 即数据在设备间的传输称为流 + 本质是数据传输 + IO流就是来处理设备间数据传输问题的 + 文件复制 + 文件上传 + 文件下载 + 。。。 ### IO流分类 + 按数据的流向 + 输入流:读数据 + 输出流:写数据 + 按数据的类型 + 字节流 + 字节输入流; + 字节输出流 + 字符流 + 字符输入流 + 字符输出流 + 一般来说,IO流是按照 **数据类型** 分类的 #### 使用时机 + 若数据通过Windows自带的记事本软件打开,我们还可以读懂里面的内容 + **用字符流** + 反之;或者不知道用什么类型的流 + **用字节流**

字节流

  • 字节输入流
    • InputStream 抽象类
      • FileInputStream
  • 字节输出流
    • OutputStream 抽象类
      • FileOutputStream

字节输出流 FileOutputStream

构造方法
  • public FileOutputStream(String name)
  • public FileOutputStream(File file)
  • 注意事项:
    • 不能传一个文件夹的路径,运行会报错
    • 若些一个不存在的文件的路径,它会先创建出来
常用成员方法
  • public void write(byte b)
    • 一次写出一个字节
  • public void write(byte[] b)
    • 一次写出一个字节数组
  • public void write(byte[] b, int off, int len)
    • 一次写出一个字节数组的一部分
    • int off: 开始的索引,从0开始
    • int len: 长度
  • public void close()
    • 关闭此文件输出流并释放资源
两个小问题
  • 如何实现换行
    • 在Windows里
      • 换行: \r\n
      • “\r\n”.getBytes()
    • Linux
      • 换行: \n
    • Mac
      • 换行: \r
  • 如何实现追加
    • public FileOutputStream(“aaa.txt”,true)

字节输入流 FileInputStream

构造方法
  • public FileInputStream(String name)
  • public FileInputStream(File file)
常用成员方法
  • public int read()
    • 一次读出一个字节,返回读取的数据,若无数据可读,返回 -1
  • public int read(byte[] b)
    • 一次读出一个字节数组
    • 返回 实际读到的数据长度;若未读取到数据,返回 -1;
    • 并将数据写入到 byte数组中
  • public int read(byte[] b, int off, int len)
    • 一次读出一个字节数组的一部分
    • int off: 开始的索引,从0开始
    • int len: 长度
  • public void close()
    • 关闭此文件输入流并释放资源

文件的复制

方式一:一次读取一个字节,一次写入一个字节

	//创建字节输入流,用来读取数据
	FileInputStream fis = new FileInputStream("a.txt");
	
	//创建字节输出流,用来写出数据
	FileOutputStream fos = new FileOutputStream("b.txt");
	
	//复制方式:读取一个字节,写入一个字节
	int by = 0;
	while((by = fis.read()) != -1) {
		fos.write(by);
	}
	
	//释放资源
	fos.close();
	fis.close();

方式二:一次读取一个字节数组,一次写出一个字节数组的一部分

	//创建字节输入流对象,用来读取数据
	FileInputStream fis = new FileInputStream("a.txt");
	
	//创建字节输出流对象,用来写出数据
	FileOutputStream fos = new FileOutputStream("d.txt");
	
	//复制:一次读取一个字节数组,一次写出一个字节数组的一部分
	//byte[] bys = new byte[1024];
	int len = 0;//用来接收实际读取的个数的
	
	while((len = fis.read(bys)) != -1) {
		fos.write(bys, 0, len);//一次写出一个字节数组的一部分
	}
	
	//释放资源
	fos.close();
	fis.close();

IO流的异常处理

	如果要捕获异常,代码该如何写?
	//创建字节输入流,用来读取数据
	FileInputStream fis = null;
	//创建字节输出流,用来写出数据
	FileOutputStream fos = null;
	
	try {
		fis = new FileInputStream("a.txt");
		fos = new FileOutputStream("b.txt");
		
		//复制方式:读取一个字节,写入一个字节
		int by = 0;
		while((by = fis.read()) != -1) {
			fos.write(by);
		}
	} catch(Exception e) {
		e.printStackTrace();//打印异常信息
	} finally {
		//释放资源
		if(fos != null) {
			try {
				fos.close();
			} catch (IOException e) {
				
				e.printStackTrace();
			}
		}
		
		if(fis != null) {
			try {
				fis.close();
			} catch (IOException e) {
				
				e.printStackTrace();
			}
		}
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值