Java文件操作——IO

目录

文件

文件的分类

路径

Java中操作文件

文件系统相关操作

文件内容相关操作


文件

平时我们说的文件一般都是指存储在硬盘上的普通文件,形如 txt,jpg,mp4,rar等这些文件都可以认为是普通文件,它们都是在硬盘上存储的,在计算机中,文件可能是一个广义的概念,就不只是包含普通文件,还可以包含目录(其中,我们把目录称为目录文件),在操作系统中,还会使用文件来描述一些其他的硬件设备或者软件设备,例如网卡,操作系统中就把网卡这样的硬件设备也给抽象成了一个文件。

文件的分类

以我们的角度看,我们主要吧文件给分成两类:1. 文本文件。2.二进制文件

文本文件:文本文件中里面存储的都是字符,文本文件本质上也是存字节的,但是文本文件中,相邻的字符在一起正好能构成一个个的字符。

二进制文件:二进制文件里面存储的都是字节,这样的话字节与字节之间就完全没有啥关系了。

这里有一个小技巧告诉大家怎么去判定一个文件是文本文件还是二进制文件,就是用记事本打开这个文件,如果打开后显示为乱码,这就说明这个文件是一个二进制文件,不是乱码那么就说明就是文本文件。

路径

计算机中,保存管理文件,是通过操作系统中的“文件系统”这样都模块来负责的,在文件系统中,一般都是通过“树形”结构来组织磁盘上的目录和文件的,当我们打开一个磁盘,就会出现多个文件,而每个文件又包含多个文件,整体的文件系统,就是这种树形结构,如果是一个普通文件,就是树的叶子结点,如果是一个目录文件,目录中就可以包含字数,这个目录就是非叶子节点,这个数的每个节点上的字数都可以有N个,这就是一个N叉树了,这样就有了路径这个概念。

在操作系统中,就通过“路经”这样的概念,来描述一个具体文件/目录的位置,路径这里有两种描述风格:绝对路径和相对路径

1.绝对路径:以盘符开头的 例如:D:\Xiillldddd

2.相对路径:以 . 或者 .. 开头的,其中. 表示当前路径 ,.. 表示当前路径的父目录(上级路径),这里我们谈到相对路径,就必须要先有一个基准路径,相对路径就是从基准目录出发,按照一个啥样的路径找到的对应文件,下面我们来举个栗子

例如:以D:\Program Files\WeGame为基准目录 找到D:\Program Files\WeGame\client_config的位置,这是我们就可以./client_config表示 ,此处的 . 就表示当前目录,也就是基准目录

.. 表示基准目录上一级路径D:\Program Files

所以,当我们定位到同一个文件,如果基准目录不同,此时相对路径也不同。

Java中操作文件

在Java中操作文件,主要是包含两类操作:1.文件系统相关的操作。 2.文件内容相关的操作

文件系统相关操作

文件系统相关操作指的是通过“文件资源管理器”能够完成的一些功能,如创建文件,创建目录,删除文件,重命名文件等,在 Java 中提供了一个File类, 通过这个类来完成上述的操作,首先这个File类就可以描述了一个文件/ 目录,基于这个对象就可以实现上面的功能,File的构造方法,能够通过传入一个路径,来制定一个文件,这个路径可以是绝对路径也可以是相对路径,当我们构造玩对象之后,就可以通过File提供的方法 ,来完成一系列具体的功能了

文件操作也是一种输入输出 所以File这个东西就是在IO中了

在输入输出的过程中我们要抛出一个异常,通过运行,我们找到上面对应路径 就会发现自动创建了一个text的文本文件

 那我们就会想到,这是绝对路径呀,如果这里我们用相对路径会是在哪创建呢?基准路径是啥哪?这里我们不知道,所以我们自己运行下试试

 

 通过运行,我们发现左边多出了一个text文件,那么我们知道了,这里的基准路径就是当前Java项目所在的路径

 还有很多文件系统相关的操作,Java中也提供了对应的方法,大家可以抽空在API文档上查看

文件内容相关操作

1.打开文件 2.读文件 3. 写文件 4.关闭文件

针对文件内容的读写,Java标准库中提供了一组类,首先按照文件的内容,分成了两个系列

1.字节流对象

字节流对象是针对二进制文件,是以字节为单位进行读写的 读:InputStream  写:OutputStream

2.字符流对象是针对文本文件,是以字符为对象进行读写的 读: Reader  写:Writer 

上述提到的四个类都是抽象类,在我们实际使用中,我们往往使用的是这些类的子类

1.FileInputStream 2.FileOutputStream 3.FileReader 4.FileWriter 这四个都是特指对普通文件进行读写的

下面我们用FileInputStream举个例子

首先创建对象并且打开文件

然后我们通过read方法来读取文件中的数据

 我们可以看到read提供了三个版本的重载

1.无参版本:一次读一个字节,返回值是读到的这个字节

2.一个参数版本:一次读若干个字节,把读到的字节放到参数指定的数组中,返回值就是读到的字节数

3.三个参数版本:一次读若干字节,把读到的结果放到蚕食指定的数组中,返回值就是读到的字节数,不是从数组的起始位置放置,而是从中间的位置放置(off这个下标的位置) len 表示最多能放多少个字节

这里当读完了就会返回-1

 所以我们就可以设置一个循环,来读取文件中的数据

同时需要抛出异常

读完后关闭文件

但我们会想到,如果前面读的过程中抛出异常了呢这样就可能导致close()关闭不了,所以我们就需要吧close()放到finally里面

我们在文件中输入一串字符接下来运行代码

 接下来,我们进行写文件

 写文件我们用到OutputStream ,创建一个数组,我们按照这种方式发开文件读写,每次打开文件都会清空原有文件的内容,清空旧的内容,在从起始位置往后写的,还有一种用于追加流对象,打开开之后不清空。在文件末尾据需往后写FileOutpputStream

 用这个构造方法 的时候将后面的参数设置为true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你介绍一下如何使用 Java 编写程序实现文件拷贝。 Java 提供了非常方便的 I/O 类来处理文件读写操作文件拷贝的基本思路是读取源文件中的数据,然后将数据写入到目标文件中。下面是一个简单的文件拷贝程序示例: ```java import java.io.*; public class FileCopy { public static void main(String[] args) throws IOException { // 源文件路径 String srcFilePath = "C:/temp/source.txt"; // 目标文件路径 String destFilePath = "C:/temp/dest.txt"; // 创建输入流和输出流 FileInputStream fis = new FileInputStream(srcFilePath); FileOutputStream fos = new FileOutputStream(destFilePath); // 定义缓冲区,每次读取 1024 个字节 byte[] buffer = new byte[1024]; int len; // 循环读取源文件中的数据,并将数据写入到目标文件中 while ((len = fis.read(buffer)) != -1) { fos.write(buffer, 0, len); } // 关闭输入流和输出流 fis.close(); fos.close(); System.out.println("文件拷贝完成!"); } } ``` 在上面的示例中,我们首先定义了源文件路径和目标文件路径。然后创建了输入流和输出流,用于读取源文件和向目标文件写入数据。我们定义了一个缓冲区,每次从输入流中读取 1024 个字节,并将这些字节写入到输出流中。最后,我们关闭输入流和输出流,并输出一条完成信息。 需要注意的是,上面的代码中使用了 try-catch 语句来捕获可能出现的 IOException 异常。这是因为在文件读写过程中可能会出现异常,比如文件不存在、文件无法读取等等。为了保证程序的健壮性,我们需要使用 try-catch 语句来处理这些异常。 希望这个简单的示例可以帮助你了解如何使用 Java 编写文件拷贝程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值