文件操作和IO

news/2024/4/18 21:55:44

平时我们所谈到的“文件”都是指硬盘上的文件

硬盘(外存)和内存相比:

  • 速度:内存比硬盘块很多
  • 空间:内存空间比硬盘小
  • 成本:内存比硬盘贵(都挺便宜的了)
  • 持久化:内存掉电后数据丢失,外存掉电后数据还在

之前的代码,绝大部分都是围绕内存展开的,JavaSE数据结构中定义个变量,其实就是在内存上申请空间,Mysql主要就是操作硬盘!!

文件IO在这里也是操作硬盘!

  1. 文件操作:创建文件,删除文件,重命名文件,创建目录
  2. 文件内容操作:针对文件内容进行读和写

路径:咱们电脑文件系统上一个文件/目录的具体位置

目录:计算机专业术语

文件夹:通俗说法(大白话)

文件路径是从此电脑出发一直往下走,直达目标文件,此时这中间经过的内容!

Windows都是从”此电脑“起头的,表示路径的时候,也可可以把此电脑省略,直接从盘符开始(C盘,D盘)

D:\project\山东大学\教育服务团队\数学专业课件\高等代数\2023课件\矩阵初阶……

实际表示路径是通过字符串表示,每个目录之间通过 \或者/ 来分割(只在Windows下使用,代码中需要写成“\\"《——转义字符

绝对路径:从盘符开始,一层一层往下找,这个过程得到的路径

相对路径:从给定的某个目录出发,一层一层往下找,这个过程得到的路径(一定要明确基准目录(工作目录)是啥!)

关于路径,非常关键,后面很多地方都会涉及到,尤其是相对路径!!

相对路径一定要明确工作目录(基准目录)是啥??

文件系统上,任何一个文件对应的路径是唯一的!!不会存在两个路径相同,文件却不同的情况!!

在Linux,可能存在一个文件,有两个不同的路径能找到(Windows系统不存在)

Windows上可以认为:路径和文件是一对一的!!路径就相当于一个文件的”身份标识“!!

文本文件 VS 二进制文件

文本文件,存储的是文本,文本文件的内容都是由ASCII字符构成的!!

文本文件里存储的数据,就是遵守ASCII或者其他字符集的编码,所得到的文件,本质上存的是字符(不仅仅是char)

二进制文件存储的是二进制数据!没有任何限制,存啥都可以!!

最简单粗暴的方式来判定:文本文件跟二进制文件的区别??

直接使用记事本打开某个文件!!(记事本是按照文本的方式来解析的)

如果你看到的内容能看懂《——》文本文件

如果你看到的内容看不懂(乱糟糟的)《——》二进制文件

二进制都是一个一个的字符,记事本尝试把前前若干个字节的数据往utf8码里面套,套出来啥就是啥,套不出来就是方块!

文本文件:txt文件,.java文件,.c文件

二进制文件:.class文件,.exe文件,.jpg文件,.mp3文件

word编辑的是文本??还是二进制??(二进制)

excel编辑的表格是文本??还是二进制??(二进制)

文件操作系统:

Java标准库给我们提供了File这个类

File对象是硬盘上的一个文件的”抽象“表示

文件是存储在硬盘上的,直接通过代码操作硬盘,不太方便,则在内存中创建一个对应的对象,操作这个内存中的对象,就可以间接的影响到硬盘的文件情况了!!

1.构造File对象

构造的过程中,可以使用绝对路径/相对路径,进行初始化,这个路径指向的文件,可以是真实存在的,也可以是不存在的!

import java.io.File;
import java.io.IOException;public class Main1 {public static void main(String[] args) throws IOException {//就可以通过File对象进行操作了!//new 一个File对象File file=new File("./cat.jpg");//./cat.jpg相对路径写法//file提供的一些方法System.out.println(file.getParent());System.out.println(file.getName());System.out.println(file.getPath());//返回File文件的绝对路径System.out.println(file.getAbsolutePath());System.out.println(file.getCanonicalPath());//抛异常}
}

2.File提供的一些方法

一看名字就知道咋用了!!官方文档可搜~

import java.io.File;
import java.io.IOException;public class Main2 {public static void main(String[] args) throws IOException {//在相对路径中./通常可以省略// 路径写啥都行,只要程序能访问到对应的目录就可以!如:./hello_word.txtFile file=new File("./hello_word.txt");//判定该文件是否存在System.out.println(file.exists());//是否为目录System.out.println(file.isDirectory());//是否为文件System.out.println(file.isFile());//创建文件file.createNewFile();//抛异常System.out.println("=====================");//判定该文件是否存在System.out.println(file.exists());//是否为目录System.out.println(file.isDirectory());//是否为文件System.out.println(file.isFile());}
}

该段代码的运行结果为:

IDEA工作目录就是项目所在的目录

写相对路径就是从system_code这一级为基准来展开的!!

目录的创建:

import java.io.File;public class Main3 {public static void main(String[] args) {//多级目录File file=new File("test_dir/aaa/bbb");//只能创建一级目录// file.mkdir();//创建多级目录file.mkdirs();}
}

目录的删除,用delete()方法即可

创建好目录之后,可以通过List()来罗列出目录里面的内容

    public static void main(String[] args) {//目录的删除File file=new File("test_dir");String[] result=file.list();System.out.println(Arrays.toString(result));File[] result1=file.listFiles();System.out.println(Arrays.toString(result1));}

重命名操作:

    public static void main(String[] args) {//重命名操作File src=new File("./test_dir");File dest=new File("./test222");//重命名src.renameTo(dest);}

文件内容操作:

这个就不是一个类就能完成的了,涉及到很多类,一组类!!

针对文本文件提供了一组类,统称为”字符流“,读写的基本单位是字符

典型代表:Reader(输入),Writer(输出)

针对二进制文件提供了一组类,统称为”字节流“,读写的基本单位是字节

典型代表:InputStream(输入),OutputStream(输出)

每种流对象又分为两种:

输入流:Reader(输入),InputStream(输入)

输出流:Writer(输出),OutputStream(输出)

需要我们认清楚输入/输出的方向!!

从硬盘读数据到内存叫做输入:Reader(输入),InputStream(输入)

从内存数据写到硬盘叫做输出:Writer(输出),OutputStream(输出)

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

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

相关文章

docker 方式安装mysql 主从方式keepalived实现高可用

一、环境介绍 二、MySQL安装 在两台服务器上都安装mysql 1、拉取镜像 docker pull mysql:8.0.272、创建挂载目录 mkdir -p /data/mysql/3、运行容器 主节点 docker run \--restartalways \--name master_mysql -p 3306:3306 \-e MYSQL_ROOT_PASSWORD123456 -d \-v /data/m…

在华为云服务器上CentOS 7安装单机版Redis

https://redis.io/是官网地址。 点击右上角的Download。 可以进入https://redis.io/download/——Redis官网下载最新版的网址。 然后在https://redis.io/download/页面往下拉,点击下图超链接这里。 进入https://download.redis.io/releases/下载自己需要的安装…

高德地图实现-微信小程序地图导航

效果图: 一、准备阶段 1、在高德开放平台注册成为开发者2、申请开发者密钥(key)。3、下载并解压高德地图微信小程序SDK 高德开放平台: 注册账号(https://lbs.amap.com/)) 申请小程序应用的 key 应用管理(https://console.ama…

python爬虫爬取电影数据并做可视化

思路: 1、发送请求,解析html里面的数据 2、保存到csv文件 3、数据处理 4、数据可视化 需要用到的库: import requests,csv #请求库和保存库 import pandas as pd #读取csv文件以及操作数据 from lxml import etree #解析html库 from …

关于 firefox 不能访问 http 的解决

情景: 我在虚拟机 192.168.x.111 上配置了 DNS 服务器,在 kali 上设置 192.168.x.111 为 DNS 服务器后,使用 firefox 地址栏搜索域名 www.xxx.com ,访问在 192.168.x.111 搭建的网站,本来经 192.168.x.111 DNS 服务器解…

laravel框架 - 开发实战(目录结构,路由,控制器,模型,视图)

一、laravel框架的目录结构 app:应用目录,保存项目中的控制器、模型等 bootstrap:保存框架启动的相关文件 config:配置文件目录 database:数据库迁移文件和数据填充文件 public:应用入口文件index.php和前端资源文件(如CSS、JavaScript等&#xff09…