当前位置: 首页 > article >正文

关于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 &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"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. 有多少小于当前数字的数字 题目链接&#xff1a;1365. 有多少小、于当前数字的数字 - 力扣&#xff08;LeetCode&#xff09; 题目难度&#xff1a;简单 代码&#xff1a; class Solution {public int[] smallerNumbersThanCurrent(int[] nums) {Map<Integer,Inte…...

Docker-清理容器空间prune

docker system prune -a 是一个非常有用的命令&#xff0c;用于清理 Docker 系统中未使用的资源&#xff0c;包括停止的容器、未使用的网络、卷以及未被任何容器引用的镜像&#xff08;悬空镜像和所有未使用的镜像&#xff09;。以下是关于该命令的详细说明&#xff1a; 命令格…...

matplotlib——南丁格尔玫瑰

南丁格尔玫瑰图&#xff08;Nightingale Rose Chart&#xff09;&#xff0c;是一种特殊形式的柱状图&#xff0c;它以南丁格尔&#xff08;Florence Nightingale&#xff09;命名&#xff0c;她在1858年首次使用这种图表来展示战争期间士兵死亡原因的数据。 它将数据绘制在极坐…...

Django与网页表单

我叫补三补四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲网页表单 网页表单又叫做HTML表单&#xff0c;用来处理用户从页面输入发送到服务器的数据&#xff0c;页面表单通常会提供复选框、单选按钮和文本字段&#xff0c;方便用户填写各种形式…...

Rust从入门到精通之入门篇:10.包和模块

包和模块 在本章中&#xff0c;我们将学习 Rust 的包和模块系统&#xff0c;它们是组织和重用代码的重要工具。随着项目规模的增长&#xff0c;良好的代码组织变得越来越重要&#xff0c;Rust 提供了一套强大的机制来管理代码结构。 包和 Crate Crate Crate 是 Rust 中最高…...

ChatDBA VS DeepSeek:快速诊断 OceanBase 集群新租户数据同步异常

社区王牌专栏《一问一实验&#xff1a;AI 版》改版以来已发布多期&#xff08;51-60&#xff09;&#xff0c;展现了 ChatDBA 在多种场景下解决问题的效果。 下面让我们正式进入《一问一实验&#xff1a;AI 版》第 62 期&#xff0c;看看 ChatDBA 最新效果以及与热门大模型 De…...

dify忘记密码

特别好&#xff0c;非常好&#xff0c;一把年纪忘了dify的账号、密码了&#xff0c;very good&#xff01;&#xff01;&#xff01; 参考如下教程 https://zhuanlan.zhihu.com/p/24515387167 rootbae577d82ec7:/# psql -U postgres psql: error: connection to server on so…...

Python----计算机视觉处理(Opencv:图像边缘检测:非极大值抑制,双阈值筛选)

一、 高斯滤波 边缘检测本身属于锐化操作&#xff0c;对噪点比较敏感&#xff0c;所以需要进行平滑处理。这里使用的是一个5*5的高斯 核对图像进行消除噪声。 二、计算图像的梯度和方向 三、非极大值抑制 在得到每个边缘的方向之后&#xff0c;其实把它们连起来边缘检测就算完了…...

vue3(笔记)5.0--pinia工具的知识扩展

pinia工具 defineStore(创建pinia) 作用&#xff1a;用于定义一个 Pinia store。 用法&#xff1a; 接收一个唯一的 ID 和一个配置对象&#xff0c;配置对象中可以定义 state、getters 和 actions。state 是一个函数&#xff0c;返回初始状态。getters 类似于 Vue 组件中的计…...

基于Kubernetes部署Prometheus监控平台

#作者&#xff1a;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实现组件的懒加载&#xff1f; 在 React 项目里&#xff0c;有时候组件功能多、体积大&#xff0c;要是一次性把所有组件都加载进来&#xff0c;网页加载速度就会变慢。而 React 提供了 React.lazy 和 Suspense 这两个好东西…...

绿色暴政:Relax Max如何用军工科技定义环保新标准

《绿色暴政&#xff1a;Relax Max如何用军工科技定义环保新标准》 ——从隐形战斗机涂层到零碳卫浴的降维打击 &#xff08;洛克希德马丁实验室&#xff0c;2023年&#xff09;当F-35战斗机的隐形涂料配方被改写为卫浴釉料时&#xff0c;环保产业迎来了最硬核的颠覆者。Relax…...

蓝桥杯刷题 Day 4 栈与链表

蓝桥杯刷题 Day 4 栈与链表 文章目录 蓝桥杯刷题 Day 4 栈与链表前言一、栈1. 解题思路2. 拆解代码&#xff08;不复杂&#xff0c;不拆了&#xff09; 二、链表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窗口&#xff0c;并且需要实现加载模型后重新渲染更新窗口的功能&#xff0c;但是一直无法更新被卡住了&#xff0c;现在把问题解决了总结一下整个实现过程。 创建一个自己的OpenGLWidget类 QOp…...

机器学习正则化技术:Ridge、Lasso与ElasticNet全解析

机器学习中的正则化技术 在机器学习中&#xff0c;正则化技术&#xff08;如 Ridge 和 Lasso&#xff09;主要用于解决过拟合问题&#xff0c;通过限制模型复杂度提高泛化能力。以下是详细说明及实例代码&#xff1a; 一、正则化解决的问题 过拟合&#xff1a;模型在训练集表…...

数字转换(c++)

【题目描述】 如果一个数 xx 的约数和 yy &#xff08;不包括他本身&#xff09;比他本身小&#xff0c;那么 xx 可以变成 yy &#xff0c;yy 也可以变成 xx 。例如 44 可以变为 33 &#xff0c;11 可以变为 77 。限定所有数字变换在不超过 nn 的正整数范围内进行&#xff0c;…...

ESP32驱动BMP280和MQ4传感器

文章目录 前言 一、硬件准备 所需组件 连接方式&#xff1a; 二、软件实现 1.所需库 2.代码实现 效果演示 三、上传Qt端 前言 在物联网和环境监测应用中&#xff0c;传感器是获取环境数据的关键组件。本文将详细介绍如何使用ESP32微控制器同时驱动BMP280大气压力传感器…...

洛谷题单1-B2002 Hello,World!-python-流程图重构

题目描述 编写一个能够输出 Hello,World! 的程序。 提示&#xff1a; 使用英文标点符号&#xff1b;Hello,World! 逗号后面没有空格。H 和 W 为大写字母。 输入格式 无 输出格式 无 输入输出样例 #1 输入 #1 无输出 #1 Hello,World!方式-print() 代码 class Solut…...

MQTT协议笔记

消息格式 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息协议&#xff0c;专为低带宽、高延迟或不可靠的网络设计&#xff0c;广泛应用于物联网&#xff08;IoT&#xff09;设备之间的通信。MQTT消息体的结构遵循MQTT协议规范&#xff0…...

CentOS系统下安装tesseract-ocr5.x版本

CentOS系统下安装tesseract-ocr5.x版本 安装依赖包&#xff1a; yum update -y yum install autoconf automake libtool libjpeg-devel libpng-devel libtiff-devel zlib-devel yum install automake libtool bzip2 -y手动编译安装GCC&#xff08;因系统默认安装的GCC版本比较…...

“征服HTML引号恶魔:“完全解析手册”!!!(quot;表示双引号)

&#x1f6a8;&#x1f4e2; "征服HTML引号恶魔&#xff1a;“完全解析手册” &#x1f4e2;&#x1f6a8; &#x1f3af; 博客引言&#xff1a;当引号变成"恶魔" &#x1f631; 是否遇到过这种情况&#xff1a; 写HTML时满心欢喜输入<div title"他…...

如何使用VS中的Android Game Development Extension (AGDE) 来查看安卓 Logcat 日志

一、首先按照以下 指引 中的 第1、2步骤&#xff0c;安装一下 AGDE &#xff0c;AGDE 的安装包可以在官网上找到。 UE4 使用AndroidGameDevelopmentExtension&#xff08;AGDE&#xff09;对安卓客户端做“断点调试”与“代码热更”-CSDN博客 在执行第二步骤前&#xff0c;记得…...

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智能问答小程序开发——完整项目&#xff08;含完整前端后端代码&#xff09;【Spring AI】基于专属知识库的RAG智能问答小程序开发——代码逐行精讲&#xff1a;核心ChatClient对象相关构造函数【Spring AI】基于专属知识库的R…...

Solr-搜索引擎-入门到精通

以下是对 Apache Solr 的简介及其常用语法的快速入门指南&#xff1a; 一、Solr 是什么&#xff1f; • 核心定位&#xff1a;Apache Solr 是一个基于 Lucene 的高性能、开源的搜索平台&#xff0c;支持全文检索、分词、高亮、聚合统计等功能。 • 核心功能&#xff1a; • 全…...