文件操作-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();
          }
      }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Simple_SSTI_1-WEB-bugku-解题步骤

——CTF解题专栏—— 声明&#xff1a;文章由作者weoptions学习或练习过程中的步骤及思路&#xff0c;非正式答案&#xff0c;仅供学习和参考。 题目信息&#xff1a; 题目&#xff1a;Simple_SSTI_1 作者&#xff1a;valecalida 提示&#xff1a;无 场景&#xff1a; 解题…

Centos图形化界面封装OpenStack Ubuntu镜像

目录 背景 环境 搭建kvm环境 安装ubuntu虚机 虚机设置 系统安装 登录虚机 安装cloud-init 安装cloud-utils-growpart 关闭实例 删除细节信息 删除网卡细节 使虚机脱离libvirt纳管 结束与验证 压缩与转移 验证是否能够正常运行 背景 一般的镜像文件在上传OpenSt…

HttpServletRequest/Response视频笔记

学习地址&#xff1a;144-尚硅谷-Servlet-HttpServletRequest类的介绍_哔哩哔哩_bilibili 目录 1.HttpServletRequest 类 a.HttpServletRequest类有什么作用 b.HttpServletRequest类的常用方法 c.如何获取请求参数 d.解决post请求中文乱码问题 获取请求的参数值相关问题 …

docker搭建nginx实现负载均衡

安装nginx 查询安装 [rootlocalhost ~]# docker search nginx [rootlocalhost ~]# docker pull nginx准备 创建一个什么都不配置的nginx拿到一个nginx.conf文件和conf.d文件夹 创建文件、文件夹&#xff08;只需创建logs文件夹即可&#xff0c;log文件是运行后自动挂载的&a…

2023.12.2 做一个后台管理网页(左侧边栏实现手风琴和隐藏/出现效果)

2023.12.2 做一个后台管理网页&#xff08;左侧边栏实现手风琴和隐藏/出现效果&#xff09; 网页源码见附件&#xff0c;比较简单&#xff0c;之前用很多种方法实现过该效果&#xff0c;这次的效果相对更好。 实现功能&#xff1a; &#xff08;1&#xff09;实现左侧边栏的手…

node.js express路由和中间件

目录 路由 解释 使用方式 中间件 解释 使用方式 中间件类型 路由注册和中间件注册 代码 app全局路由接口请求以及代码解析 示例1 示例2 示例3 示例4 中间件req继承 嵌套子路由 解释 代码 示例1 路由 解释 在 Express 中&#xff0c;路由&#xff08;Route&…

【大模型】更强的 ChatGLM3-6B 来了,开源可商用

【大模型】更强的 ChatGLM3-6B 来了&#xff0c;开源可商用 简介ChatGLM3-6B 环境配置环境搭建安装依赖 代码及模型权重拉取拉取 ChatGLM3-6B拉取 ChatGLM3-6B 模型权重及代码 终端测试网页测试安装 gradio加载模型并启动服务 参考 简介 ChatGLM3-6B ChatGLM3-6B 是 ChatGLM …

Python逐步打造惊艳的折线图

大家好&#xff0c;Matplotlib可以快速轻松地使用现成的函数绘制图表&#xff0c;但是微调步骤需要花费更多精力。今天本文将介绍如何使用Matplotlib绘制吸引人的图表&#xff0c;实现折线图的惊艳变身。 1.数据 为了说明方法&#xff0c;本文使用了包含过去50年各国GDP信息的…

短线买入卖出有哪些交易技巧?

前面两节课&#xff0c;我们认识了短线交易&#xff0c;知道了短线交易常见的买入卖出时机&#xff0c;这节课&#xff0c;我们来讲解一下短线买入卖出的一些交易技巧。话不多时&#xff0c;直接进入重点&#xff01; 一、短线交易要果断 短线波动快&#xff0c;在出现买卖信号…

Redis集群详解

1.1 什么是Redis集群 Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许Redis在不同节点上同时提供服务&#xff0c;提高整体性能和可靠性。根据搭建的方式和集群的特性&#xff0c;Redis集群主要有三种模式&#xff1a;主从复制…

Vue基础知识点梳理

在Vue中&#xff0c;被用来响应地更新HTML属性的指令是v-model页面挂载成功之后会触发哪一个钩子函数mounted挂载之后会进行页面的渲染v-on是动作元素不属于条件渲染指令 在Vue中&#xff0c;下列关于Vue实例对象说法不正确的是&#xff08;&#xff09;。A.Vue实例对象是通过n…

Spring Cloud NetFlix

文章目录 Spring Cloud1 介绍2 Eureka&#xff08;服务注册与发现&#xff09;2.1 介绍2.2 服务注册与发现示例2.2.1 Eureka Server&#xff1a;springcloud-eureka2.2.2 Eureka Client&#xff1a;springcloud-provider2.2.3 Eureka Client&#xff1a;springcloud-consumer 2…

木马病毒是怎么进入服务器的,要如何防范

木马病毒通常是基于计算机网络&#xff0c;基于客户端和服务端的通信、监控程序。名称来源于公元前十二世纪希腊和特洛伊之间的一场战争。能够在计算机管理员未发觉的情况下开放系统权限、泄漏用户信息、甚至窃取整个计算机管理使用权限&#xff0c;隐匿性高。 木马病毒的入侵方…

开关电源的电感选择和布局布线

开关电源&#xff08;SMPS&#xff0c; Switched-Mode Power Supply&#xff09;是一种非常高效的电源变换器&#xff0c;其理论值更是接近100%&#xff0c;种类繁多。按拓扑结构分&#xff0c;有Boost、Buck、Boost-Buck、Charge-pump等&#xff1b;按开关控制方式分&#xff…

c语言:整数与浮点数在内存中的存储方式

整数在内存中的存储&#xff1a; 在计算机内存中&#xff0c;整数通常以二进制形式存储。计算机使用一定数量的比特&#xff08;bit&#xff09;来表示整数&#xff0c;比如32位或64位。在存储整数时&#xff0c;计算机使用补码形式来表示负数&#xff0c;而使用原码形式来表示…

如何创建一个vue工程

1.打开vue安装网址&#xff1a;安装 | Vue CLI (vuejs.org) 2.创建一个项目文件夹 3.复制地址 4.打开cmd&#xff0c;进入这个地址 5.复制粘贴vue网页的安装命令 npm install -g vue/cli 6.创建vue工程 vue create vue这里可以通过上下键来进行选择。选最后一个选项按回车。 …

企业网盘在医疗行业资料管理中的应用与优势

随着企业网盘的广泛应用&#xff0c;医疗行业正逐渐实现资料安全存储和智能化管理。海量应用的推动下&#xff0c;医院管理正朝着线上化、智能化发展迈进。然而&#xff0c;医疗行业仍面临着诸多挑战。 医疗行业的痛点在于病例、档案、药品资料繁多且保存周期长。这些资料的整理…

L1-009:N个数求和

目录 ⭐题目描述⭐ ⭐分析 ⭐程序代码 运行结果 ⭐文案分享⭐ ⭐题目描述⭐ 本题的要求很简单&#xff0c;就是求N个数字的和。麻烦的是&#xff0c;这些数字是以有理数分子/分母的形式给出的&#xff0c;你输出的和也必须是有理数的形式。 输入格式&#xff1a; 输入第一行给出…

XIAO ESP32S3之SenseCraft 模型助手部署

sipeed教程&#xff1a;SenseCraft 模型助手部署 | Seeed Studio Wiki 一、安装ESP-IDF 鉴于我的电脑之前安装过esp-idf v4.3版本&#xff0c;而ESP32-S3需要v4.4及以上版本才支持&#xff0c;所以将esp-idf更新到最新5.1版本。 1、启动mingw32.exe应用 2、进入esp-idf目录 …

前端小记--2.element-ui中级联选择器cascader如何默认展开下拉框

最近做项目时&#xff0c;遇到一个需求&#xff1a;在一个排班表中&#xff0c;展示人员的值班情况&#xff0c;点击单元格&#xff0c;弹出下拉框&#xff0c;修改人员排班信息。 由于下拉框选择内容是树状结构&#xff0c;这里使用了element-ui中级联组件cascader&#xff0c…