JavaEE-文件IO1

news2024/10/6 21:31:37

文章目录

  • 一、什么是文件IO?
    • 1.1 IO
    • 1.2 文件
      • 1.2.1 路径
      • 1.2.2 文件分类
  • 二、使用Java针对文件系统进行操作


一、什么是文件IO?

1.1 IO

IO分别代表Input和Output即输入和输出。比如我的电脑可以从网络上下载文件,也可以通过网络上传文件或者我把我的内存中的数据保存到硬盘,将硬盘中的数据读取到内存。以上这些实际上都是文件IO,不过这里肯定有不少同志分不清哪个过程是输入,哪个过程是输出,这其实是人为规则规定的。
在这里插入图片描述
如图,如果说数据是朝cpu方向流动的,那么就是输入,如果说数据是朝cpu相反方向流动的,那么就是输出。

1.2 文件

文件本身也是广义的概念,在操作系统中将很多资源都抽象成文件,此时在这里的文件就是狭义的文件,也就是平时保存在硬盘上的文件。
文件夹是否是文件,事实上文件夹也是文件并被称为目录文件,也是保存在硬盘上。在硬盘上,很多文件和目录构成树形结构,类似于一个N叉树。
在这里插入图片描述

1.2.1 路径

文件非常多,并且目录也非常多,我们需要一种方式来标识某个具体的文件。这样就引出了路径,路径就是从根节点出发一层一层往下走,最终到达目标文件后,中间这些目录集合在一起就构成了路径。
(1)绝对路径
从盘符开头的路径,也称为绝对路径。
(2)相对路径
相对路径的起点可以是任何路径。
路径是使用/或者\来分割目录,但是\分割目录只能在windows操作系统中使用,其它操作系统只支持/分割。
这里还有两个注意点第一个就是./的使用,假如我们启动qq.exe文件,此时路径如下:
在这里插入图片描述
此时工作目录就是D:\QQNT,在此时./就是表示D:\QQNT。对于第二个注意点就是…/的使用,此时…/表示当前目录的上一级目录就是D:\,还是很好理解的。

1.2.2 文件分类

文件存储在硬盘上。文件分类方式有很多种,在这里主要讨论和编码相关的一种分类方式,就是将文件分为二进制文件和文本文件。
其实区分一个文件是文本文件还是二进制文件很简单,就是以记事本打开文件,如果显示乱码就是二进制文件,如果没有乱码以字符显示那么就是文本文件。
日常常见的docx,pdf以及pptx都是二进制文件,因为它们是富文本文件,除了文本还要其它很多信息。mp4,mp3等等都是二进制文件。md,html,java,c都是文本文件。文本文件是给人看的,二进制文件是给程序看的。

二、使用Java针对文件系统进行操作

针对文件系统进行操作包括创建文件,删除文件,创建目录,重命名文件…
Java标准库提供了File类表示一个文件,进一步通过File类对象提供的方法就可以对文件系统进行操作了。File类在java.io这个包中,和输入输出相关的类也在这个包当中。
对于File类的使用是比较简单的,因为就只需要记得一些方法如何使用即可。这里只介绍部分方法的使用细节,要是想了解更多就可以点击这个链接。
注意:构造File对象时,路径不必真实存在。
在这里插入图片描述
代码示例1:

package io;

import java.io.File;
import java.io.IOException;

public class Demo1 {

    public static void main(String[] args) throws IOException {
        File file = new File("F:/test.txt"); //创建的file类对象的路径中的文件可以存在也可以不存在
        //使用绝对路径 输出标准看不出差别
        System.out.println(file.getParent());// F:/
        System.out.println(file.getPath());// F:/test.txt
        System.out.println(file.getName());// test.txt
        System.out.println(file.getAbsolutePath());// F:/test.txt
        System.out.println(file.getCanonicalPath());// F:/test.txt

        File file1 = new File("./test.txt");
        System.out.println(file1.getParent());// 这里父目录直接草率的取了.
        System.out.println(file1.getName());// 这里名字还是一样test.txt
        System.out.println(file1.getPath());// 取的是相对路径
        System.out.println(file1.getAbsolutePath());// 将工作目录和给出的相对路径进行直接拼接
        // 这里的工作目录就是当前项目所处的工作目录
        // 如果在命令行界面使用java运行 那么工作目录就是运行时的命令行的路径 例如自己在命令行运行工作目录就是C:\Users\1
        System.out.println(file1.getCanonicalPath());// 去掉上面绝对路径的那个点 就是更多的对格式进行调整


    }

}

代码示例1运行结果:
在这里插入图片描述
代码示例2:

package io;

import java.io.File;
import java.io.IOException;

public class Demo2 {

    public static  void main(String[] args) throws IOException {
        File file=new File("./test.txt");

        file.createNewFile();//创建文件 如果文件存在就返回false 如果文件路径不合法就抛出异常

        System.out.println(file.exists());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());



    }



}

代码示例3:

package io;

import java.io.File;
import java.util.Scanner;

public class Demo3 {

    public static void main(String[] args) {

        File file =new File("./test.txt");
        Scanner in=new Scanner(System.in);
        //删除文件
        //file.delete();

        //在线程结束时删除文件
        //在编写word文档时会自动添加一个隐藏文档来记录修改 当叉掉word文档时这个文件就会删除
        // 这个文档适用于突发状况例如电脑掉电也不会丢失修改内容
        file.deleteOnExit();
        in.next();


        System.out.println(file.exists());

    }
}

这里有个方法比较特殊,就是deleteOnExit方法,它在程序运行的时候不会删除文件,只会在程序运行结束后删除文件。类似的思想在word中也有展现,在编辑word时会产生一个临时文件如下图,当你完成编辑时,就会将这个临时文件给删除。这里使用这样的设计主要是为了在电源掉电时能够将已经修改的内容给保存下来,这样下次重启word就能继续前面的编辑进度。
在这里插入图片描述
代码示例4:

package io;

import java.io.File;

public class Demo4 {

    public static void main(String[] args) {
        File file=new File("./testDir");
        // 创建单级目录
        //file.mkdir(); //创建成功返回true 已经存在创建失败返回false

        File file2=new File("./testDir/aaa/bbb/ccc");
        // 创建多级目录
        file2.mkdirs();

        System.out.println(file.isDirectory());
    }
}

代码示例5:

package io;

import java.io.File;

public class Demo5 {


    public static void main(String[] args) {
        File file1=new File("./test2.txt");
        //不仅能可以重命名文件 还可以挪动文件到文件夹下面
        File file2=new File("./testDir/test2.txt");


        file1.renameTo(file2);
    }
}

对于文件系统的操作都是使用File类中的方法进行实现,比较简单。

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

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

相关文章

第 8 章 机器人实体导航实现01_准备工作(自学二刷笔记)

重要参考: 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 9.3.1 导航实现01_准备工作 1.1分布式架构 分布式架构搭建完毕且能正常运行,在PC端可以远程登陆…

性能测试——性能问题分析步骤

前言 性能测试大致分以下几个步骤: 需求分析 脚本准备 测试执行 结果整理 问题分析 今天要说的是最后一个步骤——“问题分析”; 需求描述 有一个服务,启动时会加载一个1G的词表文件到内存,请求来了之后,会把…

【前端】使用 Canvas 实现贪吃蛇小游戏

使用 Canvas 实现贪吃蛇小游戏 在这篇博客中,我们将介绍如何使用 HTML5 Canvas 和 JavaScript 实现一个简单的贪吃蛇(Snake)小游戏。这个项目是一个基础的游戏开发练习,它可以帮助你理解如何在 Canvas 上绘图、如何处理用户输入以…

【Spring security】【pig】Note03-pig token令牌解析器过程

🌸🌸 pig token令牌解析器过程 🌸🌸 pig后端源码 一、解析请求中的令牌值。 二、验证令牌 内省并验证给定的令牌,返回其属性。返回映射表示令牌有效。 /*** author lengleng* date 2019/2/1 扩展用户信息*/ publi…

重新安装vmware与再次编译u-boot

一、使用环境: 使用vmware 16pro安装 ubuntu18.04桌面版 二、遇到的问题与解决: 1)、无法连网: 保持nat模式,移除再添加。 2)、git配置私钥: 如果是拉取自己的仓库,请查看此步&am…

电路笔记 :元器件焊接相关 酒精灯松香浴加热取芯片

记录一下只使用松香和小火源加热(如酒精灯、小蜡烛)从电路板中取芯片。 过程 多放松香 让松香淹没芯片尽量均匀加热,等芯片旁边的松香开始从芯片里冒细小的“泡泡”,就差不多了 注:这种方法也可以用于焊接&#xff0…

232COM串口通讯读写NFC卡C#示例源码

本示例使用的发卡器:RS232串口RFID NFC IC卡读写器可二次开发编程发卡器USB转COM-淘宝网 (taobao.com) using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using Syste…

【技术实操】中标麒麟高级服务器操作系统实例分享,rsync数据同步配置方案

1.rsync介绍 rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份工具。 在守护进程模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输协议或者通过远程shell如RSH或者SSH提供文件。SS…

App Inventor 2 如何接入ChatGPT:国内访问OpenAI的最佳方式

如何接入OpenAI 由于国内无法访问OpenAI,KX上网可选大陆及香港(被屏蔽)以外才行。因此对于大多数人来说,想体验或使用ChatGPT就不太便利,不过App Inventor 2 为我们提供了相对便利的一种方式,即“试验性质…

快速搭建SpringMvc项目

一、什么是springMvc 1、介绍 Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称( spring-webmvc ),但它通常被称为“Spring MVC”。 在控制…

MVS net笔记和理解

文章目录 传统的方法有什么缺陷吗?MVSnet深度的预估 传统的方法有什么缺陷吗? 传统的mvs算法它对图像的光照要求相对较高,但是在实际中要保证照片的光照效果很好是很难的。所以传统算法对镜面反射,白墙这种的重建效果就比较差。 …

京准电子、NTP网络时间服务器工作原理及应用领域分析

京准电子、NTP网络时间服务器工作原理及应用领域分析 京准电子、NTP网络时间服务器工作原理及应用领域分析 Network Time Protocol(NTP)是一种用于在计算机网络中同步时钟的协议。它旨在确保在网络中的各个设备之间维持准确的时间。NTP的设计目标是允许…

qmt量化交易策略小白学习笔记第10期【qmt编程之获取股票订单流数据--内置Python】

qmt编程之获取股票订单流数据 qmt更加详细的教程方法,会持续慢慢梳理。 也可找寻博主的历史文章,搜索关键词查看解决方案 ! 感谢关注,需免费开通量化回测与咨询实盘权限,可以和博主联系! 获取股票订单流…

鹧鸪云光伏业务管理软件:引领光伏行业四个信息化变革

随着全球对可再生能源的日益重视和光伏技术的快速发展,光伏业务管理正面临着前所未有的挑战与机遇。在这个大背景下,鹧鸪云光伏业务管理软件以其独特的优势,通过四个信息化变革,为光伏行业带来了前所未有的效率提升和智能化管理。…

hypermesh二次开发tcl脚本

hypermesh二次开发tcl脚本 1、tcl读csv文件,得到list,再转成二维数组2、tcl写csv文件3、hypermesh tcl根据读入的节点坐标建节点, 再显示节点号4、hypermesh tcl根据节点号建节点set5、hypermesh tcl根据节点set读取节点号,再根据节点号读取节点坐标,再将…

vue 点击复制文本到剪贴板

一、首先在vue文件的template中定义复制按钮 <div size"small" v-if"item.prop jadeCode" class"cell-container"><span>{{ scope.row.jadeCode }}</span> <button click"handleCopy(scope.row.jadeCode)" clas…

FreeRTOS_事件组_学习笔记

事件组 原文链接 事件组是一个整数&#xff0c;其中的高8位留给内核&#xff0c;只能用其他位来表示时间 每一位代表一个事件&#xff0c;且每个时间的含义由程序员决定 1为发生&#xff0c;0为未发生 一个/多个任务或ISR都能读写这些位 可以等待某一位&#xff0c;也可以等待…

详细分析Element中的Drawer(附Demo)

目录 前言1. 基本知识2. Demo2.1 基本用法2.2 不同方向2.3 自定义大小2.4 嵌入表单2.5 嵌套抽屉 3. 实战4. Element Plus&#xff08;Drawer&#xff09; 前言 对于该组件针对Vue2比较多&#xff0c;而Element Plus中的Drawer针对Vue3比较多 此处的Demo主要偏向Vue2 后续的El…

五一期间吉祥桥再创新高,抢占宴席酒市场高位

“人生过三桥&#xff0c;必喝吉祥桥”“古韵吉祥桥&#xff0c;今喜结良缘”“吉祥桥下酒香飘&#xff0c;东方韵味醉心田”…… 这个五一&#xff0c;吉祥桥酒商的朋友圈热闹起来了&#xff0c;一边刷屏式宣传自家主打的宴席产品&#xff0c;一边炫耀式的发布每天的宴席成绩…

08.CNN

文章目录 Observation 1Pooling - Max PoolingFlattenApplication&#xff1a;Playing Go使用验证集选择模型食物分类 Observation 1 Pooling - Max Pooling Pooling主要为了降低运算量&#xff0c;现在一般不用了&#xff0c;全convolution Flatten Application&#xff1a;P…