Java基础_19 IO流【重点】

1.File类会将此磁盘上面的文件或者文件夹抽象成为一个对象,可以拿对象调用方法来对咱们的文件或者文件夹操作(创建,删除,各种判断,查询)File类很多的方法createNewFilemkdirmkdirsdeleteisFileisDirectorygetNamegetPathgetParent2.递归算法【了解】3.IO流字节输入流:   FileInputStream    需求: 磁盘上面的文件 读取文件的内容到Java代码(缓冲)中main {File file = new File("c:/aaa/1.txt");//1.txt  存的有数据FileInputStream fis = new FileInputStream(file);BufferedInputStream bis = new BufferedInputStream(fis);byte  buf = new byte[3];//空的[0,0,0]int length;while ((length = bis.read(buf)) != -1) {sout(new String(buf, 0, length))}bis.close();fis.close();}

1.IO流

输入流:

​ 磁盘-》内存

​ 字节输入流: FileInputStream

​ 字符输入流: FileReader

输出流:

​ 内存-》磁盘

​ 字节输出流: FileOutputStream

​ 字符输出流: FileWriter

1.1字节输出流
package com.qf.a_fileoutputstream;import java.io.*;public class Demo1 {public static void main(String[] args) throws IOException {//需求:   将Java中的一个字符串的数据  写入到c:/aaa/2.txt//1.指定写入的磁盘上面的文件File file = new File("c:/aaa/2.txt");//2.创建FileOutputstream   字节输出流FileOutputStream fos = new  FileOutputStream(file);//3.对字节输出流加一个缓冲效果BufferedOutputStream bos = new BufferedOutputStream(fos);//4.准备一个字符串String str = "中国";//将这个字符串写入到磁盘上的2.txt//void	write(byte[] b, int off, int len)//从指定的字节数组写入 len个字节,从偏移 off开始到缓冲的输出流。//将字符串转为字节数组byte[] buf = str.getBytes();//bos.write(buf, 0, 2);bos.write(buf);//写完的时候一定要关流bos.close();fos.close();}
}

案例: 将一个字符串 我欲乘风归去 写入到c:/aaa/3.txt

package com.qf.a_fileoutputstream;import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;public class Demo2 {public static void main(String[] args) throws Exception{BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("c:/aaa/3.txt"));byte[] bytes = "我欲乘风归去".getBytes();bos.write(bytes);bos.close();}
}
1.2综合案例

需求: c:/aaa/1.mp4 复制到 c:/bbb/2.mp4

思路分心: 先读去1.mp4 然后读的同时写入 2.mp

package com.qf.a_fileoutputstream;import java.io.*;public class Demo3 {public static void main(String[] args) throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream("c:/aaa/22.png"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("c:/bbb/xixi.png"));byte[] buf = new byte[4 * 1024];int length;while ((length = bis.read(buf)) != -1) {bos.write(buf, 0, length);}bos.close();bis.close();}
}
package com.qf.a_fileoutputstream;import java.io.*;public class Demo3 {public static void main(String[] args) throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream("c:/aaa/22.mp4"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("c:/bbb/xixi.mp4"));byte[] buf = new byte[4 * 1024];int length;while ((length = bis.read(buf)) != -1) {bos.write(buf, 0, length);}bos.close();bis.close();}
}

回顾

1.输出流FileOutputStream    内存-》磁盘
2.复制一个图片到另外一个文件夹下面。  输入-》输出
1.3字符输入流【不太重要】

阅读字符文件的便利类。FileReader是用于读取字符流。 要读取原始字节流,请考虑使用FileInputStream 。图片 音频 视频 等都必须使用原始的字节流,无法使用字符流

总结: 文本 图片 音频 视频 用FileInputStream流

​ 文本 可以用FileReader

需求: 从磁盘上面某一个1.txt文件,读取数据到内存 (使用的字节输入流)

package com.qf.b_filereader;import java.io.*;public class Demo1 {public static void main(String[] args) throws IOException {// 从磁盘上面某一个1.txt文件,读取数据到内存  (使用的字符输入流)File file = new File("c:/aaa/1.txt");FileReader fr = new FileReader(file);//本身是不具备缓冲效果的。可以使用BufferedReaderBufferedReader br = new BufferedReader(fr);//int i = br.read();//返回值是一个字符的ascii码的值//声明了一个字符的缓冲数组char[] cbuf = new char[3];//缓冲数组是空的
//        int read = br.read(cbuf);
//        System.out.println(read);//读到数组中的值
//        System.out.println(cbuf);
//        System.out.println("=======");
//        int read1 = br.read(cbuf);
//        System.out.println(read1);//读到数组中的值
//        System.out.println(cbuf);
//        System.out.println("=======");
//        int read2 = br.read(cbuf);
//        System.out.println(read2);//读到数组中的值
//        System.out.println(cbuf);
//        System.out.println("=======");
//        int read3 = br.read(cbuf);
//        System.out.println(read3);//读到数组中的值
//        System.out.println(cbuf);
//        System.out.println("=======");
//        int read4 = br.read(cbuf);
//        System.out.println(read4);//读到数组中的值
//        System.out.println(cbuf);//针对于想法循环int length;while ((length = br.read(cbuf)) != -1) {System.out.println(new String(cbuf, 0, length));}br.close();fr.close();}
}
1.4字符输出流【不太重要】

需求: 将Java代码中某一个字符串数据写入到磁盘的4.txt

package com.qf;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;public class Demo2 {public static void main(String[] args) throws IOException {//将一个字符串古道西风瘦马 夕阳西下  写入到c:/aaa/4.txtFile file = new File("c:/aaa/4.txt");FileWriter fw = new FileWriter(file);BufferedWriter bw = new BufferedWriter(fw);String str = "古道西风瘦马 夕阳西下";//void write(String str);//bw.write(str);//bw.write(97);这个方法是不用的额!!!!//void write(String str, int off, int len);//bw.write(str, 3, 2);//void write(char[] cbuf, int off, int len);//bw.write(str.toCharArray(), 0,  11);bw.write("狗蛋");bw.newLine();//换行的意思bw.write("嘻嘻");bw.newLine();bw.write("哈哈");bw.close();fw.close();}
}

验证图片是否能够复制,使用字符流

思路: 先读取原图片,然后再写入图片

package com.qf.c_filewriter;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;public class Demo3 {public static void main(String[] args) throws Exception{//先读取图片,然后写入到另外一个文件夹下面//发现字符流无法处理 图片 音频 视频 等 只能使用字节流//但是文本文档可以处理的!!!BufferedReader br = new BufferedReader(new FileReader("c:/aaa/《雪中悍刀行》.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("c:/bbb/1.txt"));char[] cbuf = new char[1024];int length;while ((length = br.read(cbuf)) != -1) {bw.write(cbuf, 0, length);}bw.close();br.close();}
}
package com.qf.c_filewriter;import java.awt.image.BufferedImage;
import java.io.*;public class Demo4 {public static void main(String[] args) throws Exception {//test1();test2();}public static  void test1 () throws Exception{//字符流long start = System.currentTimeMillis();//给当前时间  毫秒BufferedReader br = new BufferedReader(new FileReader("c:/aaa/《雪中悍刀行》.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("c:/bbb/1.txt"));char[] cbuf = new char[1024];int length;while ((length = br.read(cbuf)) != -1) {bw.write(cbuf, 0, length);}bw.close();br.close();long end = System.currentTimeMillis();//给当前时间  毫秒System.out.println(end - start);//819 ms}public static  void test2 () throws Exception{//字节流long start = System.currentTimeMillis();//给当前时间  毫秒BufferedInputStream bis = new BufferedInputStream(new FileInputStream("c:/aaa/10递归.mp4"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("c:/bbb/8.mp4"));byte[] buf = new byte[4 * 1024];int length;while ((length = bis.read(buf)) != -1) {bos.write(buf, 0, length);}bos.close();bis.close();long end = System.currentTimeMillis();//给当前时间  毫秒System.out.println(end - start);}
}
1.5Java中序列化和反序列化

Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列

可以将一个对象以一个字节序列的形式存到本地磁盘上面做持久化的操作!!!

类 ObjectInputStream 和 ObjectOutputStream 是高层次的数据流,它们包含反序列化和序列化对象的方法。

1.5.1序列化

将java对象带着数据存到磁盘中的某一个文件中

package com.qf.d_serliz;import java.io.*;class Person implements Serializable{String name;int age;public void sleep() {System.out.println("嘻嘻 要睡觉喽");}
}
public class Demo1 {public static void main(String[] args) throws IOException {Person person = new Person();person.name = "狗蛋";person.age  = 22;//将person对象存到磁盘上面//内存--》  磁盘   输出!!! ObjectOutputStreamFileOutputStream fos = new FileOutputStream("c:/aaa/person.ser");ObjectOutputStream oos = new ObjectOutputStream(fos);oos.writeObject(person);oos.close();fos.close();}
}
1.5.2反序列化

将序列化过之后的一个文件。然后取出来对象数据

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

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

相关文章

mysql搭建主从

mysql搭建主从: 1:拉取mysql镜像 docker pull mysql2:创建主从对应目录 3:建立一个简易的mysql docker run -it --name mytest -e MYSQL_ROOT_PASSWORD123 -d mysql4:进入这个简易的mysql;从中获取my.cnf文件 docker exec -it mytest bash5:从容器中将my.cnf拷贝到 /3306/c…

rspack 使用构建vue3脚手架

基于 Rust 的高性能 Web 构建工具。rspack 主要适配 webpack 生态,对于绝大多数 webpack 工具库都是支持的。 启动速度快;增量热更新快。兼容 webpack 生态;内置了 ts、jsx、css、css modules 等开箱即用。生产优化,tree shaking…

游戏内鼠标光标样式切换

参考自 通过程序设置鼠标的样式 - CodeBus 代码生成 .cur 文件附带详细注释-CSDN博客 读取当前目录里的鼠标文件 .cur // 程序名称&#xff1a;设置鼠标样式的范例 // 编译环境&#xff1a;Visual C 6.0~2022&#xff0c;EasyX_20220116 // #include <graphics.h> #in…

树莓派驱动开发--搭建环境篇(保姆级)

前言&#xff1a;树莓派的环境搭建关系到之后的驱动开发&#xff0c;故一个好的环境能让你顺手完成驱动开发&#xff01;我使用的是64位树莓派4b&#xff01;有显示屏的前提&#xff01;&#xff01;&#xff01;&#xff08;因为wifi连接太刁钻了&#xff09; 一、ubantu相关 …

java算法:反转数字

看算法描述&#xff1a; 1、给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 2、如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c;就返回 0。 3、假设环境不允许存储 64 位整数&#xff08;有符号或无符号&…

Linux如何安装kernel-debuginfo包以支持获取未压缩内核映像vmlinux?(yum | wget、rpm -ivh)

基础信息 本文以AnolisOS为例子&#xff0c;Centos和Ubuntu类似&#xff0c;核心都是安装kernel-debuginfo和kernel-debuginfo-common的rpm包 并且需要和内核版本子版本完全一致&#xff08;本质是使用同一份代码编译的&#xff09;假设系统安装的是8.6版本&#xff1a;比如ht…

【软件设计师】计算机软考下午题试题六,Java设计模式之简单工厂模式。

【软件设计师】计算机软考下午题试题六&#xff0c;Java设计模式之简单工厂模式。 代码如下&#xff1a; //简单工厂模式 public class SimpleFactory {public static void main(String[] args) {Product ProductAFactory.createProduct("A");ProductA.info();Produc…

C++11 数据结构2 线性表的链式存储,实现,测试

线性表的链式存储 --单链表 前面我们写的线性表的顺序存储(动态数组)的案例&#xff0c;最大的缺点是插入和删除时需要移动大量元素&#xff0c;这显然需要耗费时间&#xff0c;能不能想办法解决呢&#xff1f;链表。 链表为了表示每个数据元素与其直接后继元素之间的逻辑关系…

-bash:./app:没有那个文件或目录(已解决)

目录下有文件&#xff0c;并且权限也是够的&#xff0c;都是就是是没有。 解决方法&#xff1a; 进入/bin&#xff0c;执行命令 file bash 如上图&#xff0c;可以发现&#xff0c;bash是32-bit&#xff0c; 进入app所在目录&#xff0c;执行 file app 如上图&#xff0…

Java 基于微信小程序的校园失物招领小程序,附源码

博主介绍&#xff1a;✌程序员徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

设计模式学习笔记 - 设计模式与范式 -行为型:16.解释器模式:如何设计实现一个自定义接口告警规则功能?

概述 上篇文章&#xff0c;我们学习了命令模式。本章&#xff0c;我们来学习解释器模式&#xff0c;它用来描述如何构建一个简单的 “语言” 解释器。比如命令模式&#xff0c;解释器模式更加小众&#xff0c;只在一些特定的领域内会被用到&#xff0c;比如编译器、规则引擎、…

数字经济专家高泽龙担任工信部元宇宙标准化委员会委员

数字经济专家高泽龙受聘担任工信部元宇宙标准化委员会委员&#xff0c;出席工作组成立大会暨第一次全体委员会议。 第一届元宇宙国标、团标以及标委会工作组会议顺利召开&#xff01; 同时&#xff0c;正式成为工信部中国人工智能产业发展联盟科技伦理工作组成员&#xff01;

jmeter使用之生成html测试报告

测试的最终结果是需要给出一份报告&#xff0c;那么在用jmeter测试时怎么生成一份报告呢&#xff0c;以下针对jmeter如何生成html报告进行简单介绍 一、首先把测试脚本写好二、利用命令生成html报告 命令&#xff1a;jmeter -n -t 【Jmx脚本位置】-l 【结果文件result.jtl存放…

区块链、web3.0、元宇宙的基本概念

目录 区块链 起源 发展现状 相关技术 智能合约 加密算法 共识算法 对等网络 web3.0 应用 DeFi 去中心化金融 NFT 非同质化代币 DAO 去中心化自治组织 底层技术 元宇宙 文章部分内容来自网络及AIGC,仅供学习 区块链 起源 区块链的起源可以追溯到21世纪初,当…

C#, 查找同一个进程显示在任务栏上的多个窗口

有的程序可以打开多个窗口并显示在任务栏上。某些情况下&#xff0c;我们需要找到窗口做些事情时&#xff0c;可以参考下面的代码。 public static class Win32Api{[DllImport("user32.dll", SetLastError true)]public static extern bool EnumWindows(EnumWindows…

HTML5媒体元素

video元素 视频元素&#xff0c;可以用来插入电影片段或其他视频流。 支持的视频格式是MP4&#xff0c;WebM&#xff0c;Ogg source元素 定义媒体的资源 src属性 规定媒体资源的URL type属性 规定媒体资源的MIME类型 <video controls><source src"../v…

桥接模式:解耦抽象与实现的设计艺术

在软件设计中&#xff0c;桥接模式是一种结构型设计模式&#xff0c;旨在将抽象部分与其实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过提供更加灵活的代码结构帮助软件开发人员处理不断变化的需求&#xff0c;特别是在涉及多平台应用开发时。本文将详细介绍桥接…

kubeadm部署kubernetes1.29

一、kubernetes集群节点准备 1.1、服务器要求 两台或多台安装linux服务器&#xff0c;此处使用vmware安装虚拟服务器 硬件配置&#xff1a;2GB或更多RAM&#xff0c;2个CPU或更多CPU 需要拉取镜像&#xff0c;如果服务器不能上网&#xff0c;需要提前下载镜像并导入节点 1.2…

爬虫开发教程

一、爬虫概述 爬虫&#xff08;也称为网络爬虫或蜘蛛&#xff09;是一种自动化程序&#xff0c;能够模拟人类在互联网上浏览和抓取数据的行为。它通过发送HTTP请求&#xff0c;获取网页的HTML代码&#xff0c;然后解析这些代码以提取有用的数据。爬虫在数据分析、价格监测、竞…

sql注入之宽字节注入

1.1 宽字节注入原理 宽字节注入&#xff0c;在 SQL 进行防注入的时候&#xff0c;一般会开启 gpc&#xff0c;过滤特殊字符。 一般情况下开启 gpc 是可以防御很多字符串型的注入&#xff0c;但是如果数据库编码不 对&#xff0c;也可以导致 SQL 防注入绕过&#xff0c;达到注入…