java基础day11:enum、File、RandomAccessFile

一、enum---枚举----JDK1.5

对能够列举的数据进行封装----------枚举类型

枚举本质上也是class。

定义枚举:

enum week{

........

}

enum定义的枚举实际上直接继承了Emum <E extends Enum<E>>。

在枚举类型中,构造方法默认是private(私有的)。

public class Demo1 {public static void main(String[] args) {System.out.println(color.READ.getName());}
}
//关于主题颜色的枚举类型
enum color{READ("红色","夕阳红"),GREEN("绿色","草绿色"),BLUE("蓝色","天空色");private String dis;private String name;private color(String name,String dis){
​this.name=name;this.dis=dis;}public String getDis() {return dis;}
​public String getName() {return name;}
​public void setName(String name) {this.name = name;}
​public void setDis(String dis) {this.dis = dis;}
}

二、File

1.定义

File表示文件或文件夹

2.构造

File(String pathName)

File(URI uri) //URI 统一资源标识 URL 统一资源定位

3.常用方法

常用方法意义
创建
createNewFile()创建新文件---当文件不存在的时候才会创建
mkdir()创建日录 ---每次只能创建一层日录
mkdirs()创建多层日录
删除
delete()删除文件或者日录---如果删除的是日录且该日录下有子文件或子日录则删除失败
判断
canWrite()判断此文件是否可写
isDirrctory()判断是否是一个目录
isFile()判断是否是一个文件
exists()-判断此文件或者目录是否真实存在的
isAbsolute()判断file所表示的文件的路径是否是一个绝对路径
isHidden()判浙file是否是一个隐藏文件
获取
listFiles()获取指定目录下子文件和子目录组成的数组
getName()获取文件名
getAbsoluteFile()获取file所在绝对路径

练习:利用File的api实现统计某个目录(包括子目录)中的所有png图片的数量。请选择要统计的文件:

1:统计html文件 ​ 2:统计css文件 3:统计js文件 ​ 4:统计图片文件 png,jpeg,jpg,gif

import java.io.File;
import java.util.Scanner;
​
public class Exercise {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String path="D:\\nextbook\\java\\assets\\assets";while (true) {System.out.println("请选择您要统计的文件");System.out.println("1.html文件");System.out.println("2.png文件");System.out.println("3.jpg文件");;System.out.println("4.jepg文件");System.out.println("5.css文件");System.out.println("99.退出");
​int id = scanner.nextInt();switch (id) {case 1:System.out.println("html文件个数为:"+bianli(path, "html"));break;case 2:System.out.println("png文件个数为:"+bianli(path, "png"));break;case 3:System.out.println("jpg文件个数为:"+bianli(path, "jpg"));break;case 4:System.out.println("jpeg文件个数为:"+bianli(path, "jpeg"));break;case 5:System.out.println("css文件个数为:"+bianli(path, "css"));break;case 99:return;default:System.out.println("输入选择有误,请重新选择");}}
​}public static int bianli(String path,String str) {// 获取文件对象File f = new File(path);// 把里面的文件装进数组File[] files = f.listFiles();int num = 0;for (File file : files) {if (file.isDirectory()) {// 如果是文件夹就打开用这个方法,并累加子文件夹中的图片数量num += bianli(file.getAbsolutePath(),str);} else if (file.isFile()) {String name = file.getName();if ( name.endsWith(str)) {System.out.println(name);num++;}}}
​return num;}
}
​

4、文件处理中的路径问题

分隔符: ​ window: 路径分隔符使用"",程序中"D:\test\logo.png" ​ Linux/Mac: 路径分隔符使用"/" ​ 路径: ​ 相对路径: ​ 相对于当前文件的位置 ​ . 表示当前目录 ​ .. 表示上一层目录 ​

绝对路径: window -- 盘符+路径 D:\workspace\index.html Linux/Mac -- /+路径 /workspace/index.html java程序中的路径分隔符:根据不同系统平台自适应 File.separator System.getProperty("file.separator"

三、RandomAccessFile

在操作文件的时候会把文件看做一个大型的字节数组。 ​ 每一个RandomAccessFile对象创建好之后默认都是从第0个字节开始操作。

RandomAccessFile

1.可以自由访问文件的任意位置。 ​ 2.允许自由定位文件记录指针。

3.只能读写文件而不是流。 ​ RandomAccessFile类中包含一个游标(文件指针:隐含数组的索引),用以标识当前读写处的位置(文件指针开始位于文件头(也就是0处),当读/写了n个字节后,文件记录指针将会向后移动n个字节。),RandomAccessFile可以自由移动该游标。

RandomAccessFile包含了如下两个方法来操作文件记录指针。

记录指针的方法
long getFilePointer()返回文件记录指针的当前位置
void seek(long pos)将文件记录指针定位到pos位置。(调用本地方法seek0)

RandomAccessFile类有两个构造器:

构造器方法
RandomAccessFile(String name, String mode)
RandomAccessFile(File file, String mode)

创建一个随机访问文件的流

(1)构造器1中name会转换为构造器2中的file,RandomAccessFile(String name, String mode)等价于RandomAccessFile(new File(name), String mode)

(2)mode – 访问模式 ➢ "r":以只读方式打开指定文件。如果试图对该RandomAccessFile执行写入方法,都将抛出IOException异常。 ➢ "rw":以读、写方式打开指定文件。如果该文件尚不存在,则尝试创建该文件。 ➢ "rws":以读、写方式打开指定文件。相对于"rw"模式,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。 ➢ "rwd":以读、写方式打开指定文件。相对于"rw"模式,还要求对文件内容的每个更新都同步写入到底层存储设备。

"rws"和"rwd"模式的工作方式与FileChannel类的force(boolean)方法非常相似,传递true和false两种参数来实现,但它们始终适用于每个 I/O 操作,因此通常更有效。

“rwd”模式可用于减少执行的 I/O 操作的数量。 使用“rwd”只需要更新要写入存储的文件内容; 使用“rws”需要更新文件内容及其要写入的元数据,这通常至少需要再进行一次低级 I/O 操作。

RandomAccessFile类的read()方法和write()方法和流的操作执行上没有太大区别

常用方法

常用方法描述
skipBytes(int n)该方法用于尝试跳过输入的n个字节以丢弃跳过的字节(跳过的字节不读取):int skipBytes(int n) 该方法可能跳过一些较少数量的字节(可能包括0),这可能由任意数量的条件引起,在跳过n个字节之前已经到大文件的末尾只是其中的一种可能 该方法不抛出EOFException,返回跳过的实际字节数,如果n为负数,则不跳过任何字节**
getFD()可以返回这个文件的文件描述符
length()可以返回文件的长度
setLength(long newLength)还可以设置文件的长度
close()RandomAccessFile在对文件访问操作全部结束后,要调用close()方法来释放与其关联的所有系统资源

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

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

相关文章

基于SVD奇异值分解的图像压缩算法(Python实现)

前言 SVD其实和PCA类似&#xff0c;就是丢入一个特征矩阵 X &#xff0c;输出另外一个特征矩阵 X′ , X′ 的维度要比原来的X 要低。并且里面的变量都是原来的变量的线性组合&#xff0c;所以含义也变得不好解释。 简单来说就是数据压缩&#xff0c;特征降维的一种技术&#…

国产AI图片工具,全部免费亲测实用!

近AI生图功能火出圈了&#xff0c;各家大厂都拿出了看家本领&#xff0c;今天就来聊聊即梦AI、通义万相、奇域AI和腾讯元宝的AI生图功能&#xff0c;看看它们各有什么特色吧&#xff01; 一、Dreamina 字节旗下的AI智能平台&#xff0c;简单实用的图片生成&#xff0c;对中国元…

C++ 二叉搜索树

二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值 它的左右…

推荐一款3D建模软件:Agisoft Metashape Pro

Agisoft Metashape Pro是一款强大的多视点三维建模设计辅助软件&#xff0c;Agisoft Metashape是一款独立的软件产品&#xff0c;可对数字图像进行摄影测量处理&#xff0c;并生成3D空间数据&#xff0c;用于GIS应用&#xff0c;文化遗产文档和视觉效果制作&#xff0c;以及间接…

IntelliJ+SpringBoot项目实战(四)--快速上手数据库开发

对于新手学习SpringBoot开发&#xff0c;可能最急迫的事情就是尽快掌握数据库的开发。目前数据库开发主要流行使用Mybatis和Mybatis Plus,不过这2个框架对于新手而言需要一定的时间掌握&#xff0c;如果快速上手数据库开发&#xff0c;可以先按照本文介绍的方式使用JdbcTemplat…

Linux高阶——1110—线程安全问题解决方法

1、同步、异步、阻塞、非阻塞 同步过程&#xff1a;发起调用&#xff0c;调用者需要等待被调用者的结果 异步过程&#xff1a;发起调用&#xff0c;无需等待被调用的结果&#xff0c;当有结果后&#xff0c;此结果传出&#xff0c;无需主动获取 阻塞和非阻塞&#xff1a;发起…

STM32cubemx+Proteus仿真和keil5联合调试

前面两步 STM32cubemx生成代码 https://blog.csdn.net/weixin_52733843/article/details/143637304 Proteus新建工程 https://blog.csdn.net/weixin_52733843/article/details/143578853 1 *Proteus仿真联合调试* 在Proteus中&#xff0c;双击STM32F103C6芯片&#xff0c…

初识算法 · 位运算常见总结(1)

目录 前言&#xff1a; 位运算基本总结 部分题目代码 前言&#xff1a; ​本文的主题是位运算&#xff0c;通过常见的知识点讲解&#xff0c;并且会附上5道简单的题目&#xff0c;5道题目的链接分别为&#xff1a;191. 位1的个数 - 力扣&#xff08;LeetCode&#xff09; 1…

visualvm远程连接Docker容器中部署的java应用并监控

visualvm远程连接Docker容器中部署的java应用 前言 jdk1.8中自带了&#xff0c;java11中需要单独下载 下载地址 visualvm下载地址 简介 java虚拟机监控&#xff0c;故障排查及性能分析工具。 网络配置 局域网与docker内网打通&#xff0c;请参考&#xff1a;办公网络与Docker内…

NVIDIA RTX 系统上使用 llama.cpp 加速 LLM

NVIDIA RTX 系统上使用 llama.cpp 加速 LLM 文章目录 NVIDIA RTX 系统上使用 llama.cpp 加速 LLMllama.cpp 概述llama.cpp 在 NVIDIA RTX 上的加速性能使用 llama.cpp 构建的开发人员生态系统使用 llama.cpp 在 RTX 平台上加速的应用程序开始使用 适用于 Windows PC 的 NVIDIA …

信息收集系列(二):ASN分析及域名收集

内容预览 ≧∀≦ゞ 信息收集系列&#xff08;二&#xff09;&#xff1a;ASN分析及域名收集前言一、ASN 分析1. 获取 ASN 码2. 使用 ASNMap 获取 IP 范围3. 将 IP 范围转化为 IP 列表 二、关联域名收集1. 顶级域&#xff08;TLD&#xff09;收集测试方法 2. 根域名收集常用方法…

揭秘:b站可以通过弹幕查询到发送者吗?答案是:不可行

查找发送者 发弹幕被找到 最近&#xff0c;我的一个好兄弟遇到了这样一个问题&#xff1a;他在b站发弹幕&#xff0c;结果被人找到了。他对此很困惑&#xff1a;“发送弹幕不是匿名的吗&#xff1f;只有评论才能看到用户名啊&#xff0c;难道发弹幕也可以被找到吗&#xff1f…

安装mysql、Navicat 17

1.安装mysql 下载地址 https://downloads.mysql.com/archives/installer/ 选择最新版本或者你需要的版本 点击第二个Download下载 下载完毕后双击启动&#xff0c;之后是这个页面 选Custom&#xff08;第四个&#xff09;自定义安装&#xff0c;可以将mysql安装到自定义目录…

人工智能助手是否让程序员技能退化?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

RecyclerView进阶知识讲解

在 Android 开发中&#xff0c;RecyclerView 是一种高效的列表和网格布局控件&#xff0c;用于显示大规模数据。尽管基本使用方法简单&#xff0c;但深入理解并掌握其高级进阶用法能大幅提升用户体验和应用性能。下面&#xff0c;我将从布局管理、动画和手势、自定义缓存、优化…

测试用例设计方法之判定表

测试用例设计方法之判定表 1. 为什么要有判定表方法2. 什么是判定表3. 判定表法设计用例步骤4. 判定表使用场景 1. 为什么要有判定表方法 案例: 验证"若用户欠费或者关机, 则不允许主被叫"功能的测试 说明: 等价类和边界值分析法主要关注单个输入类条件的测试并未考…

SpringCloud篇(服务拆分 / 远程调用 - 入门案例)

目录 一、服务拆分原则 二、服务拆分示例 1. 案例需求 2. 案例要求 3. 导入SQL语句 4. 实现思路 4.1. 创建父工程 cloud-demo 管理依赖 依赖导入思路 4.2. 创建子工程 order-servic 4.3. 创建子工程 user-servic 4.4. 创建 cloud_order 数据库和表并插入数据 4.5. …

特征融合篇 | YOLO11改进 | 更换上采样方式之轻量级通用上采样算子CARAFE

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。CARAFE算子的主要特点是在保持轻量级功能的同时&#xff0c;能够提供比其他上采样算子更好的性能。它通过少量的参数和计算量来实现高效的图像上采样。CARAFE算子能够根据像素之间的关系进行自适应的上采样&#xff0c;从而…

Java集合Queue——针对实习面试

目录 Java集合QueueQueue接口的特点是什么&#xff1f;Queue和Deque的区别&#xff1f;ArrayDeque和LinkedList的区别&#xff1f;什么是PriorityQueue&#xff1f;什么是BlockingQueue&#xff1f; Java集合Queue Queue接口的特点是什么&#xff1f; Queue接口在Java中是一个…

【支付宝崩了】复盘

一、背景 2024年11月11日&#xff0c;#支付宝崩了#冲上微博热搜第一 部分网友反映支付宝 App无法正常使用&#xff0c;他们遇到了同一笔订单被扣款三次、余额宝转账至余额后余额显示为0、线下支付后商家未收到款项但银行卡已被扣款等问题。 此外&#xff0c;有网友称支付…