当前位置: 首页 > news >正文

JavaIO详解--JavaIO的整体结构以及File类的使用

一、概述

IO即输入输出系统,java的IO总体可以分为字符流(Reader、Writer)和字节流(InputStream、OutputStream)。

字节流直接对二进制数据进行操作;字符流在操作的时候使用了缓冲区(即内存)。

字节流一般用来对媒体文件操作,比如图片;字符流一般可用来操作文本文件,如txt文件。

掌握javaIO需要掌握一个类(File)、一个接口(Serializable)和四个抽象类(Reader、Writer、InputStream、OutputStream)

二、JavaIO的整体结构

三、File类

File类是在整个java.io包中里面唯一一个与文件本身有关的操作类,通过查看官方文档Java PlatForm SE 8,可以看到File类一共提供了四种构造方法:

File(File parent, String child) 
File(String pathname)  
File(String parent, String child)  
File(URI uri) 

上面四种构造方法包含了所有可能出现的路径格式

3.1、FIle类对文件的主要操作:

File类对文件的主要操作是以下几个:

boolean createNewFile()  创建文件
boolean delete()  删除文件
boolean exists()  判断文件是否存在

通过代码简单尝试:

public static void main(String[] args) throws IOException {
    File file=new File("F://testFile.txt");
    if (file.exists()){
        file.delete();
    }else {
        file.createNewFile();
    }
}

注意两个问题:

1.删除和新建文件是存在延迟的,并非事实。

2.不同的操作系统之间路径分隔符不同,因此可以使用File.separator代替分隔符

File file=new File("F:"+File.separator+"testFile.txt");

3.2、File类对目录的主要操作

boolean mkdir() 创建单级目录
boolean mkdirs() 创建多级目录  
String getParent() 以String方式获取父目录
File getParentFile()  以File方式获取父目录

当我们需要创建一个包含多级目录的文件时,就可以使用上述的方法

public static void main(String[] args) throws IOException {
    File file=new File("F:"+File.separator+"二级目录"+File.separator+"testFile.txt");
    if (!file.getParentFile().exists()){
        file.getParentFile().mkdirs();
    }
    file.createNewFile();
}

3.3、对文件信息的操作

File类提供了许多对文件信息的操作:

boolean canExecute() 判断文件是否可执行
boolean canRead()  判断文件是否可读
boolean canWrite()  判断文件是否可写
String getAbsolutePath()  获取文件绝对路径
String getName() 获取文件或目录的名称
boolean isDirectory() 判断是否是目录
boolean isFile()  判断是否是文件
long lastModified()  最后修改时间
long length()   文件的大小

3.4、获取文件目录信息

String[] list()  返回所有子目录的信息
File[] listFiles()  返回完整的路径信息

通过代码和结果展示:

public static void main(String[] args) throws IOException {
    File file=new File("F:"+File.separator);
    System.out.println(Arrays.toString(file.list()));
    System.out.println(Arrays.toString(file.listFiles()));
}

结果如下:

通过递归的方式,我们可以找到某个路径下的所有完整地址

public static void main(String[] args) throws IOException {
    File file=new File("F:"+File.separator);
    listDIR(file);
}
public static void listDIR(File file){
    if (file.isDirectory()){
        File[] result=file.listFiles();
        if (result!=null){
            for (int i = 0; i < result.length; i++) {
                listDIR(result[i]);
            }
        }
        System.out.println(file);
    }
}

运行结果:

四、结论

File类的操作只针对于文件的信息,无法对文件中的内容进行操作,而想要操作文件的内容就需要使用字节流和字符流。

相关文章:

  • 学习笔记:对象,原型和继承(1)
  • JavaIO详解--快速学懂字节流与字符流
  • 搭建IM服务 so easy
  • JavaIO详解--尽可能将BIO、NIO、AIO讲得通俗易懂
  • 用jedis获取redis连接(集群和非集群状态下)
  • Mysql的索引调优详解:如何去创建索引以及避免索引失效
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • 经验分享:JAVA实习生刚进公司主要做些什么?以及进入职场后我的心理变化
  • oracle迁移mysql数据库注意(转)
  • 实习工作经历:代码在本地明明可以跑通,怎么放到服务器上就不行了呢?
  • 搭建一个包含多种Get请求和Post请求的工具类
  • 一致性hash原理与实现
  • 作为一个程序员需要了解多少网络方面的基础?网络基础总结(不断更新)
  • 四千字从源码分析ConcurrentHashMap的底层原理(JDK1.8)
  • redis学习笔记6--集合类型
  • [Vue CLI 3] 配置解析之 css.extract
  • bearychat的java client
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript-Array类型
  • js中forEach回调同异步问题
  • Sass 快速入门教程
  • 从PHP迁移至Golang - 基础篇
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 区块链将重新定义世界
  • 如何优雅地使用 Sublime Text
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • linux 淘宝开源监控工具tsar
  • 函数计算新功能-----支持C#函数
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • #define,static,const,三种常量的区别
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #LLM入门|Prompt#3.3_存储_Memory
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (1)(1.11) SiK Radio v2(一)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (轉)JSON.stringify 语法实例讲解
  • .NET 发展历程
  • .NET 中让 Task 支持带超时的异步等待
  • .Net6使用WebSocket与前端进行通信
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @Builder用法
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [].slice.call()将类数组转化为真正的数组
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式