JavaEE初阶Day 15:文件IO(1)

目录

  • Day 15:文件IO(1)
    • IO
    • 文件
      • 1. 路径
      • 2. 文件的分类
      • 3. 使用Java针对文件系统进行操作
        • 3.1 属性
        • 3.2 构造方法
        • 3.3 方法

Day 15:文件IO(1)

IO

  • I:Input输入

  • O:Output输出

输入输出规则

在这里插入图片描述

统一以CPU为基准,通过控制台读取数据到内存是输入;把数据打印显示到控制台上是输出

文件

文件本身是广义的概念,在操作系统中把很多的资源(软件资源/硬件资源)都抽象成文件,但此处谈到的文件,特指狭义的文件,也就是平时保存在硬盘上的这些文件

文件夹也是一种文件,称为目录文件,也是保存在硬盘上,在硬盘上,存在很多文件和目录,目录又存在一定的嵌套关系,整体这一套结构是一个树型结构

1. 路径

文件非常多,目录也非常多,目录之间还能嵌套,需要在上述体系中能够有一种方式,标识某个具体的文件,通过这个机制,就能具体定位到某个文件上

从根节点出发,一层一层往下走,最终到达目标文件之后,中间这些目录集合在一起,就构成了路径

  • 绝对路径:以盘符开头的路径,起点是此电脑
  • 相对路径:起点可以是任意路径

D:\program\qq\Bin\qq.exe:目录和目录之间,使用/或者\分割,但是这个事情只局限在Windows上

据说微软在开发DOS的时候,最初定义的目录分隔符是/,当时主流系统Unix家族,都是/表示的,但是在发布之前,产品经理,突然改需求,改成\表示,发布之后,遭到怒喷,之后也开始支持/,现在Windows同时支持/和\两种,Linux、Mac、Android和IOS都是Unix的后裔,只支持/,因此推荐使用/

**例子:**找qq.exe

  • 当前的基准(工作目录)是D:\program\qq\Bin,直接通过./qq.exe找到,.在相对路径中表示当前所在的位置
  • 当前的基准(工作目录)是D:\program\qq,通过./Bin/qq.exe找到
  • 当前的基准(工作目录)是D:\program,通过./qq/Bin/qq.exe找到
  • 当前的基准(工作目录)是D:\program\qq\Bin\plugins,此时需要通过..回到上一级目录,../qq.exe找到

Linux和Windows的相对路径/绝对路径规则完全相同

2. 文件的分类

文件的分类方式有很多种,此处主要讨论一种和编写代码密切相关的

  • 文本文件:在硬盘上存储的数据是文本数据,给人看的
  • 二进制文件:在硬盘上存储的数据是二进制数据,给程序看的

无论是文本文件还是二进制文件,本质上都是01这样的二进制数据,文本数据指的是字符串每个部分都是“合法”,文本文件中的二进制数据能够构成合法的字符(GBK/UTF8等码表有对应),区分一个文件是文本还是二进制,在编码处理的时候,处理方式不同

一个简单粗暴但是有效的区分二进制文件和文本文件的方法,使用记事本打开,如果不是乱码就是文本文件,否则就是二进制文件,记事本属于把文件内容,按照文本的方式来理解,如果理解成功,也就意味着查表成功了,不理解就是二进制文件

日常常见的一些:docx、pptx、MP3、MP4、pdf都属于二进制文件,md、html、java、c都属于文本文件

docx是富文本,不仅仅是把文本,还包含格式、样式等其他很多信息,总体是通过二进制来表示的

3. 使用Java针对文件系统进行操作

Java标准库提供了File类表示一个文件,进一步的通过File提供的方法,就可以进行文件系统操作了

File类出自于java.io包里面,和输入输出相关的内容就是在这个包里面

3.1 属性
修饰符及类型属性说明
static StringpathSeparator依赖于系统的路径分隔符,String类型的表示
static charpathSeparator依赖于系统的路径分隔符,char类型的表示

pathSeparator:Java为了能够跨平台,专门提供了变量,如果是windows版本的jdk上述变量值就是\,如果是Linux/mac版本的jdk就是/

3.2 构造方法
签名说明
File(File parent, String child)根据父目录+孩子文件路径,创建⼀个新的File实例
File(String pathname)根据文件路径创建⼀个新的File实例,路径可以是绝对路径或者相对路径
File(String parent, String child)根据父目录+孩子文件路径,创建⼀个新的File实例,父目录用路径表示

字符串类型的路径,绝对路径/相对路径都是可以的,构造File对象的时候,写的路径不一定非得真实存在

3.3 方法

Flie类中的方法,操作系统都有api,Java调用了系统api,系统本身的api都是C/C++实现的,JVM本身就是C++,JVM里能够调用系统api,进一步封装一下,提供给上层Java程序调用

代码示例一

package IO;import java.io.File;
import java.io.IOException;public class Demo1 {public static void main(String[] args) throws IOException {File f = new File("d:/test.txt");System.out.println(f.getParent());//返回File对象的⽗⽬录⽂件路径System.out.println(f.getName());//返回FIle对象的纯⽂件名称System.out.println(f.getPath());//返回File对象的⽂件路径System.out.println(f.getAbsoluteFile());//返回File对象的绝对路径System.out.println(f.getCanonicalPath());//返回File对象的修饰过的绝对路径}
}
d:\
test.txt
d:\test.txt
d:\test.txt
D:\test.txt
package IO;import java.io.File;
import java.io.IOException;public class Demo1 {public static void main(String[] args) throws IOException {File f = new File("./test.txt");System.out.println(f.getParent());//返回File对象的⽗⽬录⽂件路径System.out.println(f.getName());//返回FIle对象的纯⽂件名称System.out.println(f.getPath());//返回File对象的⽂件路径System.out.println(f.getAbsoluteFile());//返回File对象的绝对路径System.out.println(f.getCanonicalPath());//返回File对象的修饰过的绝对路径}
}
.
test.txt
.\test.txt
D:\JAVA_CODE\J2024_04_19_IO\.\test.txt
D:\JAVA_CODE\J2024_04_19_IO\test.txt
  • throws IOException:表示输入输出过程中出现问题的异常,异常信息中会告诉我们具体的错误原因

  • "./test.txt":在IDEA里,直接运行程序,此时基准目录就是项目所在目录

  • f.getAbsoluteFile():把当前的工作路径和相对路径进行简单的拼接

  • f.getCanonicalPath():对上面方法拼接后的结果进行省略

代码示例二

package IO;import java.io.File;
import java.io.IOException;public class Demo2 {public static void main(String[] args) throws IOException {File f = new File("./test.txt");f.createNewFile();//根据File对象,⾃动创建⼀个空⽂件。成功创建后返回trueSystem.out.println(f.exists());//判断File对象描述的⽂件是否真实存在System.out.println(f.isFile());//判断File对象代表的⽂件是否是⼀个普通⽂件System.out.println(f.isDirectory());//判断File对象代表的⽂件是否是⼀个⽬录}
}
true
true
false

创建文件什么情况下会失败:给出的路径非法/权限不足

代码示例三

package IO;import java.io.File;public class Demo3 {public static void main(String[] args) {File f = new File("./test.txt");f.delete();//根据File对象,删除该⽂件。成功删除后返回trueSystem.out.println(f.exists());}
}
false
package IO;import java.io.File;
import java.util.Scanner;public class Demo3 {public static void main(String[] args) {File f = new File("./test.txt");Scanner scanner = new Scanner(System.in);f.deleteOnExit();//根据File对象,标注⽂件将被删除,删除动作会到JVM运⾏结束时才会进⾏scanner.next();System.out.println(f.exists());}
}

f.deleteOnExit();有些程序,运行过程中,会产生临时文件,就需要在进程结束之后,自动删除掉,这样的情况,就可以使用该方法

代码示例四

package IO;import java.io.File;public class Demo4 {public static void main(String[] args) {File dir = new File("./testDir");dir.mkdir();//创建File对象代表的⽬录System.out.println(dir.isDirectory());//判断File对象代表的⽂件是否是⼀个⽬录File dirs = new File("./testDirs/AAA/BBB/CCC");dirs.mkdirs();//创建File对象代表的⽬录,如果必要,会创建中间⽬录System.out.println(dirs.isDirectory());}
}

代码示例五

package IO;import java.io.File;public class Demo5 {public static void main(String[] args) {File f1 = new File("./test2.txt");File f2 = new File("./testDir/test2.txt");f1.renameTo(f2);//进⾏⽂件改名,也可以视为我们平时的剪切、粘贴操作}
}

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

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

相关文章

【python的魅力】:教你如何用几行代码实现文本语音识别

文章目录 引言一、运行效果二、文本转换为语音2.1 使用pyttsx32.2 使用SAPI实现文本转换语音2.3 使用 SpeechLib实现文本转换语音 三、语音转换为文本3.1 使用 PocketSphinx实现语音转换文本 引言 语音识别技术,也被称为自动语音识别,目标是以电脑自动将…

Tomcat启动闪退怎么解决(文末附终极解决方案)

AI是这么告诉我的 Tomcat启动时出现闪退问题可能由多种原因引起,以下是解决此类问题的一些通用方法: 检查环境变量: 确保已经正确设置了JAVA_HOME和JRE_HOME环境变量,并指向正确的Java安装路径。将Java的bin目录添加到系统的PATH…

c语言题目

一些关于c语言的题目 文章目录 一、计算程序输出二、以下程序运行时&#xff0c;若输入1abcedf2df<回车>输出结果是将flag的第二个bit置0结构体大小下列C程序执行后c输出结果为&#xff08;&#xff09;设有定义char *p[]{"Shanghai","Beijing",&quo…

scikit-learn:Python中的机器学习-1

简介&#xff1a;问题设置 什么是机器学习&#xff1f; 机器学习是关于构建具有可调参数的程序&#xff0c;这些参数可以自动调整&#xff0c;以便通过适应先前看到的数据来改善其行为。机器学习可以被认为是人工智能的一个子领域&#xff0c;因为这些算法可以被视为构建模块…

Python量化炒股的获取数据函数—get_index_stocks()

Python量化炒股的获取数据函数—get_index_stocks() 利用get_industry_stocks()函数可以获取在给定日期一个行业的所有股票代码列表&#xff0c;其语法格式如下&#xff1a; get_industry_stocks(industry_code, dateNone)各项参数的意义 参数date和返回值&#xff0c;都与g…

你知道什么是Charles吗?

什么是Charles? Charles中文名叫青花瓷&#xff0c;它是一款基于HTTP协议的代理服务器&#xff0c;通过成为电脑或者浏览器的代理&#xff0c;然后截取请求和请求结果达到分析抓包的目的。它跨平台、半免费&#xff0c;与免费版本不同的是&#xff0c;半免费版本的Charles重启…

八、Linux进程检测与控制

章节目标 了解进程和程序的关系了解进程的特点能够使用top动态查看进程信息能够使用ps静态查看进程信息能够使用kill命令给进程发送信号能够调整进程的优先级&#xff08;扩展&#xff09; 引言 在运维的日常工作中&#xff0c;监视系统的运行状况是每天例行的工作&#xff…

PPT基础

5种ppt仅可读形式 Ⅰ 开始选项卡 1.【幻灯片】组中&#xff1a;新建幻灯片&#xff0c;从大纲中导入幻灯片&#xff1b;修改幻灯片的版式&#xff1b;节&#xff08;新增节&#xff0c;重命名节&#xff09;。 2.【字体】组中&#xff1a;设置字体&#xff0c;字体大小&…

docker-compose启动mysql5.7报错

描述一下问题经过&#xff1a; 使用docker compose 部署mysql5.7 文件如下: services:mysql:restart: alwaysimage: mysql:5.7container_name: mysql-devports:- 3306:3306environment:- MYSQL_DATABASEdev- MYSQL_ROOT_PASSWORD123456healthcheck:test: ["CMD", &q…

Python+PYGObject/PYGtk+CSS样式--2024python示例

隔久点不用老是会忘&#xff0c;留个笔记。。 PythonPYGObject/PYGtk&#xff0c;加载 CSS 样式的演示代码 demo 运行的效果截图&#xff1a; #!/usr/bin/env python3 import sys import gigi.require_version("Gtk", "3.0") from gi.repository import …

进程控制【Linux】

文章目录 进程终止进程等待 创建一批子进程 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #define N 5void runChild() {int cnt 10;while (cnt ! 0){printf("i am a child : %d , ppid:%d\n", getpid(), getppid());sleep(1);c…

数据结构之链表深度讲解

小伙伴们&#xff0c;大家好呀&#xff0c;上次听我讲完顺序表想必收获不少吧&#xff0c;嘿嘿&#xff0c;这篇文章你也一样可以学到很多&#xff0c;系好安全带&#xff0c;咱们要发车了。 因为有了上一次顺序表的基础&#xff0c;所以这次我们直接进入正题&#xff0c;温馨…

JavaScript 动态网页实例 —— 文字移动

前言 介绍文字使用的特殊效果。本章介绍文字的移动效果,主要包括:文字的垂直滚动、文字的渐隐渐显、文字的闪烁显示、文字的随意拖动、文字的坠落显示、页面内飘动的文字、漫天飞舞的文字、文字的下落效果。对于这些效果,读者只需稍加修改,就可以应用在自己的页面设计中。 …

4.3 JavaScript变量

4.3.1 变量的声明 JavaScript是一种弱类型的脚本语言&#xff0c;无论是数字、文本还是其他内容&#xff0c;统一使用关键词var加上变量名称进行声明&#xff0c;其中关键词var来源于英文单词variable&#xff08;变量&#xff09;的前三个字母。 可以在声明变量的同时对其指定…

多线程与信号量简介

信号量与 PV 操作 计算机中信号量的本质是整数&#xff0c;数值表示可用的资源数量 P 操作 (Passeren > 通过, 原子操作) 若信号量 0&#xff0c;当前任务阻塞 (进入信号量等待队列)若信号量 > 0&#xff0c;则&#xff1a;将信号量数值减一&#xff0c;当前任务继续执…

你知道什么是防抖和节流吗?

目录 1 先举个例子 2 使用场景 3 代码实现 3.1 防抖的实现 3.2 节流的实现 1 先举个例子 防抖&#xff0c;更像是坐电梯&#xff0c;早上眼看9点了&#xff0c;都着急坐电梯上去打卡&#xff0c;但眼看电梯要关了&#xff0c;进来一个人&#xff0c;等几秒&#xff0c;…

uniapp乡村社区户籍问外来人员管理系统 微信小程序python+java+node.js+php

基于微信小程序的外来人员管理系统项目的概述设计分析&#xff0c;主要内容有的私教预约平台系统平台的具体分析&#xff0c;进行数据库的是设计&#xff0c;数据采用MySQL数据库&#xff0c;并且对于系统的设计采用比较人性化的操作设计&#xff0c;对于系统出现的错误信息可以…

信创 | 信创产业人才需求与培养机制:优化策略与实践探索

信创产业的人才需求与培养机制面临着多方面的挑战和机遇。首先&#xff0c;信创产业的快速发展带来了巨大的人才需求&#xff0c;但目前人才培养供给与企业发展需求之间存在不匹配的问题。这种不匹配主要表现在课程体系不健全、产教融合不够深入、校企联动性不足以及职业培训市…

探索动态内存开辟的奥秘

✨✨欢迎&#x1f44d;&#x1f44d;点赞☕️☕️收藏✍✍评论 个人主页&#xff1a;秋邱博客 所属栏目&#xff1a;C语言 前言 开始之前&#xff0c;我们先来了解一下C/C中程序内存区域划分。 在C/C程序中&#xff0c;内存区域通常被划分为以下几个部分&#xff1a; 1.栈&…

第16章 基于结构的测试技术(白盒测试技术)

一、静态测试技术 &#xff08;一&#xff09;概述 不运行程序代码的情况下&#xff0c;通过质量准则或其他准则对测试项目进行检查的测试类型&#xff0c;人工或工具检查。 1、代码检查 2、编码规则检查 3、静态分析 静态分析概述 不需要执行程序 控制流分析 通过生成…