[文件操作] File 类的用法和 InputStream, OutputStream 的用法
能吃是不是件幸福的事呢
文章目录
- 前言
- 1. 文件的相关定义
- 2. 文件类型
- 3. Java对文件系统的操作
- 3.1 对文件的基础操作
- 3.2 读文件
- 3.3 写文件
前言
从这章开始,我们就开始学文件操作相关的知识了~
1. 文件的相关定义
1.文件的定义可以从狭义和广义两个方面解释.
狭义: 指硬盘上的文件和目录(目录指文件夹)
广义: 在操作系统中,把很多的硬件设备和软件资源都抽象成文件,按文件的方式统一管理.
2.盘符
如D盘,C盘,用d: c: 表示,不区分大小写.
3.路径
绝对路径,就是电脑中文件的位置.如下图,双击箭头处,能获取到文件的绝对路径.
F:\Java初阶练习\LinkedList
相对路径: 以当下目录为基准,以" . “或者” … “开头,例如当下目录为F: ,则可以用”./Java初阶练习"代表Java初阶练习.
2. 文件类型
文件类型分为文本文件和二进制文件.
文本文件存的是文本,以字符串的方式存储.
二进制文件可以存任何类型的数据.
如何判断一个文件是文本文件还是二进制文件呢?
一个文件右键,以记事本方式打开,如果显示是乱码,则是二进制文件.
3. Java对文件系统的操作
3.1 对文件的基础操作
1.文件对象的创建
我们使用File类的构造方法,给要创建的文件指定一个路径.如下代码,f0就是在相应路径下的文件。
File f0 = new File("d:/file1.txt");
获取文件名 System.out.println(f.getName());
获取文件路径 System.out.println(f.getPath());
获取文件绝对路径 System.out.println(f.getAbsolutePath());System.out.println(f.getCanonicalPath());
是否存在 System.out.println(f.exists());
是否是文件 System.out.println(f.isFile());
执行结果如下(file不存在)
2.创建目录
//创建目录
File dir = new File("./test");dir.mkdir();
//创建多级目录
File dir2 = new File("./test/aaa");dir2.mkdirs();
3.文件重命名
如下代码,给f1重命名,将dest的名字付给f1.
File f1 = new File("./test/aaa");File dest = new File("./test/AAA");f1.renameTo(dest);
3.2 读文件
读出来的字节用b接收,如果b为-1,则说明文件读取完毕.
用read()方法进行读取,这个方法有三种形式,无参,传数组,传数组的固定部分.
下面的代码是无参的形式
InputStream in0 = new FileInputStream("d:/file1.txt");while(true){int b = in0.read();if(b == -1){ //b == -1,代表文件读取完毕break;}System.out.printf("%x\n",(byte)b);}in0.close();
执行结果如下,因为以字节形式显示,所以对应ASCII码表,这四个代表字符a,b,c,d.
以数组形式读取,把文件读到数组里.
注意,循环里的len显示的是数组真实被填写的长度.
InputStream in1 = new FileInputStream("d:/file1.txt");int len = 0;while(true){//一次读取1024个字节byte[] b = new byte[1024];len = in1.read(b);if(len == -1){break;}for(int i = 0; i < len; i++){System.out.printf("%x\n", b[i]);}}in1.close();
//读取部分元素,0表示从数组0下标开始读,1表示读取1个元素.
InputStream in1 = new FileInputStream("d:/file1.txt");int len = 0;//一次读取1024个字节byte[] b = new byte[1024];len = in1.read(b, 0, 1);for (int i = 0; i < len; i++) {System.out.printf("%x\n", b[i]);}in1.close();
3.3 写文件
写文件用write方法写,同样有三种形式,直接写,以数组形式写,把数组的部分元素写进文件.
1.直接把元素写进去,可以直接用字符表示,也可以用ASCII码表示.
注意flush()方法,我们写文件时,电脑不会写一个存一个,是先把元素存到缓冲区,直到缓冲区满了或者到了指定时刻,才会真正把缓冲区里的数据一次性转到硬盘上,提高效率.
注意,我们这里不用写close(),自己关闭文件了,把代码放进try()里,文件写完会自动关闭.
try (OutputStream o = new FileOutputStream("d:/file1.txt")) {o.write('h');o.write(98);o.write(99);o.write(100);o.flush();}
以数组形式写入
try(OutputStream o1 = new FileOutputStream("F:/Write.txt")) {//直接把全部数组元素写入byte[] b = new byte[]{(byte) 'h', (byte) 'a', (byte) 'b'};o1.write(b);//从0开始写,写1个元素o1.write(b,0,1);//把字符串转成byte数组写入String s = "i am warm";byte[] b1 = s.getBytes();o1.write(b1);String s1 = "我是坏人";byte[] b2 = s1.getBytes("utf-8");o1.write(b2);o1.flush();}
2.用printWriter写入.
用printWriter可以用print之类的方法写文件.
try( OutputStream o2 = new FileOutputStream("f:/PrintWrite.txt")) {OutputStreamWriter osw = new OutputStreamWriter(o2, "utf-8");PrintWriter pw = new PrintWriter(osw);pw.print("mind");pw.println("bb");pw.printf("%d %s", 1, "hh");pw.flush();}
执行结果如下
本文完
相关文章:

[文件操作] File 类的用法和 InputStream, OutputStream 的用法
能吃是不是件幸福的事呢 文章目录前言1. 文件的相关定义2. 文件类型3. Java对文件系统的操作3.1 对文件的基础操作3.2 读文件3.3 写文件前言 从这章开始,我们就开始学文件操作相关的知识了~ 1. 文件的相关定义 1.文件的定义可以从狭义和广义两个方面解释. 狭义: 指硬盘上的文…...

索莫菲模型的一些理解 Smomerfeld Model
如何解释传统热容算出来的数值与量子模型下的区别? 因为只有费米能附近的电子才能够进行移动,这个是问题的差别所在 我们下面就来介绍如何求费米能(费米能的计算) 既然费米能附近的电子很重要,那么附近的电子有多少很…...

SAP ERP系统MM模块常用增强之四:采购申请输入字段的校验检查
在SAP/ERP项目的实施中采购管理模块(MM)的创建和修改采购申请一般都会有输入字段校验检查的需求,来防止业务人员录入错误或少录入数据,这方面需求部分是可以通过配置实现,比如一些字段是否必输,是否显示等&…...

STM32C0介绍(1)----概述
概述 STM32C0系列微控制器是意法半导体公司推出的一款低功耗、高性能的微控制器产品。它们被设计用于需要小型、低功耗和高度可集成的应用程序,如传感器、消费品、电池供电设备、家庭自动化和安全等应用。该系列的微控制器采用ARM Cortex-M0内核,具有丰…...
windows无盘启动技术开发之传统BIOS(Legacy BIOS)引导程序开发之一
by fanxiushu 2023-03-01 转载或引用请注明原始作者。这个话题可能有点老,UEFI BIOS 已经大量存在,而Legacy BIOS最终会被取代。但是也是作为无盘启动技术里不可或缺的,毕竟还有许多老型号的电脑存在,而且为了兼容性,有…...
mysql实现if语句判断功能的六种使用形式
文章目录 前言一、ifnull函数二、nullif函数三、if函数四、if语句(多用于存储过程)五、if-else语句(多用于存储过程)六、if-elseif-else语句(多用于存储过程)总结前言 在Mysql数据库中实现判断功能有很多方式,具体又分为函数和if语句形式,函数的好处是可以作为sql的一…...

在Vue3这样子写页面更快更高效
前言 在开发管理后台过程中,一定会遇到不少了增删改查页面,而这些页面的逻辑大多都是相同的,如获取列表数据,分页,筛选功能这些基本功能。而不同的是呈现出来的数据项。还有一些操作按钮。 对于刚开始只有 1ÿ…...

做软件测试,如何才能实现月入20K?
听我的,测试想要月入20k。 首先你要去大厂,不在大厂起码也得在一线城市,北上广深。 二线城市的话成都、杭州最好。 不然的话想都不要想。 像我之前整理过成都的公司,除了字节跳动、蚂蚁金服、滴滴、美团、京东、平安、字节跳动…...

mysql last lesson
1:创建用户 create user zhang identified by 12345678;2:给用户授权,撤销授权, grant.......to revoke ....... 3:将数据库中的数据导出 C:\Windows\system32>mysqldump bjpowernode>C:\bjpowernode.sql -uroot -p12345678 4&#…...

一、Redis入门概述(是什么,能干嘛,去哪下,怎么玩)
一. redis是什么? Redis:REmote Dictionary Server(远程字典服务器)官方解释: Remote Dictionary Server(远程字典服务)是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高性能的Key-Value数据库提供了丰富的数据结构ÿ…...
(六十二)当我们在SQL里进行分组的时候,如何才能使用索引?
今天我们接着上次的内容来谈谈在SQL语句里假设你要是用到了group by分组语句的话是否可以用上索引,因为大家都知道,有时候我们会想要做一个group by把数据分组接着用count sum之类的聚合函数做一个聚合统计。 那假设你要是走一个类似select count(*) fr…...

python字符串练习
python字符串练习 1.去掉字符串中所有的空格 s This is a demo print(s.replace( , )) 2.获取字符串中数字的个数 data input("请输入一些字符串:") a 0 for i in data:if i.isdigit():a a 1 print("数字个数:", a)3.将字母全部转换为…...

Java-封装、继承、多态
封装 访问控制权限又成为“封装”,是面向对象三大特征中的一种。核心是,只对需要的类可见。 继承 继承是所有OOP(Object Oriented Programming)语言和Java语言都不可或缺的一部分。 只要创建一个类,就隐式继承自Obje…...

问题三十二:离散二维傅立叶变换(Discrete Fourier Transformation)
为了将灰度图像表示为频谱图,我们需要进行以下步骤: 加载图像并将其转换为灰度图像。对图像进行二维离散傅里叶变换。将变换结果表示为幅度谱和相位谱。可以对幅度谱和相位谱进行可视化,以查看频率分布。对幅度谱和相位谱进行逆变换…...

恢复谷歌翻译的究极方法
谷歌翻译为什么会失效,我想各位在去年11月的时候就知道了。可是要怎么解决失效的问题呢?之前我们是通过手动Ping可以连接的ip各位可能觉得麻烦,心里觉得什么档次还要我手动ping就没有可以自动扫描的吗?还别说真的有我最近发现一个…...

string函数以及string常用接口
本文介绍的是C关键字string中一些重要用法,以及各种字符串序列的处理操作 ——飘飘何所似,天地一沙鸥 文章目录前言一、string(字符串类)二、string类对象的容量操作2.1 size/length2.2 capacity2.3 empty/clear2.4 resize/reser…...

分享一篇由C语言实现《数据结构》无头无循环单链表
三月,你好,各位csdn uu们好 文章目录前言一、何为单链表二、单链表基本操作(增,删,查,改,销毁,遍历)1.查找与修改、销毁与遍历2.链表插入与删除操作三、单链表 VS 顺序表…...

C盘爆满?两个超简单的解决办法
我们在使用电脑的过程中,经常容易出现C盘爆红,反而其他盘还有大量可用空间的情况。为什么会这样呢?其实主要就两种原因:一是电脑使用习惯不好,不管什么软件都默认安装在C盘,大文件又喜欢放在桌面࿰…...

ThreadLocal
ThreadLocalThreadLocalMapgetsetremove内存泄漏key用强/弱引用entry继承了弱引用ThreadLocal 一个对象的所有线程会共享其全局变量——>线程不安全 解决方式: 方式一:同步机制,加锁(时间换空间) 方式二:…...

Java基础:JDK7-时间Date
JDK7以前时间相关类 1.Date Date date new Date(); , sout(date)得到的是现在所处位置的时间 Date date new Date(0L); , sout(date)得到的是时间原点也就是1970年1月1日08:00(东八区). date.setTime(1000L); sout(date)得到的是时间原点后一秒钟的时间 long time date.g…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...