文件操作及IO

news2024/11/17 23:57:08

目录

一、文件的分类

二、文件路径

三、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<String> result = new ArrayList<>();

    public static void getAllFiles(String basePath){
        File file = new File(basePath);
        if(file.isFile()){
            //如果是一个文件就之间add
            result.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来实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/60672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基于SSM的海淘商城系统

随着计算机网络的普及,电子商务的兴起,网络支付以及网络安全体系逐渐完善,人们的生活进入了网络时代,越来越多的人习惯于乐于网上购物,只需上网轻轻点击鼠标便能够买到心仪商品。 本系统主要是针对广大网络消费者而开发的,专为网络消费者打造,建设一个”全球购”海淘商城系统。…

Redis学习笔记(五)

主从复制 单机redis的风险和问题 机器故障&#xff1a;硬盘故障、系统崩溃容量瓶颈&#xff1a;内存不足&#xff0c;无限升级内存结论&#xff1a;为了避免单点redis服务器故障&#xff0c;准备多台服务器互相连通&#xff0c;将数据复制多个副本保存在不同的服务器上&#xf…

Vue 官方文档2.x教程学习笔记 1 基础 1.5 计算属性和侦听器 1.5.2 侦听器

Vue 官方文档2.x教程学习笔记 文章目录Vue 官方文档2.x教程学习笔记1 基础1.5 计算属性和侦听器1.5.2 侦听器1 基础 1.5 计算属性和侦听器 1.5.2 侦听器 虽然计算属性在大多数情况下更合适&#xff0c;但有时也需要一个自定义的侦听器。 这就是为什么 Vue 通过 watch 选项提…

图像处理:模糊图像判断

目录 上期回顾 采用Laplace算子的原因 实现的效果 图片素材 代码的展示与讲解 效果展示 项目资源 上期回顾 上一次的图像清晰度评价没有成功&#xff0c;主要的原因是那几张图像清晰度评价函数都实际都采用了梯度求解&#xff0c;不同的场景灰度的明暗不同&#xff0c;…

数据结构栈的实现

目录栈的概念栈的结构声明初始化数据入栈出栈判断栈是否为空取栈顶的值销毁栈栈的概念 栈是一种线性表&#xff0c;插入数据的一端叫栈顶&#xff0c;另一端叫栈底。 入栈&#xff1a;数据从栈顶进入栈中 出栈&#xff1a;数据从栈顶删除 所以&#xff0c;栈的特点就是先进后出…

Spark - OnYARN 模式搭建,并使用 Scala、Java、Python 三种语言测试

一、SparkOnYarn搭建 安装前需要提前安装好 hadoop 环境&#xff0c;关于 HDFS 和 Yarn 集群的搭建可以参考下面我的博客&#xff1a; https://blog.csdn.net/qq_43692950/article/details/127158935 下面是我 Hadoop 的安装结构 主机规划设置主机名角色192.168.40.172node1N…

1. STL六大组件

0. 介绍 STL提供六大组件&#xff0c;它们之间可以彼此套用&#xff0c;如下图所示&#xff1a; 容器&#xff08;containers&#xff09;&#xff1a;用于存放数据&#xff1b; 算法&#xff08;algorithms&#xff09;&#xff1a;包含各种常用算法&#xff1b; 迭代器&…

Dubbo-RPC核心接口介绍

前言 Dubbo源码阅读分享系列文章&#xff0c;欢迎大家关注点赞 SPI实现部分 Dubbo-SPI机制 Dubbo-Adaptive实现原理 Dubbo-Activate实现原理 Dubbo SPI-Wrapper 注册中心 Dubbo-聊聊注册中心的设计 Dubbo-时间轮设计 通信 Dubbo-聊聊通信模块设计 RPC 聊聊Dubbo协议 …

go语言日志实现详解(打印日志、日志写入文件和日志切割)

log包定义了Logger类型&#xff0c;该类型提供了一些格式化输出的方法。本包也提供了一个预定义的“标准”logger&#xff0c;可以通过调用函数Print系列(Print|Printf|Println&#xff09;、Fatal系列&#xff08;Fatal|Fatalf|Fatalln&#xff09;、和Panic系列&#xff08;P…

[附源码]计算机毕业设计JAVA医院挂号管理系统

[附源码]计算机毕业设计JAVA医院挂号管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

简单的咖啡文化静态HTML网页设计作品 DIV布局咖啡馆文化网页模板代码 DW咖啡网站制作成品

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

达梦安装目录各个文件夹解析

达梦安装目录各个文件夹解析 总览&#xff1a; 1、bin目录 bin目录&#xff1a;存放常用命令和.so(shared object)文件&#xff08;动态链接库类似Windows的ddl文件、Linux的lib目录&#xff09; 2、bin2目录 bin2目录&#xff1a;存放utf8的lib库 3、data目录 data目录&#…

LeetCode 744. 寻找比目标字母大的最小字母

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 744. 寻找比目标字母大的最小字母 &#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名…

Centos7 内核升级(5.4.225)

文章目录一、背景二、在线 yum 安装1&#xff09;查看当前内核版本信息2&#xff09;导入仓库源3&#xff09;选择 ML 或 LT 版本安装4&#xff09;设置启动5&#xff09;生成 grub 配置文件6&#xff09;重启7&#xff09;验证是否升级成功8&#xff09;删除旧内核&#xff08…

【应用】布隆过滤器

布隆过滤器布隆过滤器简介及使用场景布隆过滤器底层原理数据添加数据查询布隆过滤器的优缺点Redis 整合布隆过滤器Java 整合布隆过滤器SpringBoot 整合 Redis 使用布隆过滤器布隆过滤器简介及使用场景 布隆过滤器实际上是一列很长的二进制数组&#xff0c;在每个位置上只有 0 …

CommonsCollections4利用链分析

目录 前言&#xff1a; 0x01 代码分析 总结一下利用链&#xff1a; POC: 完整的POC&#xff1a; 图 1-1 cc利用链前言&#xff1a; CC4这条链用到了新的Commons-Collections4这个依赖&#xff0c;由于这个依赖与之前的版本具有较大的出入&#xff0c;连groupId和artifactId…

Android 基础知识4-2.1常用控件文本框(TextView)

TextView就是用来显示文本标签的控件&#xff0c;修改使用TextView显示文本的颜色、大小等属性。 实例代码&#xff1a; xml&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.co…

有源晶振与无源晶振的区别

今天就来和大家分享下有源晶振和无源晶振的区别。 1.从外形上有源大部分有源晶振是这种四脚贴片的&#xff0c;差分有源晶振的话一般是6脚的&#xff0c;当然还有其它的一些封装 而无源晶振的有两脚插件的也有和有源晶振一样的这种四脚贴片的 2.无源晶振不需要额外供电&#x…

.移动端适配的解决方案

何为移动端适配 移动端适配就是值在不同的移动端 可以去讲我们的内容适应不同屏幕尺寸大小 我们之前写单位用的是px这个单位 但是这是一个写死的单位 rem 所以我们用一个可变的单位 rem &#xff08;是指用html字体大小作为单位 比如说我们设置html字体大小为16px 那么 …

[附源码]计算机毕业设计基于springboot的残障人士社交平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…