Java学习笔记之----I/O(输入/输出)一

        在变量、数组和对象中存储的数据是暂时存在的,程序结束后它们就会丢失。想要永久地存储程序创建的数据,就需要将其保存在磁盘文件中(就是保存在电脑的C盘或D盘中),而只有数据存储起来才可以在其他程序中使用它们。Java的I/O技术可以将数据保存到文本文件、二进制文件甚至是ZIP压缩文件中,以达到永久性保存数据的要求。

目录

一   输入/输出流

 二 File类

1.文件的创建与删除 

第一种构造方法

第二种构造方法

第三种构造方法

2.File类的使用

(1)获取文件信息

(2)文件夹的操作

1.创建单层文件夹

2.创建多层文件夹

3.删除文件夹 

​编辑4. 获取文件夹下的所有子文件


 

一   输入/输出流

😶‍🌫️😶‍🌫️😶‍🌫️流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。I/O(Input/Output,输入/输出)流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。虽然IO流通常与磁盘文件存取有关,但是程序的源和目的地也可以是键盘、鼠标、内存或显示器窗口等。
Java有数据流处理输入/输出模式,程序从指向源的输入流中读取源中的数据,如图所示。源可以是文件、网络、压缩包或其他数据源。

 Java语言定义了许多类专门负责各种方式的输入/输出,这些类都被放在java.io包中。其中,所有
输入流类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;而所有输出
流都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类。

 二 File类

File 类是java.io包中唯一代表磁盘文件本身的类。File类定义了一些与平台无关的方法来操作文件,可以通过调用File类中的方法,实现创建、删除、重命名文件等操作。File类的对象主要用来获取文件本身的一些信息,如文件所在的目录、文件的长度、文件读写权限等。数据流可以将数据写入文件中,文件也是数据流最常用的数据媒体。

1.文件的创建与删除 

第一种构造方法

:File(String pathname)

该构造方法通过将给定的路径名字符串转换为抽象路径名来创建一个新File实列。

file创建中的抽象路径的三种表示方法 ,如图1,2,3;

图一:  在MyProject下创建一个word.txt。此时word.txt不在src的包里面。

图二: word.txt与Dome在同一个包中 

图三: 

那么我们来看一下决定路径下如何创建文件:

 1.首先,我们在c盘里面创建一个文件夹,名字为text;

2.然后 ,在text文件夹中创建一个文本,文本名为word.txt;

3.查看绝对路径,这里我们可以右键看属性,也可以直接双击上面的标题;

第二种构造方法

:File(String parent,String chid)

该构造方法根据定义的父路径和子路径字符串(包含文件名)创建一个新的File对象。语法如下:

new File(String parent,String child)

▢parent:父路径字符串,如D:/或D:/doc。

也就是说他它所在的位置信息。
▢child:子路径字符串,如letter.txt。

文档,项目的名字。

第三种构造方法

:File(File f, String child)

该构造方法根据f抽象路径名和child路径名字符串创建一个新File实例。语法如下:

new File(File f,String child)

▢f:父路径对象,如D:/doc/。
▢child:子路径字符串,如letter.txt。

 【源码】

package my;

import java.io.File;

public class Demo {
	public static void main(String[] args) {
		/*
		 * 项目下的路径(默认路径):word.txt
		 * 包中的文件路径:src/my/word.txt
		 * 注意: 可以用/表示文件夹
		 *       可以用\\表示文件夹(转义字符)
		 * 绝对路径:C:\\text\\word.txt
		 */     
		File f1 = new File("C:\\text\\word.txt");//第一种构造方法
		
		File f2 = new File("C:\\text\\","word.txt");//第二种构造方法
		/*
		 * parent:C:\\text\\(文件在c盘的文件夹text中)
		 * child:word.txt(它的文档名字是word.txt)
		 */
		
		File dir = new File("C:\\text\\");//文件夹
		File f3 = new File(dir,"word.txt");//第三种构造方法
		/*
		 * 也可以用下面的式子表示
		 * File f3 = new File(new File("C:\\text\\"),"word.txt");
		 */
		
		System.out.println(f1.getAbsolutePath());
		System.out.println(f2.getAbsolutePath());
		System.out.println(f3.getAbsolutePath());
		
		System.out.println(f1==f2);
		/*
		 * f1和f2不相等是因为它们是通过不同的构造方法创建的对象。
		 * 尽管它们的路径和文件名都相同,但它们是两个不同的对象。
		 * 比较两个对象时,需要使用.equals()方法而不是==运算符。
		 * 所以应该使用f1.equals(f2)来比较它们是否相等。
		 * 他们只是一个代表,好比a与b是朋友,c也与b是朋友,而a与c并不一定是朋友。
		 */
		System.out.println(f1.equals(f2));
		
	}
}

2.File类的使用

(1)获取文件信息

File类提供了很多方法用来获取文件本身信息。如表:

【代码】 

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;


public class Demo {
	public static void main(String[] args) {
		File f1 = new File("C:\\text\\word.txt");
		System.out.println("文件是否存在:"+f1.exists());
		System.out.println("文件名:"+f1.getName());
		System.out.println("文件的绝对路径:"+f1.getAbsolutePath());
		System.out.println("文件是否隐藏:"+f1.isHidden());
		System.out.println("文件大小:"+f1.length());
		Date date = new Date(f1.lastModified());
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		System.out.println("文件最后的修改时间:"+sdf.format(date));
		
		boolean f = f1.delete();
		System.out.println("文件是否删除成功:"+f);
		try {
			boolean fl = f1.createNewFile();
			System.out.println("创建文件是否成功:"+fl);
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		
		
	}

}

【运行结果】 

 运行完后我们会发现word文件大小变为0了,这是因为我们删除了,又重新创建的原因。

(2)文件夹的操作

1.创建单层文件夹

创建单层文件夹用mkdir()或mkdirs()方法。

package mt;

import java.io.File;

public class Demo {
	public static void main(String[] args) {
		File dir = new File("dir");
		boolean flag = dir.mkdir();//创建文件夹
		System.out.println("创建文件夹是否成功:"+flag);
	}

}

创建前我们可以看到左侧没有dir文件: 

运行刷新后:

我们可以发现左侧出现了dir文件夹的图标。 

2.创建多层文件夹

创建多层文件夹我们要用mkdirs()方法;

【代码】 

package mt;

import java.io.File;

public class Demo {
	public static void main(String[] args) {
		File dir = new File("dir/dir2/dir3/dir4/");
		boolean flag = dir.mkdir();//创建文件夹
		boolean flag2 = dir.mkdirs();//创建文件夹及其父文件夹
		System.out.println("创建文件夹是否成功:"+flag);
		System.out.println("创建多层文件夹是否成功:"+flag2);
	}

}

【运行结果】 

3.删除文件夹 

删除文件夹用delete()方法,默认删除最后一个文件夹。

【代码】 

package mt;

import java.io.File;

public class Demo {
	public static void main(String[] args) {
		File dir = new File("dir/dir2/dir3/dir4/");
		boolean flag = dir.mkdir();//创建文件夹
		boolean flag2 = dir.mkdirs();//创建文件夹及其父文件夹
		System.out.println("创建文件夹是否成功:"+flag);
		System.out.println("创建多层文件夹是否成功:"+flag2);
		
		boolean de1 = dir.delete();
		System.out.println("删除文件夹是否成功:"+de1);
	}

}

【运行结果】 

4. 获取文件夹下的所有子文件

 【代码】

package mt;

import java.io.File;

public class Demo {
	public static void main(String[] args) {
		File f = new File("C:\\windows\\");
		File files[] = f.listFiles();
		for(File tmp:files) {
			if(tmp.isFile()) {
				System.out.println("文件:"+tmp.getName());
			}else if(tmp.isDirectory()){
				System.out.println("文件夹:"+tmp.getName());
			}
		}

	}

}

【运行结果】 

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

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

相关文章

pip切换源

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

搬家快递服务小程序的便利性

在当今快节奏的生活中,搬家可能是很多人都需要面对的问题。无论是新房子还是新办公室,都需要高效、便捷的搬家服务。本文将介绍如何使用第三方小程序制作平台,如乔拓云平台,开发一款高效便捷的搬家服务小程序。 1. 注册登录第三方…

DRM全解析 —— ADD_FB(2)

接前一篇文章:DRM全解析 —— ADD_FB(1) 本文参考以下博文: DRM驱动(四)之ADD_FB 特此致谢! 上一回围绕libdrm与DRM在Linux内核中的接口: DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, d…

Vue框架--Vue中el和data的两种写法

data与el的2种写法 1.el有2种写法 (1).new Vue时候配置el属性。 (2).先创建Vue实例,随后再通过vm.$mount(#root)指定el的值。 2.data有2种写法 (1).对象式 (2).函数式 如何选择:目前哪种写法都可以,以后学习到组件时&#xff…

Web安全——穷举爆破下篇(仅供学习)

Web安全 一、常见的端口服务穷举1、hydra 密码穷举工具的使用2、使用 hydra 穷举 ssh 服务3、使用 hydra 穷举 ftp 服务4、使用 hydra 穷举 mysql 服务5、使用 hydra 穷举 smb 服务6、使用 hydra 穷举 http 服务7、使用 hydra 穷举 pop3 服务8、使用 hydra 穷举 rdp 服务9、使用…

学习振弦采集模块的开发基本原理

飞讯教学篇:学习振弦采集模块的开发基本原理 振弦采集模块是一种用于测量物体振动、形变、压力等物理量的电子设备。它通过测量物体的振动变化,可以得出物体在不同条件下的动态特性,对于工程设计、科学研究、医学检测等领域都有广泛应用。本…

Unity生命周期函数

1、Awake 当对象(自己这个类对象,就是这个脚本)被创建时 才会调用该生命周期函数 类似构造函数的存在 我们可以在一个类对象创建时进行一些初始化操作 2、OnEnable 失活激活(这个勾) 想要当一个对象(游戏…

python web 开发与 Node.js + Express 创建web服务器入门

目录 1. Node.js Express 框架简介 2 Node.js Express 和 Python 创建web服务器的对比 3 使用 Node.js Express 创建web服务器示例 3.1 Node.js Express 下载安装 3.2 使用Node.js Express 创建 web服务器流程 1. Node.js Express 框架简介 Node.js Express 是一种…

ROS-5.自定义topic消息格式

自定义topic消息格式 1. 定义消息1.1. 定义msg文件1.2. 在package.xml中添加功能包依赖1.3. 在CMakeList.txt添加编译选项1.4. 编译 2.定义发布者和订阅者2.1 定义发布者2.2. 定义订阅者2.3. 修改CMakeList.txt2.4 编译 3. 使用消息3.1 启动ros主程序3.2. 启动发布者3.3 启动订…

Lesson3-5:OpenCV图像处理---模版匹配和霍夫变换

学习目标 掌握模板匹配的原理,能完成模板匹配的应用理解霍夫线变换的原理,了解霍夫圆检测知道使用OpenCV如何进行线和圆的检测 1 模板匹配 1.1 原理 所谓的模板匹配,就是在给定的图片中查找和模板最相似的区域,该算法的输入包括…

PQUEUE - Printer Queue

题目描述 The only printer in the computer science students union is experiencing an extremely heavy workload. Sometimes there are a hundred jobs in the printer queue and you may have to wait for hours to get a single page of output. Because some jobs are …

创建ffmpeg vs2019工程

0 写在前面 本文主要参考链接:https://www.cnblogs.com/suiyek/p/15669562.html 感谢作者的付出; 1 目录结构 2 下载yasm和nasm 如果自己在安装VS2019等IDE的时候已经安装了它们,则不用再单独进行安装,比如我这边已经安装了&a…

弹窗、抽屉、页面跳转区别 | web交互入门

当用户点击或触发浏览页面的某个操作,有很多web交互方式,可以大致分为弹窗、抽屉、跳转新页面三种web交互方式。虽然这三种web交互方式看起来没什么不同,但实际上弹窗、抽屉、跳转新页面对交互体验有蛮大的影响。 这需要UI\UX设计师针对不同…

【iOS】Masonry的基本使用

文章目录 前言一、使用Masonry的原因二、约束的常识三、Masonry的简单使用四、Masonry的用例总结 前言 暑假安装了cocoapods,简单使用其调用了SVGKit,但是没有学习Masonry,特此总结博客记录Masonry的学习 一、使用Masonry的原因 Masonry是一…

深入解析即时通讯App开发中的关键技术

即时通讯App开发在现代社交和通信领域中扮演着重要的角色。随着移动设备的普及和网络的高速发展,人们对即时通讯工具的需求不断增加。本篇文章将深入探讨即时通讯App开发中的关键技术,帮助读者了解该领域的最新动态和技术趋势。 基础架构和通信协议 现…

RabbitMQ工作模式-发布订阅模式

Publish/Subscribe(发布订阅模式) 官方文档: https://www.rabbitmq.com/tutorials/tutorial-three-python.html 使用fanout类型类型的交换器,routingKey忽略。每个消费者定义生成一个队列关绑定到同一个Exchange,每个…

某人事系统架构搭建设计记录

首发博客地址 https://blog.zysicyj.top/ 先大致列一下基础情况 架构必须是微服务 场景上涉及大量查询操作,分析操作 存在临时大量写入的场景 并发并不高 对高可用要求较高,不能挂掉 对安全要求高 要能过等保测试等三方测试 使用人数并不多,十…

SpringBoot-学习笔记(基础)

文章目录 1. 概念1.1 SpringBoot快速入门1.2 SpringBoot和Spring对比1.3 pom文件坐标介绍1.4 引导类1.5 修改配置1.6 读取配置1.6.1 读取配置信息1.6.2 读取配置信息并创建类进行封装 1.7 整合第三方技术1.7.1 整合JUnit1.7.1 整合Mybatis1.7.1 整合Mybatis-Plus1.7.1 整合Drui…

SpringCloudAlibaba Gateway(三)-整合Sentinel功能路由维度、API维度进行流控

Gateway整合Sentinel ​ 前面使用过Sentinel组件对服务提供者、服务消费者进行流控、限流等操作。除此之外,Sentinel还支持对Gateway、Zuul等主流网关进行限流。 ​ 自sentinel1.6.0版开始,Sentinel提供了Gateway的适配模块,能针对路由(rou…

ARM编程模型-寄存器组

Cortex A系列ARM处理器共有40个32位寄存器,其中33个为通用寄存器,7个为状态寄存器。usr模式和sys模式共用同一组寄存器。 通用寄存器包括R0~R15,可以分为3类: 未分组寄存器R0~R7分组寄存器R8~R14、R13(SP) 、R14(LR)程序计数器PC(R15)、R8_fiq-R12_fir为快中断独有 在不同模…