文件操作及IO
创始人
2024-03-17 08:24:38
0

目录

一、文件的分类

二、文件路径

三、File 常见方法

        1、get 相关方法使用

2、文件的创建和删除

3、遍历目录下所有文件

四、文件读写


一、文件的分类

站在程序员的角度,文件通常可以分为两类:

  1. 文本文件:以字符形式存储
  2. 二进制文件:以字节方式存储

有的朋友可能有疑惑:字符不也是由字节构成的吗?

是的,文本文件中的字符的确是由一个个相邻的字符构成的,但这些相邻的字节之间是存在关系的,而二进制文件里面存储的字节毫无关系!!

二、文件路径

文件路径通常可以分为两类:

  1. 绝对路径(绝对路径 (absolute path) : 以一个盘符开头的路径,就是绝对路径)
  2. 相对路径(相对路径 (relative path) 一般是以.或者..开头的路径.一般会有一个基准,去找对应的路径)

三、File 常见方法

Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述

File 属性:

修饰符及类型属性说明
static StringpathSeparator依赖于系统的路径分隔符,String 类型的表示
static charpathSeparator依赖于系统的路径分隔符,char 类型的表示

构造方法:

签名说明
File(File parent, Stringchild)根据父目录 + 孩子文件路径,创建一个新的 File 实例
File(String pathname)根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径
File(String parent, Stringchild)根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用路径表示

 方法:

方法签名说明
String getParent()返回 File 对象的父目录文件路径
String getName()返回 FIle 对象的纯文件名称
String getPath()返回 File 对象的文件路径
String getAbsolutePath()返回 File 对象的绝对路径
String getCanonicalPath()返回 File 对象的修饰过的绝对路径
boolean exists()判断 File 对象描述的文件是否真实存在
boolean isDirectory()判断 File 对象代表的文件是否是一个目录
boolean isFile()判断 File 对象代表的文件是否是一个普通文件
boolean createNewFile()根据 File 对象,自动创建一个空文件。成功创建后返回 true
boolean delete()根据 File 对象,删除该文件。成功删除后返回 true
void deleteOnExit()根据 File 对象,标注文件将被删除,删除动作会到JVM 运行结束时才会进行
String[] list()返回 File 对象代表的目录下的所有文件名
File[] listFiles()返回 File 对象代表的目录下的所有文件,以 File 对象表示
boolean mkdir()创建 File 对象代表的目录
boolean mkdirs()创建 File 对象代表的目录,如果必要,会创建中间目录
boolean renameTo(File dest)进行文件改名,也可以视为我们平时的剪切、粘贴操作
boolean canRead()判断用户是否对文件有可读权限
boolean canWrite()判断用户是否对文件有可写权限

小练习:

1、get 相关方法使用

package com;import java.io.File;
import java.io.IOException;public class Demo {public static void main(String[] args) throws IOException {File file = new File("./test.txt");// file 里边的路径是可以不存在的哦~~~System.out.println(file.getName());System.out.println(file.getAbsolutePath());System.out.println(file.getPath());System.out.println(file.getCanonicalPath());}
}

运行截图:

 

2、文件的创建和删除

import java.io.File;
import java.io.IOException;public class FileDemo2 {public static void main(String[] args) throws IOException {File file = new File("./test.txt");System.out.println("创建前:");System.out.println("文件是否真实存在: "+file.exists());System.out.println("文件是否是一个目录: "+file.isDirectory());System.out.println("文件是否是一个普通文件: "+file.isFile());System.out.println("创建后:");System.out.println("文件创建是否成功: "+file.createNewFile());System.out.println("文件是否真实存在: "+file.exists());System.out.println("文件是否是一个目录: "+file.isDirectory());System.out.println("文件是否是一个普通文件: "+file.isFile());System.out.println("再次创建:");System.out.println("文件创建是否成功: "+file.createNewFile());}
}

 

3、遍历目录下所有文件

import java.io.File;
import java.util.ArrayList;
import java.util.List;public class FileDemo9 {// 这里的result 用来记录每一个目录里面的路径public static List result = new ArrayList<>();public static void getAllFiles(String basePath){File file = new File(basePath);if(file.isFile()){//如果是一个文件就之间addresult.add(basePath);return ;}else if (file.isDirectory()){//这里是一个目录 就需要递归String[] files = file.list();for (String f : files){getAllFiles(basePath+"/"+f);}}else{//非普通文件,暂不考虑}}public static void main(String[] args) {getAllFiles(".");for (String s : result){System.out.println(s);}}
}

四、文件读写

 对文件的读写根据文件的类型大体可以分为两种:

  • 字节流:针对二进制文件,以字节为单位进行读写
  • 字符流:针对文本文件,以字符为单位进行读写

InputStream 读取:

方法说明
int read()读取一个字节的数据,返回 -1 代表已经完全读完了
int read(byte[] b)最多读取 b.length 字节的数据到 b 中,返回实际读到的数量;-1 代表以及读完了
int read(byte[] b,int off, int len)最多读取 len - off 字节的数据到 b 中,放在从 off 开始,返回实际读到的数量;-1 代表以及读完了
void close()关闭字节流

InputStream是一个抽象类.可用使用FileInputStream来实现. 

FileInputStream 的构造方法

构造方法说明
FileInputStream(File file)利用 File 构造文件输入流
FileInputStream(String name)利用文件路径构造文件输入流

OutputStream 写入:

方法说明
void write(int b)写入要给字节的数据
void write(byte[] b)将 b 这个字符数组中的数据全部写入 os 中
int write(byte[] b, int off,int len)将 b 这个字符数组中从 off 开始的数据写入 os 中,一共写 len 个
void close()关闭字节流
void flush()重要:我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 为了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,调用

 OutputStream 也是一个抽象类,可以使用FileOutputStream来实现

相关内容

热门资讯

广东建工:公司与广州地铁不存在... 证券之星消息,广东建工(002060)12月25日在投资者关系平台上答复投资者关心的问题。 投资者提...
“政策找人”暖民心 服务下沉“... 城乡居民基本医疗保险作为我国覆盖人群最多的基本医疗保险,是基本医疗保障体系中的重要一环。为切实维护人...
我市举办调解工作专题培训 为深入贯彻法治政府建设要求,全面提升基层矛盾纠纷化解能力,12月19日,市司法局牵头举办了全市调解工...
河南将优化涉企法律服务,营造法... 【大河财立方 记者 朱娟 见习记者 岳炎霖】12月26日,大河财立方记者在省政府新闻办召开的《河南省...
新版河南省优化营商环境条例哪些... 【大河财立方 记者 朱娟 见习记者 岳炎霖】12月26日,河南省政府新闻办召开《河南省优化营商环境条...
原创 中... 12月25日,家纺企业富安娜披露了关于中信证券固定收益类理财产品逾期兑付的进展公告。公告显示,公司近...
封关临近!海南自贸港政策红利释... 交易所数据显示,2025年12月26日09时47分,京粮控股当前价格为8.92元,涨幅为9.99%,...
字节跳动通报:120名员工被辞... 12月25日,字节跳动披露2025年三季度内部违规案例的处理情况。通报显示,三季度共有120名员工因...
上亿理财难收回,家纺龙头富安娜... 12月25日晚,家纺龙头企业深圳市富安娜家居用品股份有限公司(以下简称富安娜,002327.SZ)发...
华院计算取得法律要素图谱辅助类... 国家知识产权局信息显示,华院计算技术(上海)股份有限公司取得一项名为“一种法律要素图谱辅助类案推荐方...