java IO流_1

目录

分类

字节流

InputStream

OutputStream

文件拷贝

字符流

FileReader

FileWriter

处理流

BufferedReader

BufferedWriter

文本拷贝


        流是从起源到接受的有序数据,通过流的方式允许程序使用相同的方式来访问不同的输入/输出源。        

分类

按数据单位分:字节流(二进制文件)        字符流(文本文件)

按数据流向分:输入流        输出流

按流的角色分:节点流        处理流 

IO流的40多个类都是由这四个抽象基类派生的

字节流

InputStream

常用子类:

  1. FileInputStream        文件输入流
  2. BufferedInputStream          缓冲字节输入流
  3. ObjectInputStream        对象字节输入流             
import java.io.FileInputStream;

public class FileInputStream_ {
    public static void main(String[] args) {
        readFile01();
        System.out.println();
        readFile02();
    }
    public static void readFile01(){
        String path="D:\\javacode\\IO\\src\\test.txt";
        int read;
        FileInputStream fis=null;
        try {
            fis=new FileInputStream(path);
            while((read=fis.read())!=-1)//读取一个字节的数据,读到末尾返回-1
            {
                System.out.print((char)read);//一个一个读
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                fis.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public static void readFile02(){
        String path="D:\\javacode\\IO\\src\\test.txt";
        byte[] buf=new byte[8];
        FileInputStream fis=null;
        int len;
        try {
            fis=new FileInputStream(path);
            while((len=fis.read(buf))!=-1)//读取一个字节的数据,读到末尾返回-1
            {
                System.out.print((new String(buf,0,len)));//一次最多读入buf.length字节的数据,存入字节数组buf
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                fis.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

OutputStream

子类:FileOutputStream

import java.io.FileOutputStream;

public class FileOutputStream_ {
    public static void main(String[] args) {
        writeFile01();
    }
    public static void writeFile01(){
        String path="D:\\javacode\\IO\\src\\test.txt";
        FileOutputStream fos=null;
        try {
            //fos=new FileOutputStream(path);//覆写
            fos=new FileOutputStream(path,true);//加true,追加文本
            fos.write('6');
            fos.write("helloworld".getBytes());//获取str对应的字节数组
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

#字节流中文会乱码,这是因为只能存一个字节一个字节输出 

文件拷贝

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileCopy {
    public static void main(String[] args) {
        //文件拷贝
        FileInputStream fileInputStream=null;//输入流
        FileOutputStream fileOutputStream=null;//输出流
        //源文件和目标文件
        String srcpath="C:\\Users\\Elysia\\Pictures\\Saved Pictures\\illust_86465238_20210124_003335.jpg";
        String destpath="D:\\javacode\\IO\\src\\pic.jpg";
        try {
            fileOutputStream=new FileOutputStream(destpath,true);
            fileInputStream=new FileInputStream(srcpath);
            byte[] buf=new byte[1024];
            int len;
            while((len=fileInputStream.read(buf))!=-1){
                fileOutputStream.write(buf,0,len);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                fileOutputStream.close();
                fileInputStream.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

字符流

FileReader

import java.io.FileReader;

public class FileReader_ {
    public static void main(String[] args) {
        FileReader fileReader=null;
        String path="D:\\javacode\\IO\\src\\test.txt";
        try {
            fileReader=new FileReader(path);
            char[] buf=new char[8];//用char接收
            int len;
            while((len=fileReader.read(buf))!=-1){
                System.out.print(new String(buf,0,len));
            }
//            int read;//单个读取
//            while((read= fileReader.read())!=-1){
//                System.out.print((char)read);
//            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                fileReader.close();//关闭文件
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

FileWriter

import java.io.FileWriter;

public class FileWriter_ {
    public static void main(String[] args) {
        FileWriter fileWriter=null;
        String path="D:\\javacode\\IO\\src\\test.txt";
        try{
            fileWriter=new FileWriter(path,true);//加true表示追加
            fileWriter.write("\n成功写入");
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try{
                fileWriter.close();//必须 一定 关闭流,才能真正的写入
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

必须 一定 关闭/flush流,才能真正的写入

 

处理流

        将“流”包装,在其之上为程序提供更强大的读写功能

 节点流的数据源是特定的,而处理流则利用了向上转型,可以封装多种“流”,减小了节点流之间的差异。

优势:

  1. 使用处理流进行 读写操作更简单
  2. 处理流增加了缓冲,提高效率 

#在关闭包装流的时候,会自动关闭里面封装的字节流

BufferedReader

        从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。

import java.io.BufferedReader;
import java.io.FileReader;

public class BufferedReader_ {
    public static void main(String[] args) throws Exception{
        String path="D:\\javacode\\IO\\src\\test.txt";
        BufferedReader bufferedReader=new BufferedReader(new FileReader(path));
        String line;//按行读取,效率高
        while((line=bufferedReader.readLine())!=null){
            System.out.println(line);//读取一行
        }
        bufferedReader.close();//只需要关闭包装流
    }
}

BufferedWriter

        文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。

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

public class BufferedWriter_ {
    public static void main(String[] args) throws Exception{
        String path="D:\\javacode\\IO\\src\\test.txt";
        BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(path,true));
        bufferedWriter.newLine();//插入一个换行
        bufferedWriter.write("成功写入");
        bufferedWriter.close();
    }
}

文本拷贝

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;

public class TxtCopy {
    public static void main(String[] args) throws Exception{
        String dest="D:\\javacode\\IO\\src\\dest.txt";
        String src="D:\\javacode\\IO\\src\\test.txt";
        BufferedReader bufferedReader=new BufferedReader(new FileReader(src));
        BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(dest));
        String line;
        while((line=bufferedReader.readLine())!=null){
            bufferedWriter.write(line);//末尾没有换行符
            bufferedWriter.newLine();//每读取一行,插入换行符
        }
        bufferedWriter.close();
        bufferedReader.close();
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

4.26和4.27、selectAPI介绍(4.27、select代码)

4.26和4.27、selectAPI介绍(4.27、select代码) 1.selectAPI介绍①select多路复用流程图②select多路复用缺点 2.select代码使用介绍3.select代码实现①select服务端实现②select客户端实现 1.selectAPI介绍 主旨思想: 首先要构造一个关于文件…

echarts中横坐标显示为time,使用手册

需求: 后端传递(两段数据,不同时间间隔)的24h实时数据,前端需要根据24小时时间展示,要求:x轴为0-24h,每个两小时一个刻度 误区: 刚开始通过二维数据的形式秒点&#xff…

MySQL数据库从入门到精通学习第2天(创建数据库)

创建数据库 通过CREATE DATABASE语句来创建数据库通过CREATE SCHEMA语句来创建数据库通过IF NOT EXISTS进行判断创建 通过CREATE DATABASE语句来创建数据库 创建数据库的语法格式如下: CREATE DATABASE 【数据库名】; 创建数据库的库名跟标识符一样也是有要求的&…

设计模式-结构型模式之桥接模式

2. 桥接模式 2.1. 模式动机 设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案: 第一种设计方案是为每一种形状…

android sdl编译

SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台。 1 下载SDL源码 http://www.libsd…

这篇把「精准测试」算是讲明白了

作为测试同学,我们经常在工作中会有这样的困惑:我写的用例真的有效且全面吗,我的测试真的做到有效覆盖了吗?回归阶段我到底需要回归什么,回归验证充分吗?这次的改动到底影响范围有多大?针对以上…

从编译器角度理解C++编译和连接原理

C编译链接整体介绍 链接主要工作 1 所有.o文件段的合并,符号表合并后,进行符号解析 链接时就是在符号表中找对应的符号是否只出现于.text或.data段一次,若一次都无,则符号未定义;若出现多次,符号重定义 符…

学习风`宇博客用户权限菜单模块

文章目录 用户-角色-菜单-资源 各表关系图菜单 和 路由菜单表及分析分析 /api/admin/user/menus接口MenuServiceImpl#listUserMenus接口返回示例及分析 前端代码分析menu.jsSideBar.vue 接口权限控制资源表 及 分析分析 WebSecurityConfig权限控制整体流程先说登录UserDetailsS…

行业那么多,为什么计算机领域这么火?

行业那么多,为什么计算机领域这么火? 计算机领域火已经不是一天两天了,从开始的进入互联网时代、到“互联网”、再到大数据、人工智能时代、数字化经济……计算机技术从行业内部的自我发展逐渐渗透到各行各业,甚至成为社会整体经济…

JVM-GC回收机制

目录 1.判定垃圾 1.引用计数 2.可达性分析 2.清理垃圾 1.标记清除 2.复制算法 3.标记整理 4.分代回收 上文讲述的Java运行时内存划分,对于程序计数器,虚拟机栈,本地方法栈来说,生命周期是和线程有关的,随着线程而生,随线程而灭,当方法结束或者线程结束时,它们的内存就自…

【Python_Scrapy学习笔记(十)】基于Scrapy框架的下载器中间件创建代理IP池

基于Scrapy框架的下载器中间件创建代理IP池 前言 本文中介绍 如何基于 Scrapy 框架的下载器中间件创建代理IP池。 正文 1、添加中间件的流程 在 middlewares.py 中新建 代理IP 中间件类在 settings.py 中添加此下载器中间件,设置优先级并开启 2、基于Scrapy框…

软件安全之CRC检测

CRC介绍 在玩某些游戏,例如fps类游戏时,你想要修改某些特定的数值实现一些功能,这时你很有可能会被查封账号甚至禁封机器码。因为你更改了游戏中的数据,从而导致接收方收到”错误的数据“。为尽量提高接收方收到数据的正确率&…

最新版本VSCode配置Python、PyQt5、QtDesigner环境并创建一个ui界面测试

参考链接:最新版本VSCode配置Python、PyQt5、QtDesigner环境并创建一个ui界面测试 一、安装Python3 PyQt5所支持的python版本是从3.5开始的,因此安装的Python3版本必须大于3.5。 我安装的位置是C:\Python\Python38。 参见真小白入门Pyhton的安装 二、安…

项目协同中的git

在远程代码仓库(云效,gitee,github,Coding等)新建一个代码库, 我使用的云效 新建一个develop分支,后续所有人的提交代码都合并到develop分支上面,一般develop分支是用来开发用的&…

NVM-无缝切换Node版本

NVM-无缝切换Node版本 如果未使用nvm之前已经下载了node,并且配置了环境变量,那么此时删除这些配置(Node的环境以及Node软件),使用nvm是为了在某些项目中使用低版本的node NVM下载 进入github的nvm readme: https://github.com/coreybutler/nvm-windows…

1007、1009:与进制问题、输出问题

1007 题目:本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A B * Q R成立 思路:对于数字元素拆分,除法的计算方法用代码实现(唯一一点就是在输出的…

【高危】Apache Spark 权限提升漏洞(CVE-2023-22946)

漏洞描述 Apache Spark 是一款支持非循环数据流和内存计算的大规模数据处理引擎。 使用 spark-submit 脚本在集群中启动任务可以通过指定proxy-user参数限制运行用户。在 Apache Spark 受影响版本中,攻击者通过指定自定义的classpath,则可以覆盖该配置…

homeassistant配置MQTT集成以及传感器实体(STM32连接进入homeassistant)

大家可以看作者的小破站教学视频(如果喜欢的话可以点个关注,给个三联!啊哈哈哈哈哈哈): 【homeassistant配置MQTT集成以及传感器实体(STM32连接进入homeassistant)】 最近homeassistan更新之后…

Python ---->> PiP 的重要性

我的个人博客主页:如果’真能转义1️⃣说1️⃣的博客主页 关于Python基本语法学习---->可以参考我的这篇博客:《我在VScode学Python》 Python是一种跨平台的计算机程序设计语言,是一个高层次的结合了解释性、编译性、互动性和面向对象的语…

如何用ChatGPT写毕业论文?

老早之前就听说有同学用ChatGPT写论文了 但是一直不觉得人工智能够真的替代人类 正好最近毕业论文开始降重了,超高的重复率愁得我快睡不着了 刷微博突然看到这个有关ChatGPT的问题。 出于好奇的我决定先来试试这个ChatGPT到底能不能帮我解决降重问题哈哈哈 点击…