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

news2024/11/24 11:48:19

文章目录

  • 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.coloradmin.cn/o/1167944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何看待腾讯云双11活动3年轻量服务器突然涨价?

腾讯云双十一优惠活动提供的3轻量应用服务器涨价了,最初双11优惠活动3年轻量2核4G5M服务器从566.6元涨价到756元三年,3年轻量2核2G4M服务器从366.6元恢复到540元三年,大家抓紧吧,三年轻量已经库存已经不多了,看看隔壁阿…

@RunWith(SpringRunner.class)注解的作用

通俗点: RunWith(SpringRunner.class)的作用表明Test测试类要使用注入的类,比如Autowired注入的类,有了RunWith(SpringRunner.class)这些类才能实例化到spring容器中,自动注入才能生效 官方点: RunWith 注解是JUnit测…

线程池与工厂模式

目录 ♫什么是线程池 ♫线程池的优点 ♫工厂模式 ♫工厂模式的意义 ♫线程池的使用 ♫线程池常见的创建方法 ♫ThreadPoolExecutor ♫实现一个线程池 ♫什么是线程池 线程池是一种管理和复用线程的技术,它在应用程序启动时预先创建一组线程,并将它…

三巨头的AI布局:微软领先,谷歌追赶,亚马逊待考

AI是当今科技领域的热门话题,也是三大云计算巨头微软、谷歌和亚马逊的核心战略。近日,微软和谷歌先后公布了2023年第三季度的财报,展示了各自在AI方面的进展和成果。亚马逊也即将发布财报,让我们一起来看看三巨头的AI布局有什么不…

安卓毕业设计:基于安卓Android的仓库货物管理app

项目介绍 本文介绍了仓库货物管理APP软件开发建设的意义和国内外发展现状,然后详细描述了所开发手机APP的可行性分析,并分析了手机APP所要实现的功能。因为仓库货物管理设施较多,而且人口密集,不能更好的管理仓库货物&#xff0c…

【vue】封装树形下拉框组件 el-popover+el-tree+el-select

父组件使用 <template><div>{{ array }} 更多属性详见wgyTreeSelect组件<wgyTreeSelectv-model"array":list"list":multiple"true":disabled-ids"[111,113,2]"/></div> </template><script> /*…

本地通过跳板机连接开发机流程简单记录

1、配置跳板机 主机名、端口、用户名&#xff0c;这些都是跳板机的&#xff0c;填完后选择PublicKey&#xff0c;点属性 属性设置打开后&#xff0c;选择使用全局公钥设置->使用身份或整数文件->配上相应的私钥地址&#xff0c;再选择使用整数作为武安市SSH2密钥指纹&am…

多线程环境下使用责任链,串链了

问题描述&#xff1a; 系统定义了一套校验链&#xff1a;链1,链2,,,链N&#xff1b;交由不同的业务初始化自定义的链结构。比如 业务a&#xff1a;定义的是链1、链3 业务b&#xff1a;定义的是链2、链4 结果&#xff1a; 业务a走的链成2、4了。 public abstract class Ch…

会声会影2024出来了吗?有哪些新功能?剪辑后音乐剪辑教程

会声会影 2024视频编辑软件&#xff0c;既加入光影、动态特效的滤镜效果&#xff0c;也提供了与色彩调整相关的LUT配置文件滤镜&#xff0c;可选择性大&#xff0c;运用起来更显灵活。会声会影在用户的陪伴下走过20余载&#xff0c;经过上百个版本的优化迭代&#xff0c;已将操…

硬件工程师到底可以从哪些方面提升自己?

大家好,这里是大话硬件。 最近在大话硬件群里,聊得比较多的就是讨论怎么提升自己的能力,怎么拿到更高的工资。我想,这可能并不是只在大话硬件群才有的话题,其实在每一位工作的人心里应该都在想的两个问题。 因此,这篇文章简单分享一下,作为一名硬件工程师,可以在做哪…

【LeetCode刷题-链表】--876.链表的中间结点

876.链表的中间结点 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*…

Jmeter压测 —— 1秒发送1次请求

场景&#xff1a;有时候测试场景需要设置请求频率为一秒一次&#xff08;或几秒一次&#xff09;实现方法一&#xff1a;1、首先需要在线程组下设置循环次数&#xff08;可以理解为请求的次数&#xff09; 次数设置为请求300次&#xff0c;其中线程数跟时间自行设置 2、在设置…

Python数据分析实战-筛选出DataFrame中指定列都不包含缺失值的记录(附源码和实现效果)

实现功能 筛选出DataFrame中指定列都不包含缺失值的记录 实现代码 import pandas as pd# 创建示例DataFrame data {A: [1, 2, 3, None, 5],B: [1, None, 3, 4, 5],C: [1, 2, 3, 4, 5] } df pd.DataFrame(data)# 筛选出指定列都不包含缺失值的记录 columns_to_check [A, B…

【四、http】go的http的文件下载

一、日常下载图片到本地 //下载文件func downloadfile(url, filename string) {r, err : http.Get(url)if err ! nil {fmt.Println("err", err.Error())}defer r.Body.Close()f, err : os.Create(filename)if err ! nil {fmt.Println("err", err.Error())…

段错误如何调试

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言段错误产生的原因问题1&#xff1a;访问不存在的内存地址问题2&#xff1a;访问只读的内存地址问题3&#xff1a;栈溢出问题4&#xff1a;内存越界如何解决段错…

海康监控摄像机和录像机接入LiveMedia GB28181平台实现远程调取监控视频

海康威视各种型号监控摄像头或硬盘录像机&#xff08;NVR/HVR&#xff09;接入LiveMedia GB28181平台配置过程都非常简单明了&#xff0c;但有些细节需要注意&#xff0c;避免走弯路。 1、基本要求 (1) 网络要求 总体来说&#xff0c;只要监控设备和GB28181平台的网络是连通…

RT-DETR 项目【训练】【验证】【推理】脚本

文章目录 训练 --train.py推理 --detect.py验证 --val.py不训练,只查看模型结构/参数量 --test.py有同学问 RT-DETR 怎么训练,其实和 YOLOv8 几乎一样,但是有很多同学没接触过 v8 我这里直接给大家写好几个脚本,大家直接在我的脚本上调节参数就可以训练了, 脚本包含【训…

使用Gorm进行CRUD操作指南

使用GORM在Go中创建、读取、更新和删除记录的逐步教程 在数据库管理中&#xff0c;CRUD操作是应用程序的支柱&#xff0c;它们使数据的创建、检索、更新和删除成为可能。强大的Go对象关系映射库GORM通过抽象SQL语句的复杂性&#xff0c;使这些操作变得轻松。本文将作为您全面指…

内网穿透Windows下快速搭建个人WEB项目无需服务器

&#x1f4d1;前言 本文主要是windows下内网穿透文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日一句&#xff1a;努力…

实测用AI还原让子弹飞名场面

最近这两天&#xff0c;郭德纲说英语相声的视频刷到了一遍又一遍&#xff0c;这些视频并非简单的配音或者AI变声&#xff0c;而是高度贴合人物声线和风格、甚至连嘴型都匹配&#xff0c;如果不仔细看&#xff0c;你根本看不出任何破绽&#xff0c;因为内容是郭德纲的&#xff0…