木舟0基础学习Java的第十八天(IO流,字节流,字符流,缓冲)

IO流正常使用流程:1.抛异常  2.资源读写  3.关闭资源(从后往前关)

字节流:(拷贝推荐使用)

开发中一般不会抛出异常 用try{}catch(){} 也不推荐字节流读中文

FileInputStream:读

         FileInputStream fs=new FileInputStream("e:/b.txt");//11111111为-1的补码 会认为已经读取完毕 如果用byte 会出现数据读取不完整int i=0;while((i=fs.read())!=-1){System.out.println((char)i);}//必须关闭资源fs.close();}

FileOutputStream:写

 public static void main(String[] args) throws Exception {//如果e盘下没有b.txt FileOutputStream会自己创建一个FileOutputStream fo=new FileOutputStream("e:/b.txt");//write 一次写出一个字节fo.write(99);//cfo.write(100);//dfo.close();//追加 true代表不覆盖文件中的旧数据 追加到文件末尾FileOutputStream fo1=new FileOutputStream("e:/b.txt",true);fo1.write(97);fo1.write(98);fo1.close();//连续写入FileOutputStream fo2=new FileOutputStream("e:/b.txt");String s="abcdefghijklmn";//String s="我爱学习";//1f`  字节流写中文会乱码for(int i=0;i<s.length();i++){char c = s.charAt(i);fo2.write(c);}fo2.close();}

读写案例

案例:字节拷贝(读一个字节写一个字节 效率低)
   public static void main(String[] args) throws Exception {FileInputStream fs=new FileInputStream("e:/1.jpg");//读FileOutputStream out=new FileOutputStream("e:/cba/1.jpg");//写int i=0;//一边读一边写while((i=fs.read())!=-1){//每次读一个字节out.write(i);//每次写一个字节}//先关后面的 再关前面的 关两个out.close();fs.close();}
案例:字节数组拷贝(读总字节写总字节 效率高)

开发中推荐 数组长度byte[] b=new byte[1024*8];

声明一个用来记录读取有效长度的变量 int len=0;

public static void main(String[] args) throws Exception {FileInputStream in=new FileInputStream("e:/1.jpg");//读FileOutputStream out=new FileOutputStream("e:/cba/1.jpg");//写//创建字节数组byte[] b=new byte[1024*8];//开发中推荐 数组长度byte[] b=new byte[1024*8];int len=0;//声明一个用来记录读取有效长度的变量 int len=0;while((len=in.read(b))!=-1){System.out.println(len);out.write(b,0,len);}out.close();in.close();}

 逻辑:

  public static void main(String[] args) throws Exception {FileInputStream in=new FileInputStream("e:/1.jpg");//读FileOutputStream out=new FileOutputStream("e:/cba/1.jpg");//写int available = in.available();//获取文件总字节数//创建字节数组byte[] b=new byte[available];//创建一个数组 长度是图片所有字节长度while(in.read(b)!=-1){out.write(b);}out.close();in.close();}

Buffered缓冲区:

 public static void main(String[] args) throws Exception {FileInputStream in=new FileInputStream("e:/cba/w.mp4");BufferedInputStream bis=new BufferedInputStream(in);//自带缓冲区 底层就是new byte[8192]FileOutputStream out=new FileOutputStream("e:/abc/w.mp4");BufferedOutputStream bos=new BufferedOutputStream(out);//先写到缓冲区 写满后一次性写到文件中int b=0;while((b=bis.read())!=-1){bos.write(b);}//关闭缓冲区 关闭缓冲区后会自动关闭 in和outbos.close();bis.close();}
数组和Buffered:(开发中推荐数组拷贝)

如果是8192字节大小 数组比Buffered快一些 因为读和写都是同一数组

但是Bufferde操作的是两个数组

关闭资源(close,flush)

close:关闭释放资源 如果是带缓冲区的流对象 不但会关闭流 还会在关闭流之前刷新缓冲区 但是关闭之后不能再写出

flush:用来刷新缓冲区 刷新后可以再写出

开发中标准写法:

 public static void main(String[] args) {FileInputStream in=null;FileOutputStream out=null;try {in=new FileInputStream("e:/cba/w.mp4");out=new FileOutputStream("e:/abc/ww.mp4");int len=0;byte[] b=new byte[1024*8];while((len=in.read(b))!=-1){out.write(b,0,len);}} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}finally {if(out!=null){//避免下面报空指针异常try {out.close();} catch (IOException e) {throw new RuntimeException(e);}}if(in!=null){try {in.close();} catch (IOException e) {throw new RuntimeException(e);}}}}

案例:用键盘录入数据 写到硬盘  (带缓冲区和不带缓冲区)

public static void main(String[] args) {Scanner sc=new Scanner(System.in);FileOutputStream out=null;try {out=new FileOutputStream("e:/cba/aaa.txt",true);while(true){System.out.println("请输入:");String s=sc.next();if(!s.equals("quit")){byte[] b=s.getBytes();out.write(b);}else{break;}}} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}finally{if(out!=null){try {out.close();} catch (IOException e) {throw new RuntimeException(e);}}}}
public static void main(String[] args) {Scanner sc=new Scanner(System.in);FileOutputStream out=null;BufferedOutputStream bos=null;try {out=new FileOutputStream("e:/cba/bbb.txt");bos=new BufferedOutputStream(out);while(true){System.out.println("请输入:");String s=sc.next();if(!s.equals("puit")){byte[] b=s.getBytes();bos.write(b);bos.flush();//刷新缓冲区 及时把缓冲区数据刷入硬盘}else{break;}}} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}finally{if(bos!=null){try {bos.close();} catch (IOException e) {throw new RuntimeException(e);}}}}

字符流:(纯文本时推荐使用)

不可以拷贝非纯文本文件

FileReader:读

 public static void main(String[] args) {FileReader r=null;try {r=new FileReader("e:/cba/a.txt");int a=0;while((a=r.read())!=-1){System.out.println((char)a);}} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}finally{if(r!=null){try {r.close();} catch (IOException e) {throw new RuntimeException(e);}}}}

FileWrite:写

 public static void main(String[] args) {FileWriter w=null;try {w=new FileWriter("e:/cba/n.txt");String s="你好,我不好!";char[] c = s.toCharArray();//将字符转为字节存入char数组w.write(c);} catch (IOException e) {throw new RuntimeException(e);}finally{if(w!=null){try {w.close();} catch (IOException e) {throw new RuntimeException(e);}}}}

读写案例

案例:字符拷贝(效率低 容易拷贝不完整)
public static void main(String[] args) {FileReader fr=null;FileWriter fw=null;try {fr=new FileReader("e:/cba/a.txt");fw=new FileWriter("e:/abc/b.txt");int a=0;while((a=fr.read())!=-1){fw.write(a);}} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}finally{try {fw.close();} catch (IOException e) {throw new RuntimeException(e);}try {fr.close();} catch (IOException e) {throw new RuntimeException(e);}}}
案例:字符数组拷贝(效率高 拷贝完整)
public static void main(String[] args) {FileReader fr=null;FileWriter fw=null;try {fr=new FileReader("e:/cba/a.txt");fw=new FileWriter("e:/abc/a.txt");char[] c=new char[1024*8];int len=0;while((len=fr.read(c))!=-1){fw.write(c,0,len);System.out.println(len);}} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}finally{try {fw.close();} catch (IOException e) {throw new RuntimeException(e);}try {fr.close();} catch (IOException e) {throw new RuntimeException(e);}}

Buffered缓冲区:

BufferedReader

public static void main(String[] args) {FileReader fr=null;BufferedReader br=null;try {fr=new FileReader("e:/abc/a.txt");br=new BufferedReader(fr);String s=null;//br.readLine()方法 可以读取一行字符 但不包括换行符号while((s=br.readLine())!=null){System.out.println(s);}} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}finally{try {br.close();} catch (IOException e) {throw new RuntimeException(e);}}}

BufferedWriter

 public static void main(String[] args) {FileWriter fw=null;BufferedWriter bw=null;try {fw=new FileWriter("e:/abc/ab.txt");bw=new BufferedWriter(fw);bw.write("你好");bw.write("\r\n");bw.write("早上好");bw.newLine();//写入一个可以跨平台的换行符 相当于bw.write("\r\n"); 推荐使用!!!bw.write("不好!");} catch (IOException e) {throw new RuntimeException(e);}finally{try {bw.flush();} catch (IOException e) {throw new RuntimeException(e);}}}

BufferedReader和BufferedWriter

 public static void main(String[] args){FileReader fr=null;BufferedReader br=null;FileWriter fw=null;BufferedWriter bw=null;try {fr=new FileReader("e:/abc/a.txt");br=new BufferedReader(fr);fw=new FileWriter("e:/cba/t.txt");bw=new BufferedWriter(fw);String s=null;while((s=br.readLine())!=null){bw.write(s);bw.flush();}} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}finally{if(bw!=null){try {bw.close();} catch (IOException e) {throw new RuntimeException(e);}}if(br!=null){try {br.close();} catch (IOException e) {throw new RuntimeException(e);}}}}

将文本反转案例:

 public static void main(String[] args) {//将文本反转FileReader fr=null;BufferedReader br=null;FileWriter fw=null;BufferedWriter bw=null;try {fr=new FileReader("e:/abc/a.txt");br=new BufferedReader(fr);String s=null;StringBuffer sb=new StringBuffer();while((s=br.readLine())!=null){sb.append(s);sb.append("\r\n");}//反转sb.reverse();//System.out.println(sb);//将sb中的数据全部写入fw=new FileWriter("e:/abc/ccc.txt");bw=new BufferedWriter(fw);bw.write(sb.toString());bw.flush();} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}finally{if(bw!=null){try {bw.close();} catch (IOException e) {throw new RuntimeException(e);}}if(br!=null){try {br.close();} catch (IOException e) {throw new RuntimeException(e);}}}}

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

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

相关文章

设计模式使用场景实现示例及优缺点(行为型模式——策略模式)

策略模式&#xff08;Strategy Pattern&#xff09; 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;它能够在运行时选择最适合的算法或行为&#xff0c;同时能够将算法族封装成独立的类&#xff0c;并使它们之间可以相互替换。这种模式是通…

类形断言和和类型推导的区别是什么?

类型断言&#xff08;Type Assertion&#xff09;和类型推导&#xff08;Type Inference&#xff09;在TypeScript中的区别 如下&#xff1a; 定义&#xff1a; 类型断言&#xff1a;是程序员明确指定一个值的类型&#xff0c;即允许变量从一种类型更改为另一种类型。它不会进行…

接着探索Linux的世界 -- 基本指令(文件查看、时间相关、打包压缩等等)

话不多说&#xff0c;直接进入主题 一、cat指令 -- 查看目标文件的内容 语法&#xff1a;cat [选项][文件] 功能&#xff1a; 查看目标文件的内容 -b 对非空输出行编号 -n 对输出的所有行编号 -s 不输出多行空行 1、查看目标文件的内容 2、 -b 对非空输出行编号 3、-n 对…

24/07/11数据结构(6.1215)双链表实现-栈实现

像写单链表的一些功能接口一样,先来写一些双链表的接口熟悉一下它的主体框架: #include<stdio.h> #include<stdlib.h> typedef int LDataType; //双向带头循环链表的节点 typedef struct ListNode{ LDataType _data; //指向下一个节点的起始位置 str…

Kylin系列(九)与 Hadoop 集成:Kylin 如何在 Hadoop 生态中运作

目录 1. Kylin概述 2. Hadoop概述 3. Kylin与Hadoop集成的架构 4. 实现Kylin与Hadoop的集成 4.1 安装和配置Hadoop 4.2 安装和配置Hive 4.3 安装和配置Kylin 4.4 构建多维数据立方体 4.5 实现实时数据处理 5. Kylin与Hadoop集成的优势 6. 总结 在大数据时代&#xf…

项目部署笔记

1、安全组需开放&#xff08;如果不开放配置nginx也访问不到&#xff09; 2、域名解析配置IP(子域名也需配置IP&#xff0c;IP地址可以不同) 3、如果出现图片获其他的文件找不到的情况请仔细检查一下路径是否正确 4、服务器nginx配置SSL证书后启动报错&#xff1a; nginx: […

巧用 VScode 网页版 IDE 搭建个人笔记知识库!

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 巧用 VScode 网页版 IDE 搭建个人笔记知识库! 描述&#xff1a;最近自己在腾讯云轻量云服务器中部署了一个使用在线 VScode 搭建部署的个人Markdown在线笔记&#xff0c;考虑到在线 VScode 支持终…

Python 数据清洗与预处理

Python 数据清洗与预处理 在数据科学和机器学习的项目中&#xff0c;数据清洗与预处理是至关重要的一步。无论数据来源如何&#xff0c;原始数据通常都是不完整、不一致、含有噪声的&#xff0c;甚至可能包含错误。为了从这些原始数据中提取有价值的信息&#xff0c;并进行有效…

Day05-filebeat常用的输出组件,logstash的输入输出组件及date,grok,geoip过滤插件实战案例

Day05-filebeat常用的输出组件&#xff0c;logstash的输入输出组件及date&#xff0c;grok&#xff0c;geoip过滤插件实战案例 1、使用filebeat采集docker日志2、filebeat的input类型之filestream实战案例2.1 课堂练习案例2.2 将数据写入到本地文件案例2.3 写入数据到ES集群2.4…

Windows Server 2012 R2 Update 出现错误 80072EFE

解决方案一 错误代码 80072EFE 表示与服务器的连接异常终止。请确保没有防火墙规则或代理阻止 Microsoft 下载 URL。 您还可以尝试以下操作&#xff1a; 单击“开始”&#xff0c;然后单击“运行”。 在“打开”框中键入 cmd 在命令提示符下键入“net stop wuauserv”&#…

《昇思25天学习打卡营第04天|qingyun201003》

日期 心得 从中认识到什么是数据转换&#xff0c;如何进行数据转换&#xff1b;对于数据转换应该如何理解。同时对于数据转换的代码有了深层次的理解。对于数据增强、转换、归一化有了明确的认知。 昇思MindSpore 基础入门学习 数据转换 (AI 代码解析) 数据变换 Transforms …

使用Python和MediaPipe实现手势控制音量(Win/Mac)

1. 依赖库介绍 OpenCV OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它包含了数百个计算机视觉算法。 MediaPipe MediaPipe是一个跨平台的机器学习解决方案库&#xff0c;可以用于实时人类姿势估计、手势识…

EXSI 实用指南 2024 -编译环境 Ubuntu 安装篇(二)

1. 引言 在当今的虚拟化领域&#xff0c;VMware ESXi 是备受推崇的虚拟化平台&#xff0c;广泛应用于企业和个人用户中。它以卓越的性能、稳定的运行环境和丰富的功能&#xff0c;为用户提供了高效的硬件资源管理和简化的 IT 基础设施维护。然而&#xff0c;如何在不同操作系统…

LeetCode Day8|● 344.反转字符串(原地) ● 541. 反转字符串II(i可以大步跨越) ● 卡码网:54.替换数字(ACM模式多熟悉熟悉)

字符串part01 day8-1 ● 344.反转字符串整体思路代码实现总结 day8-2 ● 541. 反转字符串II整体思路代码实现总结 day8-3 ● 卡码网&#xff1a;54.替换数字题目解题思路代码实现总结 day8-1 ● 344.反转字符串 整体思路 字符串和数组的思路差不多 原地操作 代码实现 class…

非常好的新版网盘系统,是一款PHP网盘与外链分享程序,支持文件预览

这是一款PHP网盘与外链分享程序&#xff0c;支持所有格式文件的上传&#xff0c; 可以生成文件外链、图片外链、音乐视频外链&#xff0c;生成外链同时自动生成相应的UBB代码和HTML代码&#xff0c; 还可支持文本、图片、音乐、视频在线预览&#xff0c;这不仅仅是一个网盘&a…

算法思想总结:字符串

一、最长公共前缀 . - 力扣&#xff08;LeetCode&#xff09; 思路1&#xff1a;两两比较 时间复杂度mn 实现findcomon返回两两比较后的公共前缀 class Solution { public:string longestCommonPrefix(vector<string>& strs) {//两两比较 string retstrs[0];size…

MySQL里的累计求和

在MySQL中&#xff0c;你可以使用SUM()函数来进行累计求和。如果你想要对一个列进行累计求和&#xff0c;可以使用OVER()子句与ORDER BY子句结合&#xff0c;进行窗口函数的操作。 以下是一个简单的例子&#xff0c;假设我们有一个名为sales的表&#xff0c;它有两个列&#x…

Python接口自动化测试框架(工具篇)-- 接口测试工具RobotFramework

文章目录 一、前言二、[robotframework](https://robotframework.org/)为什么要选择使用RF框架环境搭建测试用例编写我的第一个接口测试用例小结一、前言 这篇文章是后面临时加的戏码,原本计划是将一个个能做接口测试的工具,全都给梳理一遍,但是题主有疑问,光一篇文章能让…

Android之间互传消息之ServerSocket,Android服务端接收Socket发送的TCP

Android之间在在局域网下互传消息&#xff0c;咱就不用走云服务器了吧&#xff0c;让俩安卓设备&#xff0c;自己传呗 方式1 通过在安卓设备上搭建Web服务器接收数据&#xff0c;可参考 Android使用AndServer在安卓设备上搭建服务端(Java)(Kotlin)两种写法 方式2 本文章&…