首页 > 编程语言 >Java从入门到放弃之 IO (一)

Java从入门到放弃之 IO (一)

时间:2024-11-20 21:47:10浏览次数:3  
标签:文件 Java 入门 IO boolean File public String

Java IO

IO

IO是指Input/Output,即输入和输出。以内存为中心。在未接触IO的时候,大部分时间,我们的程序都是跟内存打交道,代码实际运行在内存中,但是内存是掉电之后数据就没有了,所以我们需要持久化。所以就有了以内存为中心的IO流。

  • input : 将外部数据读入内存
  • ouput : 将内存数据写入外部
    IO技术是非常实用的技术,如读/写文件,网络通信中发送和接收消息等操作都需要用到IO技术。因为它采用顺序读写数据的模式,具有单向流动的特点。数据就像是水在管道中流动,我们也称之为IO流。

基本概念与计算机相关知识介绍

我们都知道,计算机的底层是识别二进制数据的,即通过高低电平代表0 和 1。所有的文件本质上也都是一堆0和1组成的。但是我们观察我们的计算机上面的文件,会发现,文件有很多种类型,我们会有word文件 ppt文件 pdf文件等等。WORD文件以.doc结尾;PPT文件以.ppt结尾。每一种文件的内容都是有特定的格式。文件类型与内容的格式都是一一匹配的。
而后缀比如.doc是干什么的呢? 实际上这个后缀是告诉操作系统,这个文件是一个word文件,使用word相关应用打开。
** 那改后缀名?**
其实改后缀名,只会影响操作系统把这个文件映射到一个不相关的应用程序打开,不相关的应用程序打不开。

我在给大家一个演示案例:

  1. 首先新建一个word 文件
    在这里插入图片描述
  2. 随便填充一些内容
    在这里插入图片描述
  3. 重命名
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
点击确定
在这里插入图片描述
在这里插入图片描述
通过上面的操作你发现了什么吗?
扩展名和文件类型不匹配,应用程序试图打开该文件时可能会报错,简单地通过更改后缀名并不能改变文件内容。一个文件可以选择使用多种应用程序进行解读,在操作系统中,一般通过右键单击文件,选择打开方式即可。

文件类型

文件类型分为两种类型,一种是文本文件,一种是二进制文件。

  • 文本文件: 每个二进制字节都是某个可打印字符的一部分,都可以用最基本的文本编辑器进行查看和编辑
  • 二进制文件: 每个字符不一定表达字符,可能表达约定地其他信息。
文本文件地编码

因为文本文件都是可打印地字符。但是地球上的人类语言都是不统一的,可打印的字符集也是多种多样的。计算机最早出现在英语国家,ASCII就基本可以满足需要了,ASCII编码,全称是American Standard Code for InformationInterchange,即美国信息互换标准代码。
Ascii常见编码之可打印字符

还有一些非打印字符的控制字符,就不展示了,大家可以搜一下,网络上都有。很明显ASCII对于有一些国家就满足不了,很明显中国就不行。
于是各个地区都开始搞自己的一套编码系统,ASCII码是基础,使用一个字节表示,最高位设为0,其他7位表示128个字符。其他编码都是兼容ASCII的,最高位使用1来进行区分。西欧主要使用Windows-1252,使用一个字节,增加了额外128个字符。我国内地的三个主要编码GB2312、GBK、GB18030。所以如果文本是ASCII则不会有编码乱码问题,但是如果是其他编码,用另一种编码打开,就会出现乱码。

文件读写

文件一般是持久化在硬盘上的,应用程序需要文件的时候,需要将文件从硬盘读入内存,修改完成之后,写回硬盘。Java封装了操作系统的功能提供统一的API。这里我们需要了解一些额外的知识。

  • 硬盘的访问延迟,相比于内存,读取硬盘的速度是很慢的。操作系统一般按照块批量传输,而不是按照字节,以摊薄延时开销,块大小一般为512字节。所以即使只需要一个字节,操作系统也会读取一个块进来。对于这种慢速设备,尽量减少接触,接触的时候尽量一次多做一些事情。
  • 读写文件一般需要两次文件复制。因为操作系统运行的环境在内核态,用户运行在用户态,应用程序调用操作系统的功能,需要先从用户态切换到内核态,再从内核态切到用户态。所以读文件的时候,需要先从硬盘复制到操作系统内核,再从内核复制到应用程序分配的内存中去。

使用缓冲区可以有效提升操作文件的效率;操作系统操作文件会维护一个打开文件的索引(文件描述符),这个索引是消耗内存的,所以当我们不再使用的时候,记得关闭文件。关闭文件会同步缓冲区内容到硬盘,并释放维护的内存结构。

File类

java.io包下面有一个File类,表示通过指定路径名称来表示磁盘或者网路中的某个文件或者目录。程序不能通过File对象读取内容或者写入数据,要操作数据必须通过IO流。 简单打个比方,File类像是一个水库,我们想把水库的水接到自己家必须通过管道,不能直接操作水库。

构造方法

File中的路径可以是已经存在的,也可以是不存在的。通过new新建一个File对象,不会实际创建一个文件,只是创建一个表示文件或目录的对象,new之后,File对象中的路径是不可变的。

        //pathname表示完整路径,该路径可以是相对路径,也可以是绝对路径
        public File(String pathname)
        //parent表示父目录,child表示孩子
        public File(String parent, String child)
        public File(File parent, String child)

文件信息

常见的文件操作见下面的代码,比较简单,看注释就可以了。

        public String getName() //返回文件或目录名称,不含路径名
        public boolean isAbsolute() //判断File中的路径是否是绝对路径
        public String getPath() //返回构造File对象时的完整路径名,包括路径和文件名称
        public String getAbsolutePath() //返回完整的绝对路径名
        //返回标准的完整路径名,它会去掉路径中的冗余名称如".", "..",跟踪软链接(Unix系统概念)等
        public String getCanonicalPath() throws IOException
        public String getParent() //返回父目录路径
        public File getParentFile() //返回父目录的File对象
        //返回一个新的File对象,新的File对象使用getAbsolutePath()的返回值作为参数构造
        public File getAbsoluteFile()
        //返回一个新的File对象,新的File对象使用getCanonicalPath()的返回值作为参数构造
        public File getCanonicalFile() throws IOException
        public boolean exists() //文件或目录是否存在
        public boolean isDirectory() //是否为目录
        public boolean isFile() //是否为文件
        public long length() //文件长度,字节数,对目录没有意义
        public long lastModified() //最后修改时间,从纪元时开始的毫秒数
        public boolean setLastModified(long time) //设置最后修改时间,返回是否修改成功
        public boolean isHidden() //是否为隐藏文件
        public boolean canExecute() //是否可执行
        public boolean canRead() //是否可读
        public boolean canWrite() //是否可写
        public boolean setReadOnly() //设置文件为只读文件
        //修改文件读权限
        public boolean setReadable(boolean readable, boolean ownerOnly)
        public boolean setReadable(boolean readable)
        //修改文件写权限
        public boolean setWritable(boolean writable, boolean ownerOnly)
        public boolean setWritable(boolean writable)
        //修改文件可执行权限
        public boolean setExecutable(boolean executable, boolean ownerOnly)
        public boolean setExecutable(boolean executable)

文件操作

文件操作主要有创建、删除、重命名。 前面我们说过新建一个File对象不会实际创建文件,但如下方法可以:

		public boolean createNewFile() throws IOException //创建新文件
        public static File createTempFile(String prefix, String suffix)
            throws IOException
        public static File createTempFile(String prefix, String suffix,
            File directory) throws IOException
        public boolean delete() // 删除文件
        public void deleteOnExit() // 删除文件当退出JVM的时候
        public boolean renameTo(File dest) // 重命名
 		public boolean mkdir()	//创建目录 中间目录不存在会失败		
 		public boolean mkdirs()	//创建目录 中间目录不存在会创建出中间目录
        public String[] list()
        public String[] list(FilenameFilter filter)
        public File[] listFiles()
        public File[] listFiles(FileFilter filter)
        public File[] listFiles(FilenameFilter filter)       
        public interface FileFilter {
            boolean accept(File pathname);
        }
        public interface FilenameFilter {
            boolean accept(File dir, String name);
        }

** IO内容太多了 一篇放不下,有喜欢的可以关注一下,后面会把IO的别的知识继续补充上来**

标签:文件,Java,入门,IO,boolean,File,public,String
From: https://blog.csdn.net/Zongkunxue/article/details/143920213

相关文章

  • 基于java+springboot的hive的安顺旅游景点数据分析的设计与实现
    课题简介基于Java+SpringBoot和Hive的安顺旅游景点数据分析系统,全力挖掘安顺旅游数据宝藏。后端借SpringBoot构建,SpringDataJPA与MySQL存储关键信息,SpringSecurity筑牢安全防线。Hive存储海量景点数据,如客流、客源地、消费等,HiveQL深度分析挖掘价值。......
  • 基于java+springboot的Hadoop的豆瓣电子图书推荐系统
    课题简介基于Java+SpringBoot和Hadoop的豆瓣电子图书推荐系统,致力于为读者精准推送契合其兴趣的电子图书。后端运用SpringBoot构建稳固架构,SpringDataJPA与MySQL数据库协作存储图书信息、用户数据、评分记录等内容,SpringSecurity保障系统安全,规范用户认......
  • java基础
    01注释单行注释//这里是注释多行注释/*这里是多行注释这里是多行注释这里是多行注释*/文档注释/*****/02标识符和关键字关键字标识符规则所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线()开始首字符之后可以是字母(A-Z或者a-z),美元符($)、下划线()或数......
  • javaweb学习 day5 Vue
    Vue是一套前端框架,免除原生JavaScript中的DOM操作,简化书写。基于MVVM思想,实现数据的双向绑定,将编程的关注点放在数据上。引入Vue.js库:常用指令:v-bind:为HTML标签绑定属性值,如设置href,css样式等v-model:在表单元素上创建双向数据绑定<body><divid="app"><av-bind......
  • JavaAPI.05.JDBC的使用(改查)
    JDBC对象与方法目录JDBC对象与方法ConnectionPreparedStatementResultSetJDBC修改操作:SQL语句根据id修改信息JDBC查询操作:SQL语句模糊查询集合承载查询原始查询区间查询(价格)查询分六步走ConnectionConnection接口表示应用程序与特定数据库之间的连接(会话)......
  • 基于springboot+vue的Java的航空飞机票务预约购票出行服务系统设计与实现(源码+文档+
    课题简介基于SpringBoot+Vue的航空飞机票务预约购票出行服务系统,为旅客提供一站式航空出行解决方案。后端采用SpringBoot构建核心服务,SpringDataJPA与MySQL数据库交互,存储航班信息、用户数据、订单详情等,SpringSecurity确保系统安全,进行严格的用户认证与......
  • 【开源免费】基于SpringBoot+Vue.JS在线文档管理系统(JAVA毕业设计)
    本文项目编号T038,文末自助获取源码\color{red}{T038,文末自助获取源码}......
  • 【开源免费】基于SpringBoot+Vue.JS网上订餐系统(JAVA毕业设计)
    本文项目编号T039,文末自助获取源码\color{red}{T039,文末自助获取源码}......
  • 【开源免费】基于SpringBoot+Vue.JS房屋租赁系统(JAVA毕业设计)
    本文项目编号T040,文末自助获取源码\color{red}{T040,文末自助获取源码}......
  • HarmonyOS4+NEXT星河版入门与项目实战------Button组件
    文章目录1、控件图解2、案例实现1、代码实现2、代码解释3、运行效果4、总结1、控件图解这里我们用一张完整的图来汇整Button的用法格式、属性和事件,如下所示:按钮默认类型就是胶囊类型。2、案例实现这里我们实现一个根据放大和缩小按钮来改变图片大......