IO流笔记

在这里插入图片描述
在这里插入图片描述

文件基础知识

在这里插入图片描述
在这里插入图片描述

创建文件

在这里插入图片描述

package org.example;
import org.junit.Test;

import java.io.File;
import java.io.IOException;

public class FileCreate{
    public static void main(String[] args) {

    }
    @Test
    //方式1:new File(Strin pathname)
    public void create01(){
        File file = new File("d:\\news.txt");
        try{
            file.createNewFile();
            System.out.println("创建成功");
        } catch (IOException e){
            e.printStackTrace();
        }
    }
    @Test
    //方式2:new File(File parent,Stirng chile)//根据父目录文件+子路径构成
    public void create02(){
        File parentFile=new File("d:\\");
        String fileName="news2.txt";
        //在内存中创造了一个File对象
        File file = new File(parentFile,fileName);
        try{
            //将文件真正的创建到硬盘上
            file.createNewFile();
            System.out.println("创建成功");
        } catch (IOException e){
            e.printStackTrace();
        }
    }
    @Test
    //方式3:new File(String parent,Stirng child)//根据父目录+子路径构建
    public void create03(){
        String parentPath ="d:\\";
        String fileName = "news3.txt";
        //在内存中创造了一个File对象
        File file = new File(parentPath,fileName);
        try{
            //将文件真正的创建到硬盘上
            file.createNewFile();
            System.out.println("创建成功");
        } catch (IOException e){
            e.printStackTrace();
        }
    }
}

output:
在这里插入图片描述

文件操作

package org.example;

import org.junit.Test;

import java.io.File;
import java.sql.SQLOutput;

public class FileInformation {
    public static void main(String[] args) {
        
    }
    @Test
    //获取文件的信息
    public void info(){
        //先创建文件对象
        File file=new File("d:\\news.txt");
        //文件名
        System.out.println("文件名"+file.getName());
        System.out.println("绝对路径"+file.getAbsoluteFile());
        System.out.println("父级目录"+file.getParent());
        System.out.println("文件大小(字节)"+file.length());
        System.out.println("文件是否存在"+file.exists());
        System.out.println("是不是一个文件"+file.isFile());
        System.out.println("是不是一个目录"+file.isDirectory());

    }
}

output:
在这里插入图片描述

目录的创建 及 目录与文件的删除

在这里插入图片描述
注意:是删除空目录,文件是不是空的都能删除。

package org.example;
import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.sql.SQLOutput;

public class Directory_ {
    public static void main(String[] args) {

    }
    @Test
    public void m1(){
        String filePath="d:\\news.txt";
        File file=new File(filePath);
        if(file.exists()){
            if(file.delete()){
                System.out.println("删除成功");
            }else{
                System.out.println("删除失败");
            }
        }else{
            System.out.println("文件不存在");
        }
    }
    @Test
    //Java中目录也被看作文件
    public void m2(){
        String directoryPath="d:\\demo02";
        File file=new File(directoryPath);
        if(file.exists()){
            if(file.delete()){
                System.out.println("删除成功");
            }else{
                System.out.println("删除失败");
            }
        }else{
            System.out.println("文件不存在");
        }
    }
    @Test
    ///判断 D:\\demo\\a\\b\\c 目录是否存在,如果存在就提示已经存在,否则就创建
    public void m3(){
        String directoryPath="d:\\demo\\a\\b\\c";
        File file=new File(directoryPath);
        if(file.exists()){
            System.out.println("目录存在");
        }else{
            if(file.mkdirs()){
                System.out.println("该目录创建成功");
            }else{
                System.out.println("创建失败");
            }
        }
    }
}

IO流原理和分类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上图表中的四个类都是抽象类,不能直接使用
在这里插入图片描述

FileInputStream

在这里插入图片描述
在这里插入图片描述

package org.example.InputStream;
import org.junit.Test;

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStream_ {
    public static void main(String[] args) {

    }

    /**
     * 演示读取文件
     * 单个字符的读取,效率比较低
     * —————>使用read(byte[] b)优化
     */
    @Test
    public void readFile01(){
        String filePath="d:\\hello.txt";
        int readData=0;
        FileInputStream fileInputStream = null;
        {
            try {
                //创建FileInputStream对象,用于读取文件
                fileInputStream = new FileInputStream(filePath);
                //从该输入流读取一个字节的数据,如果没有输入可用,此方法将返回-1。
                while((readData = fileInputStream.read())!=-1){
                    System.out.print((char)readData);//转成char
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            } finally {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }

    /**
     * 使用read(byte[] b)读取文件提高效率
     * 
     * 在下面的代码中,buf数组的作用是用于存储从文件中读取到的字节数据。在读取文件内容的过程中,
     * 通过fileInputStream.read(buf)方法将读取到的字节数据存储在buf数组中。buf数组的大小为8个字节,即byte[8],
     * 一次最多读取8个字节的数据。然后,通过new String(buf, 0, readLen)将buf数组中的字节数据转换为字符串,并打印出来。
     * 因为读取文件的效率通常比较高,所以预先申请一个较小的字节数组,每次读取一部分数据到该数组中,可以提高读取效率。
     * buf数组的大小可以根据实际需要进行调整,以适应不同的文件大小和性能要求。
     */
    @Test
    public void readFile02(){
        String filePath="d:\\hello.txt";
        byte[] buf=new byte[8];//一次读取8个字节
        int readLen=0;
        FileInputStream fileInputStream = null;
        {
            try {
                //创建FileInputStream对象,用于读取文件
                fileInputStream = new FileInputStream(filePath);

                while((readLen=fileInputStream.read(buf))!=-1){
                    System.out.print(new String(buf,0,readLen));//显示
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            } finally {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }

}

FileOutputStream

在这里插入图片描述

package org.example.OutputStream;
import org.junit.Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStream_ {
    public static void main(String[] args) {

    }
    /**
     * 演示FileOutputStream,将数据写到文件
     * 如果文件不存在则创建文件
     */
    @Test
    public void wFile() {
        //创建FileOutputStream
        String filePath="d:\\a.txt";
        FileOutputStream fileOutputStream=null;
        try {
            //得到FileOutputStream对象
            //1、new FileOutputStream(filePath)这种创建方式是会覆盖原来的内容
            //2、new FileOutputStream(filePath,true)这种创建方式会追加
            fileOutputStream=new FileOutputStream(filePath,true);
            //写入一个字节
            //fileOutputStream.write('!');
            //写入一个字符串
            String str="Hello World";
            //getBytes可以将字符串转化为一个字符数组
            //fileOutputStream.write(str.getBytes());
            //write(byte[] b, int off,int len)输出从off开始的len的字符
            fileOutputStream.write(str.getBytes(),0,3);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

    }

}

文件拷贝

package org.example.OutputStream;

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

public class FileCopy {
    public static void main(String[] args) {
        //完成文件拷贝,将d:\\kkk.jpg 拷贝到c:\\
        //思路分析:
        //1、创建文件的输入流,将文件读入程序
        //2、创建文件的输出流,将读取到的文件数据写入指定的文件
        String srcfilePath="d:\\kkk.jpg";
        String destFilePath ="d:\\kpp.jpg";
        FileInputStream fileInputStream=null;
        FileOutputStream fileOutputStream=null;

        try{
            fileInputStream =new FileInputStream(srcfilePath);
            fileOutputStream=new FileOutputStream(destFilePath);
            byte[] buff=new byte[1024];
            //readLen是一个整型变量,用于保存每次从源文件中读取的字节数量。
            //在代码中,通过`fileInputStream.read(buff)`方法读取源文件中的内容,并将读取到的字节数量赋值给`readLen`。
            // 然后在后续的逻辑中,根据`readLen`的值来判断是否已经达到文件末尾。如果`readLen`的值为-1,表示已经读取到文件末尾;否则,表示仍有字节可读。
            int readLen=0;
            while((readLen=fileInputStream.read(buff))!=-1){
                //边读边写
                fileOutputStream.write(buff,0,readLen);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try{
                if(fileOutputStream!=null){
                    fileOutputStream.close();
                }
                if(fileInputStream!=null){
                    fileInputStream.close();
                }
            } catch (IOException E){
                E.printStackTrace();
            }
        }
    }
}

字符流

在这里插入图片描述

在这里插入图片描述

FileReader

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

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

相关文章

在线零售供应链管理:从0到100

全球57%的公司将其供应链视为竞争优势,然而只有6%的人表示完全了解它。无论您是首次在线卖家还是经验丰富的专业人士,驾驭管理高效且具有成本效益的零售供应链的复杂性都可能具有挑战性。一起来了解一下吧! 供应链管理是什么?它基…

Python网络爬虫入门到实战

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 网络爬虫(We…

Java并发编程第5讲——volatile关键字(万字详解)

volatile关键字大家并不陌生,尤其是在面试的时候,它被称为“轻量级的synchronized”。但是它并不容易完全被正确的理解,以至于很多程序员都不习惯去用它,处理并发问题的时候一律使用“万能”的sychronized来解决,然而如…

1.0的星火2.0必将燎原——图文声影PPT全测试

一、前言 大家好,勇哥又来分享AI模型了,前几天讯飞发布的星火大模型2.0迅速的进入了我们圈子里,为了有更多更好的模型分享给大家,分享星火大模型2.0是必须做的,我做一个传递着,希望大家也星火相传啊。 我…

ResizeObserver监听元素大小的变化

window.resize不适用于dom的监听。 ResizeObserver ResizeObserver 接口监视 Element 内容盒或边框盒或者 SVGElement 边界尺寸的变化。 方法 ResizeObserver.disconnect() 取消特定观察者目标上所有对 Element 的监听。 ResizeObserver.observe() 开始对指定 Element 的监…

解决Fastjson2 oom(Out Of Memory),支持大对象(LargeObject 1G)json操作

在使用Fastjson中的 JSON.toJSONString时,如果对象数据太大(>64M)会出现Out Of Memory,查看源码发现为JSONWriter中的判断代码 其中maxArraySize默认最大为64M,如果超过了就会抛出oom错误 如果fastjson过多的使用内存,也可能导致java堆内存溢出,所以这…

开源语音聊天软件Mumble

网友 大气 告诉我,Openblocks在国内还有个版本叫 码匠,更贴合国内软件开发的需求,如接入了国内常用的身份认证,接入了国内的数据库和云服务,也对小程序、企微 sdk 等场景做了适配。 在 https://majiang.co/docs/docke…

idea 本地版本控制 local history

idea 本地版本控制 local history 如何打开 1 自定义快捷键 settings->keymap->搜索框输入 show history -》Add Keyboard Shortcut -》设置为 CtrlAltL 2 右键文件-》local history -》show history 新建文件 版本1,creating class com.geekmice…这个是初…

Vue前端封装一个任务条的组件进行使用

任务条 样式 代码 父组件 <articleSteps :tabs"tabs" :tabs-active-name"tabsActiveName" /><div class"drawer__footer"><el-button v-if"tabsActiveName 1 || tabsActiveName 2" click"backClick">…

视频云存储/安防监控/视频汇聚EasyCVR平台新增设备经纬度选取

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

vue浏览器插件安装-各种问题

方法1&#xff1a;vue.js devtolls插件下载 https://blog.csdn.net/qq_55640378/article/details/131553642 下载地址&#xff1a; Tags vuejs/devtools GitHub npm install 或是 cnpm install 遇到的报错 设置淘宝镜像源&#xff08;推荐使用nrm&#xff0c;这一步是为…

带你了解—在外远程群晖NAS-群晖Drive挂载电脑磁盘同步备份【无需公网IP】

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…

Swift 周报 第三十五期

文章目录 前言新闻和社区五天市值蒸发 2000 亿美元&#xff0c;苹果公司怎么了&#xff1f;在你的 App 中帮助顾客解决账单问题需要声明原因的 API 列表现已推出 提案通过的提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组整理周报的第三十五…

通达信指标公式15:除权除息数据统计分析

#1.关于除权除息指标的介绍&#xff1a;本指标是小红牛原创指标之一&#xff0c;觉得有必要研究一下这个问题&#xff0c;所以就花时间整理一下这个指标相关内容&#xff0c;大家可以在本源码基础上&#xff0c;进一步优化自己的思路。本指标为通达信幅图指标&#xff0c;可以做…

树结构使用实例---实现数组和树结构的转换

文章目录 一、为什么要用树结构&#xff1f;二、使用步骤 1.引入相关json2.树结构的转换总结 一、为什么要用树结构&#xff1f; 本文将讲述一个实例&#xff0c;构造一棵树来实现数组和tree的转换&#xff0c;这在前端树结构中是经常遇到的 后端返回树结构方便管理&#xff…

轻松实现24小时无人直播带货,只需一款无人值守手机直播软件!

现在做线上运营&#xff0c;基本上就离不开短视频平台&#xff0c;想要做好短视频平台&#xff0c;就得弄懂如何在平台上进行直播。 今年以来&#xff0c;以专帮科技为首的一些科技公司研发的手机无人直播技术得到了快速发展&#xff0c;使得越来越多的企业和个人开始使用此类…

前端---需要了解浏览器相关知识--浏览器请求服务器资源---缓存

知识点1: 掘金1&#xff1a;浏览器缓存 掘金2 :浏览器缓存 一、浏览器缓存 请求&#xff08;静态资源 &#xff5c; 动态资源&#xff09; 一、缓存是什么&#xff1f; 如果没有缓存的机制 每次都要重新请求静态资源 1.从网络上的下载时间&#xff0c;肯定大于从硬盘里读的…

Pika Labs - 用AI工具生成短视频大片

今天我要跟大家分享如何用AI工具1分钟内生成一个短视频大片&#xff0c;效果完全不输影视大V。 只需要用一句话就可以生成视频&#xff0c;或者用一张图就能生成视频&#xff0c;这就是最新推出的AI工具Pika Labs&#xff01;被网友誉为“全球最优秀的文本生成视频AI”。 目前…

在思科(Cisco)设备上配置 DHCP 服务器

DHCP广泛用于LAN环境中&#xff0c;从集中式服务器动态分配主机IP地址&#xff0c;从而显着减少IP地址管理的开销。DHCP 还有助于节省有限的 IP 地址空间&#xff0c;因为不再需要将 IP 地址永久分配给主机&#xff0c;只有连接到网络的主机才会使用 IP 地址。DHCP 服务器将路由…

JSON的处理

1、JSON JSON(JavaScript Object Notation)&#xff1a;是一种轻量级的数据交换格式。 它是基于 ECMAScript 规范的一个子集&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写&#…