关于CodeJava的学习笔记——9
一、IO流
1、定义
I=Input=输入 O=Output=输出
流 : 数据从源点传输到汇点的"管道"而已
2、流的分类
按照方向分: 输入流 输出流 *:参照物=当前Java程序为参照物
按照单位分: 字节流 字符流
按照功能分: 节点流 过滤流(包装流 处理流)
3、各种流
(1)基础IO流
InputStream 所有字节输入流统一的父类 抽象类
int read()
int read(byte[] data)
int read(byte[] data,int offset,int length)
OutputStream 所有字节输出流统一的父类 抽象类
write(int data)
write(byte[] data)
write(byte[] data,int offset,int length)
(2)File
FileInputStream 输入流 字节流 节点流
可以自动创建新的文件。如果指向的文件不存在
FileOutputStream 输出流 字节流 节点流(但是只能连接文件 不能连接目录)
会直接替换掉这个文件,然后往文件内部转数据
import java.io.*;
//JDK7.0 出现的 TWR => Try-With-Resources
public class TestFileCopyWithTWR{public static void main(String[] args){try(FileInputStream fis = new FileInputStream("1.mp3");FileOutputStream fos = new FileOutputStream("3.mp3")){byte[] data = new byte[5<<20];//5mint len;while((len = fis.read(data))!=-1){fos.write(data,0,len);}}catch(Exception e){e.printStackTrace();}}
}
(3)Buffered
BufferedInputStream 输入流 字节流 过滤流
BufferedOutputStream 输出流 字节流 过滤流
作为过滤流的它们 是给原本的流添加缓冲空间
从而提高每次读写的吞吐量 进而提高效率
默认8192 也就是8k 可以传参指定大小
import java.io.*;
public class TestBufferedStream{public static void main(String[] args)throws Exception{FileInputStream fis = new FileInputStream("1.mp3");//针头BufferedInputStream bis = new BufferedInputStream(fis,5<<20);//针管(针头)FileOutputStream fos = new FileOutputStream("3.mp3");//针头BufferedOutputStream bos = new BufferedOutputStream(fos,5<<20);//针管(针头)int data;while((data = bis.read())!=-1){bos.write(data);}bos.flush();//bos.close();bis.close();}
}
(4)Data
DataInputStream 输入流 字节流 过滤流
DataOutputStream 输出流 字节流 过滤流
为了给原本的流,添加读写基本数据类型的功能
*: DataInputStream 提供的核心方法 readXxxx() 有返回值
*: DataOutputStream 提供的核心方法 writeXxxx() 要参数
import java.io.*;
public class HelloWorld{public static void main(String[] args)throws Exception{int time = 1;File dataFile = new File("cs.data");if(dataFile.exists()){DataInputStream dis = new DataInputStream(new FileInputStream(dataFile));time = dis.readInt();dis.close();}System.out.println("HelloWorld : "+time);time++;//存档的逻辑DataOutputStream dos = new DataOutputStream(new FileOutputStream(dataFile));dos.writeInt(time);dos.close();}
}
(5)Object
ObjectInputStream 输入流 字节流 过滤流
ObjectOutputStream 输出流 字节流 过滤流
*: 想要持久化 首先需要序列化
想要被保存到磁盘当中的对象它的类必须实现序列化接口
implements Serializable
如果这个类型当中有其它引用类型的属性
就连属性的类型也必须要实现序列化接口
如果某些属性无关紧要 不需要参与持久化存储
则可以使用transient修饰
transient => 不参与持久化的
import java.io.*;
public class TestObjectStreamMax{public static void main(String[] args)throws Exception{/*Teacher tea = new Teacher("JayZhou",37);ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("电冰箱.data"));oos.writeObject(tea);oos.close();*/ObjectInputStream ois = new ObjectInputStream(new FileInputStream("电冰箱.data"));Teacher tea = (Teacher)ois.readObject();ois.close();System.out.println(tea.name + " : " + tea.age + " : " +tea.pc);}
}
class Computer{String logo;public Computer(String logo){this.logo = logo;}
}
class Teacher implements Serializable{//标识接口String name;int age;//transient => 短暂的 转瞬即逝的 => 不参与持久化的transient Computer pc;public Teacher(String name,int age){this.name = name;this.age = age;pc = new Computer("Lenovo");}
}
4、small big one
import java.io.*;
import java.util.*;
/*请用程序找出c盘下的所有.jpg图片 (包含子目录中的哦)然后用刚学的内容 将每张图片都复制到d:\foto目录当中*: d盘下的foto目录可能尚不存在 得用程序建*: c盘下的不同的子目录当中 可能会有重名的文件目标目录当中的文件 请以序列编号命名00001.jpg00002.jpg00003.jpg
*/
public class SmallOne{static int id; // 用于生成文件名的序列号static List<File> list = new ArrayList<>(); // 存储找到的.jpg文件列表public static void main(String[] args){search(new File("c:\\")); // 从C盘根目录开始搜索sortList(); // 对找到的文件按最后修改时间排序createTarget(); // 创建目标目录for(File src : list){ // 遍历所有找到的文件File tar = nextFile(); // 获取下一个目标文件名copy(src,tar); // 复制文件}}// 复制文件的方法public static void copy(File src,File tar){try(FileInputStream fis = new FileInputStream(src); // 输入流读取源文件FileOutputStream fos = new FileOutputStream(tar)){ // 输出流写入目标文件byte[] data = new byte[16384]; // 缓冲区大小为16KBint len;while((len = fis.read(data))!=-1){ // 循环读取数据fos.write(data,0,len); // 写入数据到目标文件}}catch(Exception e){e.printStackTrace(); // 捕获并打印异常信息}}// 生成下一个目标文件名的方法public static File nextFile(){StringBuffer buff = new StringBuffer(String.valueOf(++id)); // 序列号自增并转换为字符串while(buff.length() < 5){ // 确保文件名长度为5位,不足则补零buff.insert(0,"0");}buff.append(".jpg"); // 添加文件扩展名File x = new File("d:\\foto",buff.toString()); // 创建目标文件对象return x; // 返回目标文件对象}// 创建目标目录的方法public static void createTarget(){File dir = new File("d:\\foto"); // 目标目录路径dir.mkdirs(); // 创建目录及其父目录(如果不存在)}// 对找到的文件列表进行排序的方法public static void sortList(){list.sort((a,b) -> Long.compare(a.lastModified(),b.lastModified())); // 按最后修改时间升序排序}// 递归搜索指定目录下的所有.jpg文件的方法public static void search(File tar){File[] ds = tar.listFiles((x) -> x.isDirectory()); // 获取当前目录下的所有子目录File[] js = tar.listFiles((x) -> x.isFile() && x.getName().toLowerCase().endsWith(".jpg")); // 获取当前目录下的所有.jpg文件if(ds == null) return; // 如果当前目录没有子目录,直接返回for(File d : ds){ // 递归搜索每个子目录search(d);}Collections.addAll(list,js); // 将找到的.jpg文件添加到列表中}
}
相关文章:
关于CodeJava的学习笔记——9
一、IO流 1、定义 IInput输入 OOutput输出 流 : 数据从源点传输到汇点的"管道"而已 2、流的分类 按照方向分: 输入流 输出流 *:参照物当前Java程序为参照物 按照单位分: 字节流 字符流 按照功能分: 节点流 过滤流(包装流 处…...
LeetCode算法题(Go语言实现)_11
题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列&a…...
Python----数据分析(足球运动员数据分析)
一、数据展示 1.1、数据 1.2、列名 字段名备注Name姓名Nationality国籍National_Position国家队位置National_Kit国家队号码Club所在俱乐部Club_Position所在俱乐部位置Club_Kit俱乐部号码Club_Joining加入俱乐部时间Contract_Expiry合同到期时间Rating评分Height身高Weight体…...
Day38 | 1365. 有多少小于当前数字的数字、941. 有效的山脉数组、1207. 独一无二的出现次数、283. 移动零、189. 轮转数组
1365. 有多少小于当前数字的数字 题目链接:1365. 有多少小、于当前数字的数字 - 力扣(LeetCode) 题目难度:简单 代码: class Solution {public int[] smallerNumbersThanCurrent(int[] nums) {Map<Integer,Inte…...
Docker-清理容器空间prune
docker system prune -a 是一个非常有用的命令,用于清理 Docker 系统中未使用的资源,包括停止的容器、未使用的网络、卷以及未被任何容器引用的镜像(悬空镜像和所有未使用的镜像)。以下是关于该命令的详细说明: 命令格…...
matplotlib——南丁格尔玫瑰
南丁格尔玫瑰图(Nightingale Rose Chart),是一种特殊形式的柱状图,它以南丁格尔(Florence Nightingale)命名,她在1858年首次使用这种图表来展示战争期间士兵死亡原因的数据。 它将数据绘制在极坐…...
Django与网页表单
我叫补三补四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲网页表单 网页表单又叫做HTML表单,用来处理用户从页面输入发送到服务器的数据,页面表单通常会提供复选框、单选按钮和文本字段,方便用户填写各种形式…...
Rust从入门到精通之入门篇:10.包和模块
包和模块 在本章中,我们将学习 Rust 的包和模块系统,它们是组织和重用代码的重要工具。随着项目规模的增长,良好的代码组织变得越来越重要,Rust 提供了一套强大的机制来管理代码结构。 包和 Crate Crate Crate 是 Rust 中最高…...
ChatDBA VS DeepSeek:快速诊断 OceanBase 集群新租户数据同步异常
社区王牌专栏《一问一实验:AI 版》改版以来已发布多期(51-60),展现了 ChatDBA 在多种场景下解决问题的效果。 下面让我们正式进入《一问一实验:AI 版》第 62 期,看看 ChatDBA 最新效果以及与热门大模型 De…...
dify忘记密码
特别好,非常好,一把年纪忘了dify的账号、密码了,very good!!! 参考如下教程 https://zhuanlan.zhihu.com/p/24515387167 rootbae577d82ec7:/# psql -U postgres psql: error: connection to server on so…...
Python----计算机视觉处理(Opencv:图像边缘检测:非极大值抑制,双阈值筛选)
一、 高斯滤波 边缘检测本身属于锐化操作,对噪点比较敏感,所以需要进行平滑处理。这里使用的是一个5*5的高斯 核对图像进行消除噪声。 二、计算图像的梯度和方向 三、非极大值抑制 在得到每个边缘的方向之后,其实把它们连起来边缘检测就算完了…...
vue3(笔记)5.0--pinia工具的知识扩展
pinia工具 defineStore(创建pinia) 作用:用于定义一个 Pinia store。 用法: 接收一个唯一的 ID 和一个配置对象,配置对象中可以定义 state、getters 和 actions。state 是一个函数,返回初始状态。getters 类似于 Vue 组件中的计…...
基于Kubernetes部署Prometheus监控平台
#作者:stackofumbrella 文章目录 prometheus和k8s集群版本对照表架构Prometheus Operator简介kube-prometheus下载地址 安装修改镜像地址修改Prometheus的service修改Grafana的service修改Alertmanager的service数据持久化执行安装 Prometheus验证Grafana验证解决C…...
往期项目shader着色器实践效果应用合集
1、管路混色 2、水管水流效果 3、水管流入到流完效果 4、加热冷却 两 色混色 示意 XX、毒蘑菇测试效果...
如何在 React 项目中使用React.lazy和Suspense实现组件的懒加载?
大白话如何在 React 项目中使用React.lazy和Suspense实现组件的懒加载? 在 React 项目里,有时候组件功能多、体积大,要是一次性把所有组件都加载进来,网页加载速度就会变慢。而 React 提供了 React.lazy 和 Suspense 这两个好东西…...
绿色暴政:Relax Max如何用军工科技定义环保新标准
《绿色暴政:Relax Max如何用军工科技定义环保新标准》 ——从隐形战斗机涂层到零碳卫浴的降维打击 (洛克希德马丁实验室,2023年)当F-35战斗机的隐形涂料配方被改写为卫浴釉料时,环保产业迎来了最硬核的颠覆者。Relax…...
蓝桥杯刷题 Day 4 栈与链表
蓝桥杯刷题 Day 4 栈与链表 文章目录 蓝桥杯刷题 Day 4 栈与链表前言一、栈1. 解题思路2. 拆解代码(不复杂,不拆了) 二、链表1. 解题思路1.1 主函数1.2 自定义列表类1.2.1 插入操作1.2.2 删除操作1.2.3 按要求输出 三、 题后收获3.1 知识点 前…...
第十三届蓝桥杯单片机省赛程序设计试题
目录 试题 各程序块代码 init.c main.c other.h other.c key.c seg.c onewire.c部分 ds1302.c部分 试题 各程序块代码 init.c #include "other.h"void init74hc138(unsigned char n){P2(P2&0x1f)|(n<<5);P2&0x1f; } void init(){P00x00;in…...
QOpenGLWidget动态加载功能实现教程(Qt+OpenGL)
QOpenGLWidget动态加载功能实现教程 我需要在Qt里面使用QOpenGLWidget显示OpenGL窗口,并且需要实现加载模型后重新渲染更新窗口的功能,但是一直无法更新被卡住了,现在把问题解决了总结一下整个实现过程。 创建一个自己的OpenGLWidget类 QOp…...
机器学习正则化技术:Ridge、Lasso与ElasticNet全解析
机器学习中的正则化技术 在机器学习中,正则化技术(如 Ridge 和 Lasso)主要用于解决过拟合问题,通过限制模型复杂度提高泛化能力。以下是详细说明及实例代码: 一、正则化解决的问题 过拟合:模型在训练集表…...
数字转换(c++)
【题目描述】 如果一个数 xx 的约数和 yy (不包括他本身)比他本身小,那么 xx 可以变成 yy ,yy 也可以变成 xx 。例如 44 可以变为 33 ,11 可以变为 77 。限定所有数字变换在不超过 nn 的正整数范围内进行,…...
ESP32驱动BMP280和MQ4传感器
文章目录 前言 一、硬件准备 所需组件 连接方式: 二、软件实现 1.所需库 2.代码实现 效果演示 三、上传Qt端 前言 在物联网和环境监测应用中,传感器是获取环境数据的关键组件。本文将详细介绍如何使用ESP32微控制器同时驱动BMP280大气压力传感器…...
洛谷题单1-B2002 Hello,World!-python-流程图重构
题目描述 编写一个能够输出 Hello,World! 的程序。 提示: 使用英文标点符号;Hello,World! 逗号后面没有空格。H 和 W 为大写字母。 输入格式 无 输出格式 无 输入输出样例 #1 输入 #1 无输出 #1 Hello,World!方式-print() 代码 class Solut…...
MQTT协议笔记
消息格式 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息协议,专为低带宽、高延迟或不可靠的网络设计,广泛应用于物联网(IoT)设备之间的通信。MQTT消息体的结构遵循MQTT协议规范࿰…...
CentOS系统下安装tesseract-ocr5.x版本
CentOS系统下安装tesseract-ocr5.x版本 安装依赖包: yum update -y yum install autoconf automake libtool libjpeg-devel libpng-devel libtiff-devel zlib-devel yum install automake libtool bzip2 -y手动编译安装GCC(因系统默认安装的GCC版本比较…...
“征服HTML引号恶魔:“完全解析手册”!!!(quot;表示双引号)
🚨📢 "征服HTML引号恶魔:“完全解析手册” 📢🚨 🎯 博客引言:当引号变成"恶魔" 😱 是否遇到过这种情况: 写HTML时满心欢喜输入<div title"他…...
如何使用VS中的Android Game Development Extension (AGDE) 来查看安卓 Logcat 日志
一、首先按照以下 指引 中的 第1、2步骤,安装一下 AGDE ,AGDE 的安装包可以在官网上找到。 UE4 使用AndroidGameDevelopmentExtension(AGDE)对安卓客户端做“断点调试”与“代码热更”-CSDN博客 在执行第二步骤前,记得…...
VSCode 生成HTML 基本骨架
在VSCode 新建html文件中敲一个英文感叹号 ! <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…...
【Spring AI】基于专属知识库的RAG智能问答小程序开发——功能优化:用户鉴权相关工具类代码
系列文章目录 【Spring AI】基于专属知识库的RAG智能问答小程序开发——完整项目(含完整前端后端代码)【Spring AI】基于专属知识库的RAG智能问答小程序开发——代码逐行精讲:核心ChatClient对象相关构造函数【Spring AI】基于专属知识库的R…...
Solr-搜索引擎-入门到精通
以下是对 Apache Solr 的简介及其常用语法的快速入门指南: 一、Solr 是什么? • 核心定位:Apache Solr 是一个基于 Lucene 的高性能、开源的搜索平台,支持全文检索、分词、高亮、聚合统计等功能。 • 核心功能: • 全…...
