java IO流_1

news2025/7/16 19:05:36

目录

分类

字节流

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();
    }
}

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

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

相关文章

SDK(动态链接库dll)的封装技巧

SDK(动态链接库dll)的封装技巧 一、说明 通过上篇文章,我们知道对于封装API,目的为了代码复用等,其中还有一个重要的原因,就是隐藏实现。 说到隐藏实现,在封装C的SDK库(动态dll库)时&#xff…

【获奖案例巡展】信创先锋之星——浙江省某市区视频能力中心

为表彰使用大数据、人工智能等基础软件为企业、行业或世界做出杰出贡献和巨大创新的标杆项目,星环科技自2021年推出了“新科技 星力量” 星环科技科技实践案例评选活动,旨在为各行业提供更多的优秀产品案例,彰显技术改变世界的力量&#xff0…

【id:33】【20分】C. 分数类(类与构造)

题目描述 完成下列分数类的实现: class CFraction { private: int fz, fm; public: CFraction(int fz_val, int fm_val) ; CFraction add(const CFraction &r); CFraction sub(const CFraction &r); CFraction mul(const CFraction &r);…

elementui的table组件,大量使用v-if导致列表渲染错乱,有的列渲染的值不对,有的列渲染出来的空值解决办法

记录一下: 这是同事碰上的,感觉挺奇怪的就研究了研究。 先说一下,之所以是同事那边碰到的而我这边碰不到这个问题,是因为我这边做 el-table-column 的时候,是先定义的 tableHeader: [...] 然后通过 v-for 遍历出来的…

【Linux】CentOS桥接模式配置静态IP

文章目录 1 前言2 桥接模式和NAT模式有什么区别3 校园网环境下配置桥接模式 1 前言 最近在安装的虚拟机上面用mosquitto搭建MQTT服务器,但是很奇怪的是每次电脑上的测试软件能顺利连接服务器,但是连接电脑热点的外部设备却不行,让我很是困惑。…

程序员随时担心被抛弃......大厂外包值不值得去?

外包”这个词经常被人提及,而且也经常被我们所“鄙夷”,很多人都在四处问:“软件外包公司到底能不能去”? 外包公司到底能不能学到真正的技术? 外包大厂能不能去? 今天就给大家详细分享下外包的利与弊 做…

DNS缓存失效,死循环访问造成连接数瞬间飚高的问题

0.背景介绍 某服务domain.com.cn 之前DNS解析到服务真实地址10.1.1.11,后面需要对用户登录增加黑名单功能,于是在openresty针对服务domain.com.cn的特性完成了黑名单功能。黑名单功能已经上线几个月,但是DNS从服务真实地址10.1.1.11切换到ope…

如何远程自己家里电脑

即使您认真地将数据保存到云中,远程访问家庭或办公室计算机上的计算机文件也可能会改变游戏规则。也许您正坐在旅馆房间里,需要在家用电脑上运行一个程序。 或者您出门在外,想在手机上运行桌面应用程序。 这就是远程桌面工具的用武之地。配置…

【ansj分词,英文被转换为了小写】

ansj分词,英文被转换为了小写 没有识别到词表解决方案jieba分词 没有识别到词表 因为数据是大写,词表是大写,ansj将数据转换成了小写,无法匹配,词表失效。将词表改为小写就可以成功分词。 这里ansj我们的词表就是一列…

rdma IBV_SEND_FENCE标记位理解

参考rxe驱动代码, 在rxe_req.c文件里,取wqe时,会调用req_next_wqe函数, 在函数的最后有个判断, qp->req.wait_fence设置为1,然后返回NULL,所以rxe_requester函数直接退出了,不会…

【Linux】网络编程入门(TCP + UDP)

目录简述: 前言: 一、网络通信概述 二、网络编程主要函数 (1)socket函数 (2)bind函数 (3)bind函数 (4)accept函数 (5)connect…

AttributeError: ‘LTP‘ object has no attribute ‘seg‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【Jenkins 2.x 实践指南】2.7 pipeline -- 章节小结

目录 一、 pipeline入门 1. pipeline 是什么 2. Jenkinsfile 又是什么 3. pipeline语法 的选择 4. 创建第一个pipeline - helloworld Stage 1: 创建任务 Stage 2: 创建流水线 - Hello World Stage 3: 编写 pipeline 声明 Stage 4: 执行 Stage 5: 点击 #1 查看日志 …

2023年 中国制造业这三大趋势不可忽视

政府要掏1个亿奖励制造企业搞发展,我国制造业大翻身的时代来了吗? 4月12日成都日报电,为支持制造业创新发展,支持制造业数字化、智能化和绿色化转型升级,培育高精尖特企业,政府给扶持政策不说,…

2.5亿行文本数据,导入到SqlServer需要多久?

今天测试了一下SqlServer的导入性能,数据库版本是SqlServer2008r2。 数据源是大概5000个文件,总共12.7G的大小的文本文件, 自己做的导入工具,利用多线程导入,总共耗费了大概1个小时。 导入后的总行数达到2.5亿多行&am…

Linux 安装tomcat教程

前言 PS:安装tomcat需要先配置jdk 1.Tomcat下载 1.1.Tomcat安装包下载 1. 可以选择直接在omcat官网Apache Tomcat - Apache Tomcat 9 Software Downloads下载,上传至linux服务器 1.2. 主机wget源下载 也可以通过直接在linux直接下载 #执行命令 wge…

Spring AOP: 多切面的顺序,性能及异常监控

目录标题 一、Sprig的AOP操作JDK动态代理CGLib动态代理基于xml开发Spring AOP基于注解开发Spring AOP 二、多切面的顺序基于注解的配置基于Ordered接口配置基于XML配置 三、性能及异常监控性能监控异常监控 四、工程目录及运行结果图 一、Sprig的AOP操作 JDK动态代理 //接口 …

港科夜闻|国务院港澳办主任夏宝龙在香港科大考察期间,表示对学校开展创科工作的鼓励及希望...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、国务院港澳办主任夏宝龙在香港科大考察期间,表示对学校开展创科工作的鼓励及希望。考察期间,夏宝龙主任参观了香港科大的空气动力学和声学实验中心,以及香港科大先进显示与光电子技术国…

【花雕学AI】找出合适的提示词—让ChatGPT发挥出最大的潜力与价值

ChatGPT 是一种基于人工智能技术的自然语言处理系统,它可以回答各种问题,提供有用的信息和建议。然而,要让 ChatGPT 发挥出最大的潜力和价值,我们需要使用一些提示词来帮助它更好地理解我们的问题和需求。这些提示词包括明确、详细…

WPF 看板组件:Kanban Library for WPF 4.2 Crack

WPF 的看板组件。 适用于 WPF 的 DlhSoft 看板库可帮助您在 WPF 应用程序中创建交互式看板。它包括可自定义的状态、可扩展的组、可拖动的项目、可选菜单等等。 用于 WPF 功能的 DlhSoft 看板库 交互式板- 可定制的状态、可扩展的组、可拖动的项目、可选菜单。根据需要注入您自…