Java-IO字节流与字符流

2023-10-27

IO流的常用流

输入流 : 输入字节流和输入字符流 将硬盘的文件输出到Java内存

输出流 : 输出字节流和输出字符流 从内存写到磁盘中

缓冲 : 缓冲的字面意思是减缓冲击力比如 看视频比较卡 暂停缓存一会

1.字节输入流

FileInputStream

package com.kz.a_Io;

import java.io.*;

public class Demo01 {
    public static void main(String[] args) throws IOException {
        File file=new File("d:/aa/2.txt");
        //创建输入字节流
        FileInputStream fls=new FileInputStream(file);
        //创建缓冲输入字节流
        BufferedInputStream bis=new BufferedInputStream(fls);
        //                    最快
        byte [] bytes=new byte[4 * 1024];
        int length;
        while ((length=bis.read(bytes))!=-1){
             //展示到控制台            byte数组会一次一次的覆盖 所有要从0到length
            System.out.println(new String(bytes,0,length));
        }
        //关流
        fls.close();
        bis.close();
    }
}

注意事项 :

1.设置的byte数组的容量,如果第二次的内容不够覆盖上一次的内容,那么没有被覆盖的就还会被输出

2.输出的时候要从第0个,到第length个。

3.read()方法如果达到流的末尾,返回-1.

4.关流(自下而上关闭流)

2.字节输出流

FileOutputStream

package com.kz.a_Io;

import java.io.*;

public class Demo02 {
    public static void main(String[] args) throws IOException {
        File file=new File("d:/aa/2.txt");
        //输出字节流
        FileOutputStream fos=new FileOutputStream(file);
        //创建缓存字节流
        BufferedOutputStream bos=new BufferedOutputStream(fos);
        //字符串
        String str="你一定能够成为你想要去成为的人";
        //将字符串转换为byte数组
        byte[] bytes = str.getBytes();
        //写入
        bos.write(bytes);
        //关闭
        bos.close();
        fos.close();

    }
}

注意事项:

输入 read()

输出 write()

练习: 将d:/aa/bb/1.txt 复制到d:/aa/2.txt

package com.kz.a_Io;

import java.io.*;

public class Demo03 {
    public static void main(String[] args) throws IOException {
        /**
         * 将d:/aa/bb/1.txt 复制到d:/aa/2.txt
         */
        //记录开始时间
        long start = System.currentTimeMillis();
        //创建缓存输入字节流
        BufferedInputStream put = new BufferedInputStream(new FileInputStream(new File("d:/aa/bb/1.txt")));
        //创建缓存输出字节流
        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("d:/aa/2.txt"));
        //创建字节数组
        byte[]bytes=new byte[4*1024];
        int length;
        while ((length=put.read(bytes))!=-1){
            //复制操作
            out.write(bytes,0,length);
            System.out.println(new String(bytes,0,length));
        }
        //记录结束时间
        long end = System.currentTimeMillis();
        System.out.println(end-start);
        //关闭流
        put.close();
        out.close();
    }
}

注意事项: 关流(不然文件是存不进去的)

3.字符输入流

FileReader

package com.kz.a_Io;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Demo06 {
    public static void main(String[] args) throws IOException {
        //字符流   缓冲字符输入流
        BufferedReader bufferedReader = new BufferedReader(new FileReader("d:/aa/2.txt"));
        int length;
        char[] chars=new char[10];
        while ((length=bufferedReader.read(chars))!=-1){
            System.out.println(new String(chars,0,length));
        }

    }
}

//字符流只能对文本进行操作,图片视频音频等需用字节流

4.字符输出流

FileWriter

package com.kz.a_Io;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Demo07 {
    public static void main(String[] args) throws IOException {
        //缓存字符输出流
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("d:/aa/2.txt"));
        String str="不要假装努力,生活不会陪你演习";
        bufferedWriter.write(str);
        //输出流切记关流
        bufferedWriter.flush();//刷新
        bufferedWriter.close();
    }
}

write()方法的重载 可传多个参数

总结:

输入流:
	两种:
		字节输入流 : FileInputStream 	FileInputStream 对应的缓冲流 是BufferedInputStream
		字符输入流: FileReader           FileReader 对应的缓冲流  BufferedReader
		read();
输出流:
	两种:
		字节输出流:  FileOutputStream    FileOutputStream  对应的缓冲流  BufferedOutputStream
			
		字符输出流:   FileWriter         FileWriter  对应的缓冲流  BufferedWriter		
		write()
处理文本:均可使用
处理其他:必须使用字节流
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java-IO字节流与字符流 的相关文章

  • 如何让 Spring 控制器从 POJO 返回 CSV? [复制]

    这个问题在这里已经有答案了 给定一个简单的 Java 对象 public class Pojo private String x private String y private String z getters setters 是否有一些
  • Java 1.4 上的 ActiveMQ 客户端

    我们在最新版本 5 6 0 中使用 Active MQ 现在我们遇到一个问题 必须连接一个新客户端 不幸的是这个客户端是用IBM JDK 1 4开发的 将 ActiveMQ 添加到应用程序会导致以下错误 UNEXPECTED ERROR O
  • 如何找出导致 poi 损坏 xlsx / xlsm 文件的原因

    我遇到的问题是 Apache POI 仅通过读取和写入就 损坏 了 xlsm xlsx 文件 例如使用以下代码 public class Snippet public static void main String args throws
  • 如何在Android中将文件转换为base64(如.pdf、.text)?

    如何将 SD 卡文档 pdf txt 转换为 Base 64 字符串并将字符串发送到服务器 这个方法对我有用 String encodeFileToBase64Binary encodeFileToBase64Binary yourFile
  • 无法解析 Java 中的方法

    我有一个Question具有 4 个的对象Answer里面的物体 在 Question java 我有一个方法是 public Answer getA return a 在另一种方法中我有 if questions get randomNu
  • JP QL - 一对多关系中的过滤结果

    我在尝试构建 JPQL 查询时陷入困境 并希望比我拥有更多 JPA 经验的人能够提供帮助 考虑以下两个实体 class Author String name OneToMany mappedBy author Set
  • [重复]

    这个问题在这里已经有答案了 有什么区别List
  • 如何在Java中实现复合模式?

    我想实现一个复合模式Java以便绘制软件开发组织图 因此 我们假设有多个项目经理和多个开发人员 每个开发人员都被分配给一位项目经理 并且每个开发人员都能够使用各种编程语言进行编码 项目经理领导开发人员并准确了解他们的工作量 我对这个设计模式
  • 无法为对象堆保留足够的空间

    每次尝试运行该程序时 我都会重复出现以下异常 VM初始化期间发生错误 无法为对象堆保留足够的空间 无法创建Java虚拟机 我尝试增加虚拟内存 页面大小 和 RAM 大小 但无济于事 我怎样才能消除这个错误 运行 JVM XX MaxHeap
  • Windows:如何获取所有可见窗口的列表?

    无论如何都要使用相关技术重新标记 我不知道它们是什么 稍后我可能会提出更详细的问题 关于具体细节 但现在我正在尝试掌握 大局 我正在寻找一种方法来枚举 Windows 上的 真实可见窗口 我所说的 真正可见的窗口 就是指 用户所说的 窗口
  • 如何在调整大小时更改 JLabel 字体大小以填充 JPanel 可用空间?

    这里有一个类似的问题 如何更改 JLabel 的字体大小以获取最大大小 https stackoverflow com questions 2715118 how to change the size of the font of a jl
  • 了解 Etc/GMT 时区

    Apple 在从 App Store 返回自动续订订阅收据时使用 Etc GMT 时区的理由是什么 Etc GMT 时区到底是什么 Java SDK 能理解这个时区吗 或者我是否必须使用其他第三方库 例如乔达时间 http www joda
  • 告诉 JAXB 使用注释将 解组为 Date 类

    将 JAXB 与 Java First 一起使用时 类型的字段 属性java util Date编组和解编为xs dateTime一切都按预期进行 但是如果字段 属性的类型是Object JAXB 解组xs dateTimeto XMLGr
  • 部署到 Glassfish 4.1 时 URL 模式无效

    如果用户已经通过身份验证 我有一个网络过滤器可以从登录和索引页面重定向 最初我有一个无效的 URL 模式 我修复了无效模式并尝试重新部署以接收以下内容 java lang IllegalArgumentException Invalid U
  • SSLHandShakeException 没有适当的协议

    我最近向我的网站添加了 SSL 可以通过 https 访问它 现在 当我的 java 应用程序尝试向我的网站发出请求并使用缓冲读取器从中读取时 它会生成此堆栈跟踪 我没有使用自签名证书 该证书来自 Namecheap 它使用 COMODO
  • 需要使用自定义类而不是在 Web 服务中生成(通过 wsimport)

    您能帮忙解决以下问题吗 当生成 WS 客户端代码 使用 wsimport ant 任务 时 所有类都会在与 Web 服务相同的包 例如 helloservice endpoint 中自动生成 例如如果我的网络服务有方法 公共节点 getNo
  • startDrag 方法 已弃用且无法编译程序

    startDrag android content ClipData android view View DragShadowBuilder java lang Object int 已弃用 如何解决这个问题而又不失去对旧版本的兼容性 还有
  • 如何使用 Java 1.4 和 SAX 将任意数据编码为 XML?

    我们使用 SAX 来解析 XML 因为它不需要将整个 XML 文档读入内存来解析单个值 我读过很多文章 坚持认为 SAX 只能用于解析 解码 XML 而不能创建它 这是真的 不 这不是真的 您可以使用类似于以下内容的方式将 XML 编码为
  • 切换按钮形状不变

    我正在尝试制作一个带有绿色背景的圆形切换按钮 我用了
  • 指定不带组件的GridBagLayout的网格参数

    我试图帮助另一个用户 但遇到了一个问题 我想用 GridBagLayout 来做到这一点 c1 c2 c3 10 80 10 v v r1 B1

随机推荐

  • python递归实现字符串逆反

    def main string input Enter a string string1 reverse string print string s reverse format is string1 def reverse string
  • YOLOV7学习记录之训练过程

    在前面学习YOLOV7的过程中 我们已经学习了其网络结构 然而实际上YOLOV7项目的难点并不在于其网络模型而是在于其损失函数的设计 即如何才能训练出来合适的bbox 神经网络模型都有训练和测试 推理 过程 在YOLOV7的训练过程中 包含
  • Java学习笔记:Java中的加号“+”

    在今晚学习Java时惊奇地发现Java中有 System out println 赋值后c的值为 c 这样的与c语言不同的语法 本着打破砂锅问到底 xue dao si 的精神 稍微整理了一下 下面是整理出来的Java中加号 的用法 算术运
  • mysql字段使用非int做主键,查询时候使用整型和字符串做查询条件的区别

    where条件key是整型的时候也可以找到记录 但是效率慢 不会使用索引 使用字符串的时候会使用主键索引会很快
  • ionic入门教程第十五课-ionic性能优化之图片延时加载

    周五的时候有个朋友让我写一个关于图片延时加载的教程 直到今天才有空编辑 这阶段真的是很忙 公众号都变成僵尸号了 实在是对不起大家 有人喜欢我的教程 可能我总习惯了用比较简单容易理解的方式去描述这些东西 别的就不多说了 大家遇到什么问题 可以
  • 100天精通Python(基础篇)——第23天:while循环 :99乘法表

    i 0 while i lt 10 print 我喜欢你 i 1 print endl i 0 sum 0 while i lt 101 i 1 sum i print f sum sum import random num random
  • django1.10 静态文件配置

    settings配置 网站引用静态文件时都会加上该地址 如 http www xxx com static css mini css STATIC URL static 静态文件根目录 执行命令 python manage py colle
  • PostgreSQL 服务启动不了问题

    配置了postgresql数据的配置文件 pg hba conf后 重记一下服务 结果启动不了 提 示错误 root instance 609xznso run systemctl start postgresql 11 Job for p
  • C++11 function、bind、可变参数模板

    在设计回调函数的时候 无可避免地会接触到可回调对象 在C 11中 提供了std function和 std bind两个方法来对可回调对象进行统一和封装 C 语言中有几种可调用对象 函数 函数指针 lambda表达式 bind创建的对象以及
  • Hibernate的加载方式——GET与LOAD的对比

    在Hibernate框架中 最常用到的加载方式就非Get和Load莫属了 然而Get和Load在加载方式上边还有很多的不同 下面让我们来分析一下他们的不同之处 区别 从返回的结果上来看 get load在检索到数据的时候 会返回对象 代理对
  • firefox火狐书签windows和ubuntu无法同步问题

    装了ubuntu后发现firefox的书签没法同步 最终发现问题的原因 firefox有个全球服务和本地服务 ubuntu下的firefox默认是全球服务的 而windows下的firefox默认是本地服务的 这样相当于两个系统下默认的存储
  • 【生信】初探基因定位和全基因组关联分析

    初探QTL和GWAS 文章目录 初探QTL和GWAS 实验目的 实验内容 实验题目 第一题 玉米MAGIC群体的QTL分析 第二题 TASSEL自带数据集的关联分析 实验过程 玉米MAGIC群体的QTL分析 包含的数据 绘制LOD曲线 株高
  • PyTorch训练深度卷积生成对抗网络DCGAN

    文章目录 DCGAN介绍 代码 结果 参考 DCGAN介绍 将CNN和GAN结合起来 把监督学习和无监督学习结合起来 具体解释可以参见 深度卷积对抗生成网络 DCGAN DCGAN的生成器结构 图片来源 https arxiv org ab
  • PCA(主成分分析方法)

    目录 1 降维问题 2 向量与基变换 2 1 内积与投影 2 2 基 2 3 基变换的矩阵 3 协方差矩阵及优化目标 3 1 方差 3 2 协方差 3 3 协方差矩阵 3 4 协方差矩阵对角化 4 算法与实例 4 1 PCA算法 4 2 实
  • postgres数据库进行备份和恢复

    参考 http blog chinaunix net uid 354915 id 3504632 html root localhost postgres 9 3 5 pg dump help pg dump dumps a databas
  • (九)Mybatis下划线驼峰处理的几种方法

    这篇文章主要讲述Mybatis下划线驼峰处理的几种方法 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着小编来一起学习学习吧 目录 1 可以通过写别名 2 开启驼峰命名 3 自定义javabean的封装规则 首先先说明一下为
  • Anaconda镜像源整理与使用

    本文复制于 Anaconda镜像源整理与使用 天道酬勤 花开半夏 只为方便查找与防止原文被删除 请前往原文查看 Anaconda镜像源整理与使用 常用镜像源Conda源Pypi源 镜像源使用指令解决CondaHTTPError HTTP 0
  • var js=function(){}和function js(){}的区别

    在Javascript中 函数及变量的声明都将被提升到函数的最顶部 也就是说我们可以先使用后声明 但函数表达式和变量表达式只是将函数或者变量的声明提升到函数顶部 函数表达式和变量的初始化将不被提升 var js function 这种叫做函
  • KL散度原理和实现

    KL散度计算 KL散度 Kullback Leibler Divergence 一般用于度量两个概率分布函数之间的相似程度 离散求和 连续求积分 KL P Q
  • Java-IO字节流与字符流

    IO流的常用流 输入流 输入字节流和输入字符流 将硬盘的文件输出到Java内存 输出流 输出字节流和输出字符流 从内存写到磁盘中 缓冲 缓冲的字面意思是减缓冲击力比如 看视频比较卡 暂停缓存一会 1 字节输入流 FileInputStrea