文件IO操作

article/2025/10/5 14:15:09

目录

一.文件的操作

1.构造方法

2.常用方法

3.文件的绝对路径和相对路径

1.绝对路径

2.相对路径

4.注意事项

5.File类的方法使用例子(递归遍历指定目录下的所有文件)

二. 输入流

1.InputStream(输入流)

(1)常用方法

2.FileInputStream(文件输入流(具体实现类))

(1)构造方法

 3.通过输入流来读取文件内容

(1)使用流的注意事项

(2)通过输入流读取文件中的内容

 (3)使用Scanner类来读取文件中的内容

三.输出流

1.OutputStream中的方法(抽象类)

2.FileOutputStream类

(1)常用方法

 (2)使用FileOutputStream输出流向文件中写内容

 (3)使用PrintWrite向文件中写内容

(4)结合输入输出流读写文件

 四.输入输出流的总结


一.文件的操作

1.构造方法

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

2.常用方法

返回值类型及方法名方法说明
boolean exists() 判断 File 对象描述的文件是否真实存在
String getName() 返回 FIle 对象的纯文件名称
boolean isFile() 判断 File 对象代表的文件是否是一个普通文件
String[] list() 返回 File 对象代表的目录下的所有文件名
File[] listFiles() 返回 File 对象代表的目录下的所有文件,以 File 对象
boolean mkdir() 创建 File 对象代表的目录
boolean mkdirs()创建 File 对象代表的目录,如果必要,会创建中间目录
boolean isDirectory() 判断 File 对象代表的文件是否是一个目录
boolean delete()

 根据 File 对象,删除该文件。成功删除后返回 true

boolean createNewFile() 根据 File 对象,自动创建一个空文件。成功创建后返回 true

3.文件的绝对路径和相对路径

1.绝对路径

从根目录到当前文件的位置的全部路径就是绝对路径

2.相对路径

在当前目录下的文件的路径就是相对路径,这里只不过省略了前面的根目录

其中..指的是当前io目录的上一层目录。

4.注意事项

创建File对象的时候,如果当前路径的文件不存在,则不会报错。

对于mkdirs()来说,如果有一级目录不存在,那么之后会创建该目录,而下面的子目录也可以成功创建。

5.File类的方法使用例子(递归遍历指定目录下的所有文件)

package io;import java.io.File;public class FileMethod {public static void main(String[] args) {//如果使用,需要修改文件路径(这里的路径是我电脑的绝对路径)File file = new File("E:\\1java练习\\javaweb");printAllFile(file);}public static void printAllFile(File file) {//遍历当前目录下的所有文件(包含目录)for (File  f:file.listFiles()) {if(f.isDirectory()) {//如果当前文件是目录,就递归printAllFile(f);}else {//直接打印该文件名System.out.println(f);}}}
}

输出结果

二. 输入流

1.InputStream(输入流)

InputStream是一个抽象类,如果想要使用,还需要使用具体的实现类配合才能使用

(1)常用方法

返回值与方法名方法说明
int read() 读取一个字节的数据,返回 -1 代表已经完全读完了
int read(byte[] b) 最多读取 b.length 字节的数据到 b 中,返回实际读到的数量;-1 代表以及读完了
int read(byte[] b, int off, int len)最多读取 b.length 字节的数据到 b 中,返回实际读到的数量;-1 代表以及读完了最多读取 len - off 字节的数据到 b 中,放在从 off 开始,返回实际读到的数量;-1 代表以及读完了
void close() 关闭字节流

2.FileInputStream(文件输入流(具体实现类))

(1)构造方法

构造方法说明
FileInputStream(File file) 利用 File 构造文件输入流
FileInputStream(String name) 利用文件路径构造文件输入流

 3.通过输入流来读取文件内容

(1)使用流的注意事项

在使用流结束的时候需要将流进行关闭,在jdk1.8之前是通过try finally 语句块进行关闭,在jdk1.8之后我们直接可以在try中将流创建好,之后会自动进行流的关闭。

(2)通过输入流读取文件中的内容

package io;import java.io.*;public class FileMethod {public static void main(String[] args) {File file = new File("E:\\1java练习\\javaweb\\io\\t.txt");printContent(file);}public static void printContent(File file) {
//    在try中创建流,之后会自动关闭,不用手动进行关闭try(InputStream inputStream = new FileInputStream(file)) {byte[] buf = new byte[1024];//构建一个缓冲区,将内容读取到该数组中int len;while ((len=inputStream.read(buf))!=-1) {//将读取到的字节数组转化为字符串内容String str = new String(buf,0, len);System.out.println(str);}}catch (IOException e) {e.printStackTrace();}}}

 (3)使用Scanner类来读取文件中的内容

package io;import java.io.*;
import java.util.Scanner;public class FileMethod {public static void main(String[] args) {File file = new File("E:\\1java练习\\javaweb\\io\\t.txt");printContentSc(file);}public static void printContentSc(File file) {try {try(FileInputStream fileInputStream = new FileInputStream(file)) {//根据scanner进行读取,并设置读取的格式Scanner scanner = new Scanner(fileInputStream, "UTF-8");while (scanner.hasNext()) {//按行进行读取String str = scanner.nextLine();System.out.println(str);}}} catch (IOException e) {e.printStackTrace();}}}

三.输出流

1.OutputStream中的方法(抽象类)

返回值和方法名方法说明
void write(int b) 写入要给字节的数据
void write(byte[] b) 将 b 这个字符数组中的数据全部写入 os 中
int write(byte[] b, int off, int len)将 b 这个字符数组中从 off 开始的数据写入 os 中,一共写 len 个
void close() 关闭字节流

void flush()
我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 为了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,调用 flush(刷新)操作,将数据刷到设备中

2.FileOutputStream类

(1)常用方法

 (2)使用FileOutputStream输出流向文件中写内容

package io;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class OutputStreamDemo {public static void main(String[] args) throws IOException {File file = new File("E:\\1java练习\\javaweb\\io\\t2.txt");//文件不存在就创建文件if(!file.exists()) {file.createNewFile();}fileWrite(file);}public static void fileWrite (File file) {try(FileOutputStream fileOutputStream = new FileOutputStream(file)) {String str = "haoi哈Ohio撒旦和";//将字符串转化为字节数组,并设置编码格式byte[] buf = str.getBytes("UTF-8");fileOutputStream.write(buf);//将缓冲区的内容刷新到t2.txt中fileOutputStream.flush();}catch (IOException e) {e.printStackTrace();}}
}

 (3)使用PrintWrite向文件中写内容

package io;import java.io.*;public class OutputStreamDemo {public static void main(String[] args) throws IOException {File file = new File("E:\\1java练习\\javaweb\\io\\t2.txt");//文件不存在就创建文件if(!file.exists()) {file.createNewFile();}filePrintWrite(file);}public static void filePrintWrite(File file) {try(PrintWriter printWriter = new PrintWriter(new FileOutputStream(file))) {printWriter.println("Idaho诋哈的话覅");//写一个行,带换行printWriter.print("afdhasid");//写一行,没有换行//将内容从缓冲区中刷新到文件中printWriter.flush();} catch (FileNotFoundException e) {e.printStackTrace();}}}

(4)结合输入输出流读写文件

读取一个文件中的内容,然后将读取到的内容写到另一个文件中即可。

这里的BufferedInputStream与BufferedOutputStream是带有缓冲区的输入输出流,效率比较高。

在使用BufferedInputStream与BufferedOutputStream时,需要将FileInputStream和FileOutputStream包裹起来;因为不能直接使用缓冲输入输出流。

package io;import java.io.*;public class copyContent {public static void main(String[] args) {copyContent();}public static void copyContent(){//这里我使用的是当前项目下的相对路径下的文件,如果文件不存在,则会直接出现异常try(BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("../javaweb/io/t.txt"));BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("../javaweb/io/t2.txt"))) {//将t.txt中读取到的内容写入到t2.txt中byte[] buf = new byte[1024];//保存从t.txt中读取的内容int len;//读取的长度while((len=bufferedInputStream.read(buf)) != -1) {bufferedOutputStream.write(buf, 0,len);//从0开始到读取len个字节bufferedOutputStream.flush();//刷新缓冲区}} catch (IOException e) {e.printStackTrace();}}
}

 四.输入输出流的总结

  1. 对于Reader和Writer来说主要是处理文本类型的输入输出流的。
  2. 而InputStream和OutputStream主要是处理二进制类型文件的输入输出(主要是指图片和视频)。
  3. 其中这两种输入输出流都有带有缓冲区的输入输出流类。


http://chatgpt.dhexx.cn/article/Oi62lpw2.shtml

相关文章

Linux 文件IO操作

概述 本片文章将会主要介绍四个IO函数:开关读写 open函数 open 函数的输入参数是 open(char* ,flag ,[mode])第一个参数表示的是打开文件的路径文件名第二个参数表示的是打开的方式,见下表 打开方式描述O_RDONLY只读O_WRONLY只写O_RDWR读写O_CREAT创建…

简述IO操作

IO java.io中最主要的五个类就是InputStream、OutputStream、Reader、Writer、File。 从传输方式角度来说,可以将IO分类为: 一:File File类的对象主要用来获取文件本身的一些信息,例如文件所在的目录、文件的长度或文件读写权…

Java文件IO操作及案例

文章目录 一. 文件概述1. 狭义和广义上的文件2. 文件的分类3. 文件的路径 二. 针对文件系统的操作1. File类的属性和构造2. File类的获取操作3. File类的判断操作4. 文件的创建和删除5. 其他的常用方法 三. 对文件内容进行读写1. IO流对象2. 文件的读操作3. 文件的写操作4. Sca…

java IO操作

系列文章目录 第一章 万事万物皆对象 第二章 java构造器 第三章 java访问权限 第四章 java初始化 第五章 java继承 第六章 java重载与重写 第七章 java接口和抽象类 第八章 java数组 第九章 java内部类 第十章 java时间操作 第十一章 final关键字 第十二章 java字符串 第十三章…

Linux基础 IO操作

一、IO接口的基本认识与使用 在c语言中,我们对文件用fopen,fread,fwrite,fclose等等c语言标准库函数来进行操作,实际上这些库函数是对系统调用接口的一个封装,目的是操作简单,方便编程。 以下…

Java中的IO操作

IO 操作是我以前不太理解的操作。总是觉得很神奇,然后一脸懵逼。今天终于鼓起勇气,认真的学习IO方面的知识。有理解不妥当或者不正确的地方,还请各位大佬指正。 一、java的io发生在哪? 这个问题,我们必须首先明确下。…

基础IO-文件IO操作

目录 1.C语言文件IO相关操作(库函数IO接口) 2. 系统调用IO接口 1.C语言文件IO相关操作(库函数IO接口) fopen--打开文件,返回一个文件的操作句柄,有了句柄才能对指定的文件进行操作。 FILE *fopen(char *p…

Java文件IO操作

目录 一、了解什么是文件 狭义的文件: 广义的文件: 二、文件的路径 ①文件的绝对路径 ②文件的相对路径 三、Java对于文件的操作 File类的构造方法 File类的普通方法 四、对于文件的内容操作 ①FileInputStream(文件输入流&#xf…

IO操作

一、简介 IO流是用来处理设备之间的数据传输的,数据一般储存在设备上 设备:硬盘,光盘,内存等等,内存是临时储存的 Java对数据的操作是采用流的方式 按照操作的数据分为:字节流和字符流 暗照流向&#x…

Java基础--IO操作

一、IO原理及分类 一、IO原理 1、I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理设备之间的数据传输,如读写文件,网络通信等。 2、java程序中对于数据的输入/输出操作一般都是以流的方式进行 3、java.io包下提供各…

关于I/O操作

https://blog.csdn.net/deram_boy/article/details/51191425 提及这个,就想到了各种文件操作,这种流,什么reader 啊, writer啊,buffer啊,file啊。但是综合的东西与总结,只是曾经了解。因为工作…

IO操作概念

IO:输入输出,对程序的输入与输出 文件:一组有关数据的集合 文件名:这组数据的名字 linux系统中所有文件均属于文件(通过文件系统进行管理) 按类型分类: 1、普通文件 (…

I/O操作

前言 I/O操作即操作存储器,所以想了解I/O操作,需要了解一点存储器相关知识点。 计算机存储器 存储器是计算机的核心部件之一,在完全理想的状态下,存储器应该要同时具备以下三种特性: (1)速度…

操作系统_04_IO相关(个人总结)

声明: 1. 本文为我的个人复习总结, 并非那种从零基础开始普及知识 内容详细全面, 言辞官方的文章 2. 由于是个人总结, 所以用最精简的话语来写文章 3. 若有错误不当之处, 请指出 软硬链接 软链接(快捷方式): 删除原文件时, 软链接则失效 硬链接…

gcc 命令

gcc 命令 GCC 编译器 gcc 命令格式 gcc 选项 文件名字主要选项 -c&#xff1a; 只编译不链接为可执行文件&#xff0c;编译器将输入的.c 文件编译为.o 的目标文件。-o&#xff1a; <输出文件名>用来指定编译结束以后的输出文件名&#xff0c;如果不使用这个选项的话 G…

Ubuntu Linux gcc的常用命令

目录 一、gcc简介 二、简单的gcc编译 1 预处理 2 编译为汇编语言代码 3 汇编 4 连接 三、多个程序文件的编译 四、检查错误 五、连接库文件 1 编译成可执行文件 2 链接 3 强制链接时使用静态链接库 六、总结 一、gcc简介 Linux系统下的Gcc&#xff08;GNU C Compi…

Linux GCC 编译详解

文章目录 一、GCC 编译器简介二、GCC 工作流编程语言的发展GCC 工作流程gcc 和 g 的区别 三、使用 GCC 编译GCC 编译格式GCC 编译流程多个源文件编译 一、GCC 编译器简介 首先&#xff0c;什么是编译器呢&#xff1f; 我们可以使用编辑器&#xff08;如 linux 下的 vi、window…

gcc编译命令的常用选项——强烈推荐大家使用 -Wall 选项

C程序编编译的过程分为如下四个阶段 1.预处理&#xff1a;头文件展开&#xff08;#include&#xff09;、宏替换&#xff08;#define&#xff09;、条件编译&#xff08;#ifdef&#xff09;(.i)使用预处理器&#xff08;预处理阶段处理的都是以#开头的代码&#xff09; 2.编译…

Linux(gcc编译原理、过程以及常用调试命令)

PS&#xff1a;红色字体表示重点&#xff0c;绿色字体表示重要标题&#xff0c;块引用中表示Linux终端中的命令。 1.gcc / g的安装 命令&#xff1a;sudo apt install gcc /gcc 2.gcc编译连接 //main.c文件 &#xff08;1&#xff09;预编译 ①删除所有的“#define”&#…

Linux中gcc编译步骤

我们这里以C语言为例&#xff0c;看看C语言程序在Linux中编译执行的详细步骤 1.创建一个.c文件 2.写入一些简单的代码 我们使用gcc -E filename.c -o filename.i 命令对程序先进行预处理&#xff1a;处理头文件、宏定义&#xff0c;接下来我们修改一下头文件&#xff0c;使用错…