【java学习—十二】io流(1)

文章目录

  • 1. 主要内容
  • 2. File类
  • 3. 练习题
  • 4. Java IO原理


1. 主要内容

java.io.File 类的使用(计算机操作系统中的文件和文件夹)

IO原理的分类。
IOinput和output

的解释:
    比如:通过程序把图片放到某一个文件夹的过程。先把图片转化为一个数据集合(例如二进制),把这些数据一点一点传到文件夹,这个传递过程就很类似于水的流动,我们就可以称这个整体的数据集合是一个数据流。
    
分为文件流缓冲流
    文件流:数据流的读写都是基于文件的操作
    FileInputStream / FileOutputStream / FileReader / FileWriter
    缓冲流:数据流的读写都是基于内存的操作
    BufferedInputStream / BufferedOutputStream / BufferedReader / BufferedWriter
    

转换流
    InputStreamReader / OutputStreamWriter
    
标准输入流 / 标准输出流
    打印流(了解)
    PrintStream / PrintWriter
    数据流(了解)
    DataInputStream / DataOutputStream
    
对象流 ---- 涉及序列化、反序列化:把一个对象转化为一个数据流进行读写
    ObjectInputStream / ObjectOutputStream
随机存取文件流:例如一个txt文件,其中有100行数据,可以直接读取第50行数据,也可以在第89行插入数据(具体哪一行,由开发人员决定),这个才是随机的概念。
    RandomAccessFile

2. File类

java.io.File 类:文件和目录路径名的抽象表示形式,与平台无关
File新建删除重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入 / 输出流。

File 对象可以作为参数传递给流的构造函数

File 类的常见构造方法:
    ①public File(String pathname)
    以 pathname 为路径创建 File 对象,可以是绝对路径或者相对路径,
    如果 pathname 是相对路径,则默认的当前路径在系统属性 user.dir 中存储。

    ②public File(String parent,String child)
    以 parent 为父路径, child 为子路径创建 File 对象。
    File 的静态属性 String separator 存储了当前系统的路径分隔符。在 UNIX 中,此字段为‘ /’ ,在 Windows 中,为‘ \\’

举例:

package day12;

import java.io.File;

public class Test {
	public static void main(String[] args) {
		File f = new File("D:\\test\\abc\\tt.txt");//这个时候对象f就是tt.txt文件
		File f1 = new File("D:\\test\\abc","\\tt.txt");//这个f1也是tt.txt文件,这种使用相对较少
		File f2 = new File("D:/test/abc/tt.txt");
		File f3 = new File("D:" + File.separator + "test/abc/tt.txt");
		//注意:\在文件中是路径的分隔符,但是在java编程中一个\的意思是转义符,在java中\\或者/才是文件的分隔符
		//也可以用File.separator作为文件的分隔符
	}
}

小节:

File 类代表与平台无关的文件和目录。
File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身(类似于,你可以把一个txt文件放在各种地方,但是不能在txt文件中进行写操作)。如果需要访问文件内容本身,则需要使用输入 / 输出流

在这里插入图片描述

举例:

package day12;

import java.io.File;

public class Test {
	public static void main(String[] args) {
		File f = new File("D:\\test\\abc\\tt.txt");//这个时候对象f就是tt.txt文件
		File f1 = new File("D:\\test\\abc","\\tt.txt");//这个f1也是tt.txt文件,这种使用相对较少
		File f2 = new File("D:/test/abc/tt.txt");
		File f3 = new File("D:" + File.separator + "test/abc/tt.txt");
		//注意:\在文件中是路径的分隔符,但是在java编程中一个\的意思是转义符,在java中\\或者/才是文件的分隔符
		//也可以用File.separator作为文件的分隔符
		
		File f4 = new File("D:/test/abc");//这是个目录
		
		//getName():获取文件名和目录名
		System.out.println(f.getName());//文件名
		System.out.println(f4.getName());//目录名
		
		System.out.println("-------------------------------------------");
		//getPath():获取路径
		File f5 = new File("src/day12/Test.java");//使用相对路径来创建File对象
		System.out.println(f5.getPath());//获取文件或者文件夹的路径,就是new File时候写的路径
		System.out.println(f5.getAbsolutePath());//获取文件或者文件夹的绝对路径
		
		System.out.println("-------------------------------------------");
		
		//getAbsoluteFile()
		System.out.println(f5);
		System.out.println(f5.getAbsoluteFile());//返回一个用当前的文件的绝对路径构建的File对象
		
		System.out.println("-------------------------------------------");
		//getParent()
		System.out.println(f5.getParent());//返回当前文件或文件夹的父级路径
		
		System.out.println("-------------------------------------------");
		//renameTo():文件改名
		//f.renameTo(new File("D:/test/abc/tt1.txt"));//给文件或文件夹重命名				
	}
}

3. 练习题

采用递归遍历文件夹中所有子文件夹以及文件。

package day12;

import java.io.File;

public class Test {
	public static void main(String[] args) {	
		
		File f = new File("D:/APP");
		new Test().test(f);	
		
	}
	/**
	 * 递归遍历文件
	 * @param file
	 */
	public void test(File file) {
		if(file.isFile()) {
			System.out.println(file.getAbsolutePath() + "是文件");
		}else {
			System.out.println(file.getAbsolutePath() + "是文件夹");
			//如果是文件夹,这个文件夹里就可能有子文件夹或者文件
			File[] fs = file.listFiles();//获取当前文件夹下的子文件夹或者文件的File对象
			if(fs != null && fs.length > 0) {
				for(File ff : fs) {
					
					test(ff);//递归
					
				}
			}
		}
	}
	
}

4. Java IO原理

    IO 流用来处理设备之间的数据传输
    Java 程序中,对于数据的输入 / 输出操作以”流 (stream)” 的方式进行。
    java.io 包下提供了各种“流”接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。

    输入 input :读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。
    输出 output :将程序(内存)数据输出到磁盘、光盘等存储设备中

    
    
流的分类:

  • 按操作数据单位不同分为:字节流 (8 bit) ,字符流 (16 bit)
  • 按数据流的流向不同分为:输入流输出流
  • 按流的角色的不同分为:节点流处理流

Java 的 IO 流共涉及 40 多个类,实际上非常规则,都是从如下 4 个抽象基类派生的。

(抽象基类)字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter

由这四个类派生出来的子类名称都是以其父类名作为子类名后缀。

在这里插入图片描述

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

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

相关文章

pycharm 断点调试python Flask

以flask框架为例,其启动命令为 python app.py runserver 后面需要拼接runserver 点击开始断点 参考:https://www.cnblogs.com/bigtreei/p/14742015.html

Mac -- zsh-最新全网超详细的个性化终端(Terminal)颜色及vim颜色配置(亲测可行)

转自 Mac -- zsh-最新全网超详细的个性化终端(Terminal)颜色及vim颜色配置(亲测可行)_mac zsh-CSDN博客 以下都是苹果 设置,这是简化版的,详细的看我引用的 个性化终端颜色背景设置 显示检查器 打开终端,鼠标在终端中,右击&…

[PyTorch][chapter 60][强化学习-2-有模型学习2]

前言: 前面我们讲了一下策略评估的原理,以及例子. 强化学习核心是找到最优的策略,这里 重点讲解两个知识点: 策略改进 策略迭代与值迭代 最后以下面环境E 为例,给出Python 代码 。 目录: 1: 策略改进 2&…

图数据库Neo4j——SpringBoot使用Neo4j 简单增删改查 复杂查询初步

前言 图形数据库是专门用于存储图形数据的数据库,它使用图形模型来存储数据,并且支持复杂的图形查询。常见的图形数据库有Neo4j、OrientDB等。 Neo4j是用Java实现的开源NoSQL图数据库,本篇博客介绍如何在SpringBoot中使用Neo4j图数据库&…

防止重复提交请求

前景提要: ts 简易封装 axios,统一 API 实现在 config 中配置开关拦截器 axios 实现请求 loading 效果 用一个数组保存当前请求的 url,此时还未响应。如果再次发起同样请求,比对 url 发现已经存在数组中,则拦截请求&a…

【PyQt学习篇 · ⑨】:QWidget -控件交互

文章目录 是否可用是否显示/隐藏是否编辑是否为活跃窗口关闭综合案例信息提示状态提示工具提示“这是什么”提示 焦点控制单个控件角度父控件角度 是否可用 setEnabled(bool):该函数用于设置QWidget控件的可用性,参数bool为True表示该控件为可用状态&…

Spring底层原理(六)

Spring底层原理(六) 本章内容 介绍AOP的实现方式、JDK代理的模拟实现与源码 AOP的实现方式 使用代理模式 jdk动态代理cglib动态代理 使用aspectj的编译器,该编译器会直接对字节码进行修改,可以实现静态方法增强 使用javaagent,在jvm option中指定-…

FlinkCDC系列:通过skipped.operations参数选择性处理新增、更新、删除数据

在flinkCDC源数据配置,通过debezium.skipped.operations参数控制,配置需要过滤的 oplog 操作。操作包括 c 表示插入,u 表示更新,d 表示删除。默认情况下,不跳过任何操作,以逗号分隔。配置多个操作&#xff…

概念解析 | 神经网络中的位置编码(Positional Encoding)

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:Positional Encoding 神经网络中的位置编码(Positional Encoding) A Gentle Introduction to Positional Encoding in Transformer Models, Part 1 1.背景介绍 在自然语言处理任…

Zygote进程通信为什么用Socket而不是Binder?

Zygote进程是Android系统中的一个特殊进程,它在系统启动时被创建,并负责孵化其他应用进程。它的主要作用是预加载和共享应用进程的资源,以提高应用启动的速度。 在Android系统中,常用的进程通信方式有以下几种: Intent…

ABAP简单的队列设置QRFC

场景:用job的方式在接口里启用job,如果接口调用比较频繁,存在同一时间启动相同job的情况,会导致锁表锁程序这种情况。 查阅job函数,发现在JOB_CLOSE函数里自带了类似队列的参数,但是因为是接口&#xff0c…

文件夹还在,里面文件没了?问题这样解决

文件夹还在但文件无故消失怎么办?文件的消失对于我们来说可能是个令人沮丧且困惑的问题。有时候,我们可能会发现文件夹依然存在,但其中的文件却消失了。在这篇文章中,我们将探讨为什么电脑文件会无故消失的原因,并提供…

这个超实用的门禁技巧,让办公楼安全更简单高效!

门禁监控是现代社会中不可或缺的一部分,用于确保安全和管理进出某个区域的人员。随着科技的不断发展,门禁监控已经远离了传统的机械锁和钥匙,变得更加智能化和高效。 客户案例 企业办公大楼 无锡某大型企业在其办公大楼内部部署了泛地缘科技…

ChatGLM3设置角色和工具调用的解决方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

SpringMVC简单介绍与使用

目录 一、SpringMVC介绍 二、SpringMVC作用 三、SpringMVC核心组件 四、SpringMVC快速体验 一、SpringMVC介绍 Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称&#xff…

Node.js 中解析 HTML 的方法介绍

在 Web 开发中,解析 HTML 是一个常见的任务,特别是当我们需要从网页中提取数据或操作 DOM 时。掌握 Node.js 中解析 HTML 的各种方式,可以大大提高我们提取和处理网页数据的效率。本文将介绍如何在 Node.js 中解析 HTML。 基本概念 HTML 解析…

MySQL第三讲·SQL boy的CRUD操作

你好,我是安然无虞。 文章目录 增删查改:如何操作表中的数据?添加数据插入数据记录插入查询结果 删除数据修改数据查询数据select|where|group by|havingfromorder bylimit 增删查改:如何操作表…

第G7周:Semi-Supervised GAN 理论与实战

🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍦 参考文章:365天深度学习训练营-第G7周:Semi-Supervised GAN 理论与实战(训练营内部成员可读) 🍖 原作者:K同学啊|接…

【蓝桥杯选拔赛真题44】python小蓝晨跑 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析

目录 python小蓝晨跑 一、题目要求 1、编程实现 2、输入输出 二、算法分析

作为一个初学者,该如何入门大模型?

在生成式 AI 盛行的当下,你是否被这种技术所折服,例如输入一段简简单单的文字,转眼之间,一幅精美的图片,又或者是文笔流畅的文字就展现在你的面前。 相信很多人有这种想法,认为生成式 AI 深不可测&#xf…
最新文章