IO 复习
IO
把电脑硬盘中的数据读到程序中,称为输入,进行数据的read操作
把程序往外部设备写数据,称为输出,进行数据的write操作
File类
一个File对象可以表示计算机硬盘上的一个文件或目录(文件夹)
可以获取文件信息,创建文件,删除文件
但是不能对文件中的数据进行读写操作
一些File类的方法
public class FileDemo {public static void main(String[] args) {
/*File类中构造方法*//*String p = "E:/";File f1 = new File(p,"demo.txt");File f2 = new File(p,"demo.txt");*/
/*File pf = new File("E:");File f2 = new File(pf,"demo.txt");*/
File f = new File("E:/demo.txt");System.out.println(f.canExecute());// 文件是否可以被执行System.out.println(f.canRead());// 是否可以读取System.out.println(f.canWrite());// 是否可以写
System.out.println("---------------------------");System.out.println(f.exists());// 文件是否存在System.out.println(f.getAbsolutePath());//获得文件绝对地址
System.out.println(f.getName());// 获取文件名字System.out.println(f.getParent());// 获取父级地址
System.out.println(f.isAbsolute());//是否为绝对路径System.out.println("---------------------------");System.out.println(f.isDirectory());// 是否是文件夹System.out.println(f.isFile());// 是否是文件System.out.println(f.isHidden());// 是否隐藏文件
System.out.println(new Date(f.lastModified()));//文件最后一次修改的时间System.out.println(f.length());//文件内容长度 以字节为单位
}
}
流的分类
按照流(java提供的读写文件的类)的读写单位划分为
字节流:每次读写是以字节为单位(计算机中的所有数据存储都是字节为单位) 可以读取任意文件(视频,音频...)
字符流:每次都写是以字符为单位 只能读取纯文本文件(txt,java,html)
字节流
输入字节流:InputStream
FileInputStream就是节点流 直接负责对接文件,对文件进行读写操作
输出字节流:OutputStream
FileOutputStream
public class StreamDemo1 {
public static void main(String[] args) throws IOException {
//创建一个输入字节流对象 并为其指定要读的文件FileInputStream in = new FileInputStream("E:/demo.txt");//输入的源文件不存在,会报错FileOutputStream out = new FileOutputStream("D:/demo.txt");//输出时文件不存在是可以自动创建//in.read() 每次读到一个字节数据 并返回, 直到读完后返回-1.int b = 0;while ((b = in.read()) != -1) {out.write(b);}in.close();out.close();//关闭流通道 释放文件}
}
public class StreamDemo2 {
public static void main(String[] args) throws IOException {
FileInputStream in= new FileInputStream("E:/feige.exe");FileOutputStream out = new FileOutputStream("E:/demo.exe");//read() write(int b) 每次只能读入 写出一个字节 效率低, 读写次数多//in.read(b); 每次读一个byte数组个字节内容,返回实际向数组装入的字节数量 读完也是返回-1byte[] b = new byte[1024];int size=0;// 每次最多读取b.length个字节数据为字节数组while((size=in.read(b))!=-1){System.out.println(size);//每次向外写出一个byte数组个字节,从第0个开始,写size个,效率高out.write(b,0,size);}in.close();out.close();}
}
根据封装类型不同流分为:
节点流: 封装的是某种特定的数据源,如文件、字符串、字符串数组等
FileInputStream就是节点流 直接负责对接文件,对文件进行读写操作
处理流:封装的是其他流对象,处理流提供了缓冲功能,提高读写效率,同时增加了一些新的方法
public class StreamDemo4 {
public static void main(String[] args) throws IOException {
//节点流 直接负责数据读和写FileInputStream in = new FileInputStream("E:/feige.exe");FileOutputStream out = new FileOutputStream("E:/demo.exe");
//处理流/包装流/缓存流(带缓冲区)BufferedInputStream bin = new BufferedInputStream(in);BufferedOutputStream bout = new BufferedOutputStream(out);
byte [] b = new byte[1024];int size = 0;while((size=bin.read())!=-1){bout.write(b,0,size);}
bin.close();bout.flush();//刷新缓存区bout.close();
}
}
字符流
字符流只能读纯文本文件
输入字符流:
Reader
InputStreamReader
输入转换流,可以把原始字节结合 编码转为字符
FileReader 可以读入一个字符
输出字符流:
Writer
OutputStreamWriter
将字符转为字节
FileWriter 可以写出一个字符
FileReader reader = new FileReader("E:/demo.txt");
FileWriter writer = new FileWriter("E:/demo1.txt");
char[] cs = new char[10];
int size = 0;
// reader.read();// 一次读到一个字符编码
while((size=reader.read(cs))!=-1){System.out.println(size);writer.write(cs,0,size);
}
reader.close();
writer.close();
//节点流 直接包含数据
FileReader reader = new FileReader("E:/demo.txt");
FileWriter writer = new FileWriter("E:/demo2.txt",true);//后面输出不会覆盖前面的,会保留前面的内容
//字符处理流BufferedReader breader = new BufferedReader(reader);BufferedWriter bwriter = new BufferedWriter(writer);//readLine() 一次读一行数据 一次缓冲一行数据String line = null;while((line=breader.readLine())!=null){bwriter.write(line);//一次写出一行数据bwriter.newLine();//插入一个换行符}
breader.close();bwriter.flush();//缓冲流关闭前需要刷新bwriter.close();
字符处理流这里我们可以一行一行的读和写,这样加大了读写操作的效率
对象输入流和对象输出流
对象---指的是java程序运行时产生的对象
将程序运行时,创建的对象,输出到一个文件中
为什么要将运行时的对象输出到文中?
为了实现数据 持久保存 有时,服务器要关闭(程序结束运行),结束运行时,将一些保存下来
对象输出-->对象序列化
对象输入流 将文件中存储的对象信息 在输入到程序中-->对象反序列化(java中创建对象的方式之一)
java中创建对象 不仅仅只有new一种 对象反序列化 反射
创建一个User类 并且实现Serializable接口,如果不实现的话,那么此类对象信息将无法被输出到文件中
//需要被序列化的类,必须实现Serializable接口,会为类生成一个序列化id号,是唯一与类对应
public class User implements Serializable {
private Integer id;private String name;
public User(Integer id, String name) {this.id = id;this.name = name;}
public Integer getId() {return id;}
public void setId(Integer id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
}
public class ObjectStream {
public static void main(String[] args) throws IOException, ClassNotFoundException {
/* Date date = new Date();String s = new String("abc");User user = new User(1, "jim");
// 讲对象信息输出到文件中 称为对象序列化 对象的类必须实现java.io.Serializable接口FileOutputStream out = new FileOutputStream("E:/obj.txt");ObjectOutputStream objectOut = new ObjectOutputStream(out);objectOut.writeObject(date);objectOut.writeObject(s);objectOut.writeObject(user);objectOut.flush();objectOut.close();*/
// 对象反序列化 将文件中的信息输入到程序 再创建一个对象FileInputStream in = new FileInputStream("E:/obj.txt");ObjectInputStream objIn = new ObjectInputStream(in);Date date = (Date) objIn.readObject();String s = (String) objIn.readObject();User user = (User) objIn.readObject();
System.out.println(date);System.out.println(s);System.out.println(user.getId()+":"+user.getName());}
}
相关文章:
IO 复习
IO 把电脑硬盘中的数据读到程序中,称为输入,进行数据的read操作 把程序往外部设备写数据,称为输出,进行数据的write操作 File类 一个File对象可以表示计算机硬盘上的一个文件或目录(文件夹) 可以获取文件信息,创建文件,删除文件 但是不能对文件中的数据进行读写操作 一些…...
什么是项目管理
项目管理(简称PM),就是将知识、技能、工具与技术应用于项目活动,以满足项目的要求。项目管理通过合理运用与整合特定项目所需的项目管理过程得以实现。项目管理使组织能够有效且高效地开展项目 “现代管理,项目就是一切…...
什么是入站营销?如何向合适的受众推销
没有什么比入站营销更有效地优先考虑客户体验了。 入站营销可为您的客户在他们需要的时间和地点准确提供他们想要的东西。它以最有机的方式在您的行业中建立信任、忠诚和权威。 什么是入站营销? 入站营销是一种商业方法,可提供优质内容和量身定制的客户…...

Qt 崩溃 corrupted double-linked list Aborted
文章目录摘要1 使用全局静态变量2 不取第一个和最后一个数3 将数据计算放到同一线程计算4 替换槽函数5 修改传值为const6 神奇的环境因素7 更神奇的板子差异8 另一个细节Aborted最后关键字: Qt、 Aborted、 corrupted、 double、 linked 摘要 额,结论&…...

牛逼了!这是什么神仙面试宝典?半月看完25大专题,居然斩获阿里P7offer
这是什么神仙面试宝典?半月看完25大专题,居然斩获阿里P7offer???????容我小小的嘚瑟一下下啦~~这份神仙面试宝典总共有25大专题:专题一:JavaOOP面…...

单链表详解
单链表一.概念二.一些类型的创建三.尾插四.头插五.头删尾删六.打印链表七.单链表查找,任意位置插入,任意位置删除八.源代码一.概念 该篇链表博客是按照工程项目的格式来记录的,与平常的算法链表有些许不同,注意区分。 二.一些类型的创建 三.尾…...
【AUTOSAR-CanNM】-3.1-如何让ECU发出的首帧是NM帧(Tx Nm报文先于Tx App应用报文发出)
点击返回「《Autosar_BSW高阶配置》总目录」 案例背景(共5页精讲):该篇博文将告诉您: 如何让ECU发出的首帧/第一帧是网络管理NM报文/帧(Tx Nm报文先于Tx App应用报文发出) 目录 1 图解详述APP报文和NM报文是如何发送的...

html常用标签2和语法练习
目录 1.表单标签 form标签 input标签 选择框 复选框:checkbox 按钮框:button 文件选择框 多行编辑框:textarea 2.html语法练习 展示简历信息 填写简历信息 编辑 3.HTML特殊字符 1.表单标签 表单是让用户输入信息的重要途径 表单域:包含表单元素的区域,重点是form…...
【go语言之thrift协议三之client端分析】
go语言之thrift协议之client端分析runClientOpenprotocolFactory.GetProtocolhandleClientNewTStandardClientNewCalculatorClienthandleClient的具体实现上一篇文章分析了thrift协议server端的实现,这边还是基于官方的示例去分析。 import ("crypto/tls"…...
Codeforces Round #855 (Div. 3) A-E
传送门 A. Is It a Cat? 题意 给你一个只有英文字母的字符串,问你这个字符串是否由连续的’m’, ‘e’, ‘o’,‘w’,(顺序不能改变)构成,并且不区分大小写。 如: “meow”, “mmmEeOWww”, “MeOooOw” 是符合要求…...

3/3操作系统作业
目录 1.前趋图和程序执行 (1)前驱图 (2)程序的顺序执行 (3)程序的并发执行 2.进程的描述 (1)进程的定义与特征 编辑编辑(2)进程控制块编辑 &…...

「C/C++」 标准文件操作大全
一、设备文件(运行程序时会默认打开这三个设备文件) stdin:标准输入,默认为当前终端(键盘),我们使用的scanf、getchar函数默认从此终端获得数据。stdout: 标准输出,默认…...
一款SAST工具需要支持多少种编译器呢?
除了Java语言,C#语言之外,C、C语言是编译器类型最多的编程语言,有几十种编译器,这些编译器方言为研发SAST工具带来了巨大的工作量,很多产品由于无法适配客户的编译器,导致无法检测。下面我们罗列一下国外和…...

jvm mat分析dump文件
jvm调优中,经常使用dump来分析是否存在大对象导致频繁full gc,以下为使用步骤: 一、获得服务进程 ps -ef | grep list-app | grep -v grep 二、生成dump文件 jmap -dump:formatb,filexxx.dump pid jmap -dump:filetest.hprof,formatb 3307…...

python16行代码获取原神全角色+全语音
前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 本来是不玩原神的,但是实在是经不住双重诱惑呀~ 毕竟谁能拒绝角色风景超级好看又可以爬树、炸鱼、壶里造房子、抓小动物、躲猫猫的游戏捏~ 今天点进官网~角色得配音让我沉陷其中,于是 我决定把他们爬…...

链接投票二维码制作制作投票链接视频选举投票制作
关于微信投票,我们现在用的最多的就是小程序投票,今天的网络投票,在这里会教大家如何用“活动星投票”小程序来进行投票。我们现在要以“信赖挚友”为主题进行一次投票活动,我们可以在在微信小程序搜索,“活动星投票”…...
HTTP 协议
HTTP(hypertext transport Protocol);超文本传输协议,是浏览器与万维网服务器之间通信的规则。 规定了客户端与服务端之间互相发送内容的格式,客户端发给服务端的叫 请求协议,服务端返回给客户端的为 响应…...

公司新招了个人,一副毛头小子的样儿,哪想到是新一代卷王····
内卷,是现在热度非常高的一个词汇,随着热度不断攀升,隐隐到了“万物皆可卷”的程度。 在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是…...

TSDF学习记录
【唐宇迪】三维重建-TSDF通俗解读 人工智能入门教程 水泡动画模拟(Marching Cubes) - 算法小丑 - 博客园 (cnblogs.com) TSDF 流程分析 首先需要构建一大块空区域采用体素网格来存储该区域需要计算每个体素的TSDF值及其权重 原理简述 SDF值&#x…...

【Linux】孤儿进程
在Linux中,如果子进程运行时,父进程因为某些原因先行终止,就称该子进程为孤儿进程。 我们编写如下代码: 子进程一直在运行,父进程运行一段时间后自动终止。运行该程序观察现象: 最开始时,子进程…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...