文件操作-IO

文件操作-IO

  • 1.认识文件
    • 1.什么是文件
    • 2.文件路径
  • 2.java中操作文件
    • 2.1 File类的用法
  • 3.InputStream和OutputStream的用法

1.认识文件

1.什么是文件

文件是计算机系统中用来存储数据的基本单位。它是一种用于持久性存储数据的命名、有序的数据集合.计算机系统通过文件系统来组织、管理和访问文件。文件系统提供了一种机制,使得用户和程序可以创建、读取、写入、修改和删除文件,同时也提供了文件的层次结构和存储管理功能。

2.文件路径

在这里插入图片描述

  • 相对路径:相对路径描述了文件或目录相对于当前工作目录的位置.相对路径基于当前所处位置的文件或目录.使用相对路径:. ./Download/aaa
  • 绝对路径是从文件系统根目录开始的完整路径描述,它从文件系统的根目录开始描述文件的位置,包括所有必要的目录结构信息.绝对路径表示为:Data(D:)/Download/aaa
    . ./表示当前文件夹的上个文件
    ./表示当前文件夹

2.java中操作文件

2.1 File类的用法

java.io.File类提供了对文件和目录进行操作的基本方法。它不涉及文件内容的读写,但是可以用于创建、删除、重命名文件或目录,以及获取文件信息等.以下是File类的常见用法:

文件位置就是当前项目创建的位置

  1. 创建文件对象
File file = new File("path/to/your/file.txt"); // 创建文件对象,指定文件路径
  1. 检查文件或目录是否存在
boolean exists = file.exists(); // 检查文件或目录是否存在
  1. 创建新文件或目录
boolean created = file.createNewFile(); // 创建新文件
// 或者
File directory = new File("path/to/your/directory");
boolean dirCreated = directory.mkdir(); // 创建新目录
// 注意:mkdir() 方法只能创建单级目录,如果需要创建多级目录可以使用 mkdirs() 方法
  1. 获取文件信息
String fileName = file.getName(); // 获取文件名
String filePath = file.getAbsolutePath(); // 获取文件的绝对路径
boolean isDirectory = file.isDirectory(); // 检查是否是目录
  1. 删除文件
boolean deleted = file.delete(); // 删除文件
// 或者
file.deleteOnExit();//等到程序退出后再删除
  1. 文件重命名
File oldFile = new File("./newFileName.txt");
File newFile = new File("./src/newFileName.txt");
oldfile.renameTo(newFile); // 重命名文件
//将oldFile重命名为newFile并移动到src目录下

3.InputStream和OutputStream的用法

InputStream 和 OutputStream 是 Java I/O 的核心抽象类,使用时需要具体的实现类,用于处理字节流。它们是操作数据输入和输出的基础,可以用于读取和写入文件、网络流、内存中的数据

 public static void main(String[] args) throws IOException {//在使用完流之后,需要关闭它们以释放资源。在 try-with-resources 语句块中创建流可以确保在结束时自动关闭。//如果不关闭,就会造成资源泄露!!! 也可使用close进行关闭,但是可能会执行不到,比如中途抛异常,return等,//也可采取finally,但代码不美观try(InputStream inputStream = new FileInputStream("d:/aaa/t.txt")) {while (true) {byte[] buf = new byte[1024];int n = inputStream.read(buf);if (n == -1) {break;}for (int i = 0; i < n; i++) {//十六进制方式进行打印System.out.printf("%x ", buf[i]);}//String构造方法内部对字节数组进行编码转换String s = new String(buf, 0, n, "utf-8");System.out.println(s);}}}

对于字符类型使用InputStream进行读取还是比较麻烦的,其实我们可以使用Scanner搭配流对象进行操作,我们一般使用Scanner都是进行输入的,在参数内部添加System.in,在源码中in的类型就是public final static InputStream in = null;也就是说我们可以传入自己的InputStream对象,对字符类型进行打印.

public static void main(String[] args) throws IOException {try(InputStream inputStream = new FileInputStream("d:/aaa/t.txt")) {Scanner scanner = new Scanner(inputStream);String s = scanner.nextLine();System.out.println(s);}
}
//注意:Scanner只是用来读文本文件,不适合读取二进制文件,否则会乱码

利用 OutputStreamWriter 进行字符写入

 public static void main(String[] args) throws IOException {try(OutputStream ot = new FileOutputStream("d:/aaa/t.txt")) {String s = "hello";//转换为字节数组,存放到数组中byte[] b = s.getBytes();//数组b中的数据写入到输出流ot中ot.write(b);//将输出流中的缓冲区数据写入到文件中,确保数据被及时的写入文件ot.flush();}}

System.out.println()中out的源码public final static PrintStream out = null;我们可以传入自己的PrintStream来输出

public static void main(String[] args) throws IOException {//再写入之前要先打开文件,输出流对象会在打开文件之后,清空文件内容,所以我们可以追加,加个true即可try(OutputStream ot = new FileOutputStream("d:/aaa/t.txt",true)) {PrintStream printStream = new PrintStream(ot);printStream.println("hello");ot.flush();}}

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

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

相关文章

gitlab高级功能之容器镜像仓库

今天给大家介绍一个gitlab的高级功能 - Container Registry&#xff0c;该功能可以实现docker镜像的仓库功能&#xff0c;将gitlab上的代码仓的代码通过docker构建后并推入到容器仓库中&#xff0c;好处就是无需再额外部署一套docker仓库。 文章目录 1. 参考文档2. Container R…

Linux 进程(三)

Linux进程状态的查看&#xff1a; 这是Linux内核源代码对于进程状态的定义&#xff1a; R运行状态&#xff08;running&#xff09;: 并不意味着进程一定在运行中&#xff0c;它表明进程要么是在运行中要么在运行队列里。 S睡眠状态&#xff08;sleeping): 意味着进程在…

openGauss学习笔记-138 openGauss 数据库运维-例行维护-检查时间一致性

文章目录 openGauss学习笔记-138 openGauss 数据库运维-例行维护-检查时间一致性138.1 操作步骤 openGauss学习笔记-138 openGauss 数据库运维-例行维护-检查时间一致性 数据库事务一致性通过逻辑时钟保证&#xff0c;与操作系统时间无关&#xff0c;但是系统时间不一致会导致…

18487.1 - 2015 电动汽车充电系统标准 第1部分 关键点梳理

一、部分知识介绍 1、连接方式 使用电缆和连接器将电动汽车接入电网&#xff08;电源&#xff09;的方法。 1.1、连接方式A 1.2、连接方式B 1.3、连接方式C 2、电动汽车控电设备 2.1、按照输出电压分类 1&#xff09;交流 单相 220V&#xff0c;三相 380V. 2&#xff09…

【超全】React学习笔记 下:路由与Redux状态管理

React学习笔记 React系列笔记学习 上篇笔记地址&#xff1a;【超全】React学习笔记 上&#xff1a;基础使用与脚手架 中篇笔记地址&#xff1a;【超全】React学习笔记 中&#xff1a;进阶语法与原理机制 React路由概念与理解使用 1. 引入 React路由是构建单页面应用(SPA, Sin…

CSS 选择器优先级,!important 也会被覆盖?

目录 1&#xff0c;重要性2&#xff0c;专用性3&#xff0c;源代码顺序 CSS 属性值的计算过程中。其中第2步层叠冲突只是简单说明了下&#xff0c;这篇文章来详细介绍。 层叠冲突更广泛的被称为 CSS选择器优先级计算。 为什么叫层叠冲突&#xff0c;可以理解为 CSS 是 Cascadi…

基于 Python+flask 构建态势感知系统(附完整源码)

一、开发 一个基于linux的态势感知系统&#xff0c;基于python和flask框架开发&#xff0c;项目文件目录如下&#xff1a; admin -核心算法 charts -图表生成 model -类 app.py -主文件 config.py -配置文件 install.py -安装文件 二、安装 1、配置 数据库密码默认设…

redis单机版本安装

redis单机版本安装 1.redis单机版源码编译安装搭建(4.0示例) redis下载地址 https://redis.io/download redis源码编译 #!/bin/sh yum install -y wget gcc gcc-c make tar openssl openssl-devel cmakecd /usr/local/src wget http://download.redis.io/releases/redis-4…

华为杯研究生数学建模优秀参考论文(优秀论文参考2004-2022年)

一、背景介绍 中国研究生数学建模竞赛是一项面向在校研究生进行数学建模应用研究的学术竞赛活动&#xff0c;是广大在校研究生提高建立数学模型和运用互联网信息技术解决实际问题能力&#xff0c;培养科研创新精神和团队合作意识的大平台&#xff0c;大赛赞助单位为华为技术有限…

什么是Daily Scrum?

Daily Scrum&#xff08;每日站会&#xff09;&#xff0c;Scrum Master要确保这个会在每天都会开。这个会的目的就是检查正在做的东西和方式是否有利于完成Sprint目的&#xff0c;并及时做出必要的调整。 每日站会一般只开15分钟&#xff0c;为了让事情更简单些&#xff0c;这…

无线物理层安全学习

文章目录 3.17到3.203.85到3.88 3.17到3.20 3.85到3.88

论文阅读——Img2LLM(cvpr2023)

arxiv&#xff1a;[2212.10846] From Images to Textual Prompts: Zero-shot VQA with Frozen Large Language Models (arxiv.org) 一、介绍 使用大语言模解决VQA任务的方法大概两种&#xff1a;multi-modal pretraining and language-mediated VQA&#xff0c;即多模态预训练…

进程的创建:fork()

引入 创建进程的方式我们已经学习了一个&#xff01;在我们运行指令(或者运行我们自己写的可执行程序)的时候不就是创建了一个进程嘛&#xff1f;那个创建进程的方式称为指令级别的创建子进程&#xff01; 那如果我们想要在代码中创建进程该怎么办呢&#xff1f; fork() for…

【算法通关村】链表基础经典问题解析

【算法通关村】链表基础&经典问题解析 一.什么是链表 链表是一种通过指针将多个节点串联在一起的线性结构&#xff0c;每一个节点&#xff08;结点&#xff09;都由两部分组成&#xff0c;一个是数据域&#xff08;用来存储数据&#xff09;&#xff0c;一个是指针域&…

第一百八十六回 DropdownMenu组件

文章目录 1. 概念介绍2. 使用方法2.1 DropdownMenu2.1 DropdownMenuEntry 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何禁止页面跟随手机自动旋转"相关的内容&#xff0c;本章回中将介 绍DropdownMenu组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 …

python+pytest接口自动化(6)-请求参数格式的确定

我们在做接口测试之前&#xff0c;先需要根据接口文档或抓包接口数据&#xff0c;搞清楚被测接口的详细内容&#xff0c;其中就包含请求参数的编码格式&#xff0c;从而使用对应的参数格式发送请求。例如某个接口规定的请求主体的编码方式为 application/json&#xff0c;那么在…

Redis面试题:redis做为缓存,数据的持久化是怎么做的?两种持久化方式有什么区别呢?这两种方式,哪种恢复的比较快呢?

目录 面试官&#xff1a;redis做为缓存&#xff0c;数据的持久化是怎么做的&#xff1f; 面试官&#xff1a;这两种持久化方式有什么区别呢&#xff1f; 面试官&#xff1a;这两种方式&#xff0c;哪种恢复的比较快呢&#xff1f; 面试官&#xff1a;redis做为缓存&#xff…

基于YOLOv8深度学习的钢材表面缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

JVM虚拟机:JVM参数之标配参数

本文重点 本文我们将学习JVM中的标配参数 标配参数 从jdk刚开始就有的参数&#xff0c;比如&#xff1a; -version -help -showversion

Vivado版本控制

Vivado版本控制 如果您有幸进入FPGA领域&#xff0c;那么会遇到版本控制问题&#xff0c;本文讲解的是如何用git进行Vivado进行版本控制。 搭建Git环境 一 首先需要一个git环境&#xff0c;并选择一个托管平台&#xff08;github,gitlab,gitee&#xff09; Git下载地址&…