java-字符流和字节流(一)

news2024/12/23 5:37:30

java-字符流和字节流(一)

在这里插入图片描述

一、File类

1.1 File类概述和构造方法

  • File类介绍

    • 它是文件目录路径名的抽象表示
    • 文件和目录是可以通过File封装成对象的
    • 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的
  • File类的构造方法

    方法名说明
    File(String pathname)通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
    File(String parent, String child)从父路径名字符串和子路径名字符串创建新的 File实例
    File(File parent, String child)从父抽象路径名和子路径名字符串创建新的 File实例
  • 示例代码

    public class FileDemo01 {
    	public static void main(String[] args) {
        	//File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
        	File f1 = new File("E:\\itcast\\java.txt");
        	System.out.println(f1);
    
        	//File(String parent, String child):从父路径名字符串和子路径名字符串创建新的 File实例。
        	File f2 = new File("E:\\itcast","java.txt");
        	System.out.println(f2);
    
        	//File(File parent, String child):从父抽象路径名和子路径名字符串创建新的 File实例。
        	File f3 = new File("E:\\itcast");
        	File f4 = new File(f3,"java.txt");
        	System.out.println(f4);
    	}
    }
    

1.2 File类创建功能

  • 方法分类

    方法名说明
    public boolean createNewFile()当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件
    public boolean mkdir()创建由此抽象路径名命名的目录
    public boolean mkdirs()创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录
  • 示例代码

    public class FileDemo02 {
        public static void main(String[] args) throws IOException {
            //需求1:我要在E:\\itcast目录下创建一个文件java.txt
            File f1 = new File("E:\\itcast\\java.txt");
            System.out.println(f1.createNewFile());
            System.out.println("--------");
    
            //需求2:我要在E:\\itcast目录下创建一个目录JavaSE
            File f2 = new File("E:\\itcast\\JavaSE");
            System.out.println(f2.mkdir());
            System.out.println("--------");
    
            //需求3:我要在E:\\itcast目录下创建一个多级目录JavaWEB\\HTML
            File f3 = new File("E:\\itcast\\JavaWEB\\HTML");
    //        System.out.println(f3.mkdir());
            System.out.println(f3.mkdirs());
            System.out.println("--------");
    
            //需求4:我要在E:\\itcast目录下创建一个文件javase.txt
            File f4 = new File("E:\\itcast\\javase.txt");
    //        System.out.println(f4.mkdir());
            System.out.println(f4.createNewFile());
        }
    }
    

1.3 File类判断和获取功能

  • 判断功能

    方法名说明
    public boolean isDirectory()测试此抽象路径名表示的File是否为目录
    public boolean isFile()测试此抽象路径名表示的File是否为文件
    public boolean exists()测试此抽象路径名表示的File是否存在
  • 获取功能

    方法名说明
    public String getAbsolutePath()返回此抽象路径名的绝对路径名字符串
    public String getPath()将此抽象路径名转换为路径名字符串
    public String getName()返回由此抽象路径名表示的文件或目录的名称
    public String[] list()返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
    public File[] listFiles()中的文件和目录的File对象数组
  • 示例代码

    public class FileDemo04 {
        public static void main(String[] args) {
            //创建一个File对象
            File f = new File("myFile\\java.txt");
    
    //        public boolean isDirectory():测试此抽象路径名表示的File是否为目录
    //        public boolean isFile():测试此抽象路径名表示的File是否为文件
    //        public boolean exists():测试此抽象路径名表示的File是否存在
            System.out.println(f.isDirectory());
            System.out.println(f.isFile());
            System.out.println(f.exists());
    
    //        public String getAbsolutePath():返回此抽象路径名的绝对路径名字符串
    //        public String getPath():将此抽象路径名转换为路径名字符串
    //        public String getName():返回由此抽象路径名表示的文件或目录的名称
            System.out.println(f.getAbsolutePath());
            System.out.println(f.getPath());
            System.out.println(f.getName());
            System.out.println("--------");
    
    //        public String[] list():返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
    //        public File[] listFiles():返回此抽象路径名表示的目录中的文件和目录的File对象数组
            File f2 = new File("E:\\itcast");
    
            String[] strArray = f2.list();
            for(String str : strArray) {
                System.out.println(str);
            }
            System.out.println("--------");
    
            File[] fileArray = f2.listFiles();
            for(File file : fileArray) {
    //            System.out.println(file);
    //            System.out.println(file.getName());
                if(file.isFile()) {
                    System.out.println(file.getName());
                }
            }
        }
    }
    

1.4 File类删除功能

  • 方法分类

    方法名说明
    public boolean delete()删除由此抽象路径名表示的文件或目录
  • 示例代码

    public class FileDemo03 {
        public static void main(String[] args) throws IOException {
    //        File f1 = new File("E:\\itcast\\java.txt");
            //需求1:在当前模块目录下创建java.txt文件
            File f1 = new File("myFile\\java.txt");
    //        System.out.println(f1.createNewFile());
    
            //需求2:删除当前模块目录下的java.txt文件
            System.out.println(f1.delete());
            System.out.println("--------");
    
            //需求3:在当前模块目录下创建itcast目录
            File f2 = new File("myFile\\itcast");
    //        System.out.println(f2.mkdir());
    
            //需求4:删除当前模块目录下的itcast目录
            System.out.println(f2.delete());
            System.out.println("--------");
    
            //需求5:在当前模块下创建一个目录itcast,然后在该目录下创建一个文件java.txt
            File f3 = new File("myFile\\itcast");
    //        System.out.println(f3.mkdir());
            File f4 = new File("myFile\\itcast\\java.txt");
    //        System.out.println(f4.createNewFile());
    
            //需求6:删除当前模块下的目录itcast
            System.out.println(f4.delete());
            System.out.println(f3.delete());
        }
    }
    
  • 绝对路径和相对路径的区别

    • 绝对路径:完整的路径名,不需要任何其他信息就可以定位它所表示的文件。例如:E:\itcast\java.txt
    • 相对路径:必须使用取自其他路径名的信息进行解释。例如:myFile\java.txt

二、IO流

2.1 IO流概述和分类

  • IO流介绍
    • IO:输入/输出(Input/Output)
    • 流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输
    • IO流就是用来处理设备间数据传输问题的。常见的应用:文件复制文件上传文件下载
  • IO流的分类
    • 按照数据的流向
      • 输入流:读数据
      • 输出流:写数据
    • 按照数据类型来分
      • 字节流
        • 字节输入流
        • 字节输出流
      • 字符流
        • 字符输入流
        • 字符输出流
  • IO流的使用场景
    • 如果操作的是纯文本文件,优先使用字符流
    • 如果操作的是图片、视频、音频等二进制文件。优先使用字节流
    • 如果不确定文件类型,优先使用字节流。字节流是万能的流

三、字节流

字节流抽象基类

  • InputStream:这个抽象类是表示字节输入流的所有类的超类
  • OutputStream:这个抽象类是表示字节输出流的所有类的超类
  • 子类名称特点:子类名称都是以其父类名作为子类名的后缀

3.1 字节输出

字节流写数据

  • FileOutputStream(String name):创建文件输出流以指定的名称写入文件

3.1.1 写数据的三种方式

  • 写数据的方法分类

    方法名说明
    void write(int b)将指定的字节写入此文件输出流 一次写一个字节数据
    void write(byte[] b)将 b.length字节从指定的字节数组写入此文件输出流 一次写一个字节数组数据
    void write(byte[] b, int off, int len)将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 一次写一个字节数组的部分数据
  • 示例代码

    public class FileOutputStreamDemo02 {
        public static void main(String[] args) throws IOException {
            //FileOutputStream(String name):创建文件输出流以指定的名称写入文件
            FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt");
    
            //void write(int b):将指定的字节写入此文件输出流
          	fos.write(97);
    
    //        void write(byte[] b):将 b.length字节从指定的字节数组写入此文件输出流
    //        byte[] bys = {97, 98, 99, 100, 101};
    //        byte[] getBytes():返回字符串对应的字节数组
            byte[] bys = "abcde".getBytes();
    //        fos.write(bys);
    
            //void write(byte[] b, int off, int len):将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流
            fos.write(bys,1,3);
    
            //释放资源
            fos.close();
        }
    }
    

3.1.2 字节流写数据的两个小问题

  • 字节流写数据如何实现换行

    • windows: \r\n
    • linux: \n
    • mac: \r
  • 字节流写数据如何实现追加写入

    • public FileOutputStream(String name,boolean append)
    • 创建文件输出流以指定的名称写入文件。如果第二个参数为true ,则字节将写入文件的末尾而不是开头
  • 示例代码

    public class FileOutputStreamDemo03 {
        public static void main(String[] args) throws IOException {
            //创建字节输出流对象
    //        FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt");
            FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt",true);
    
            //写数据
            for (int i = 0; i < 10; i++) {
                fos.write("hello".getBytes());
                fos.write("\r\n".getBytes());
            }
    
            //释放资源
            fos.close();
        }
    }
    

3.2 字节输入

字节流读数据

  • FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream ,该文件由文件系统中的路径名name命名

3.2.1 一次读一个字节数据

  • 字节输入流读取数据的步骤

    • 创建字节输入流对象
    • 调用字节输入流对象的读数据方法
    • 释放资源
  • 示例代码

    public class FileInputStreamDemo {
        public static void main(String[] args) throws IOException {
            //创建字节输入流对象
            //FileInputStream(String name)
            FileInputStream fis = new FileInputStream("myByteStream\\fos.txt");
    
            int by;
            /*
                fis.read():读数据
             */
            while ((by = fis.read()) != -1) {
                System.out.print((char)by);
            }
    
            //释放资源
            fis.close();
        }
    }
    

3.2.2 一次读一个字节数组数据

  • 一次读一个字节数组的方法

    • public int read(byte[] b):从输入流读取最多b.length个字节的数据
    • 返回的是读入缓冲区的总字节数,也就是实际的读取字节个数
  • 示例代码

    public class FileInputStreamDemo02 {
        public static void main(String[] args) throws IOException {
            //创建字节输入流对象
            FileInputStream fis = new FileInputStream("myByteStream\\fos.txt");
            byte[] bys = new byte[1024]; //1024及其整数倍
            int len;
            while ((len = fis.read(bys)) != -1) {
                System.out.print(new String(bys, 0, len));
            }
    
            //释放资源
            fis.close();
        }
    }
    

3.3 字节流复制图片【应用】

  • 案例需求

    ​ 把“E:\xxx\mn.jpg”复制到模块目录下的“mn.jpg”

  • 实现步骤

    • 根据数据源创建字节输入流对象
    • 根据目的地创建字节输出流对象
    • 读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)
    • 释放资源
  • 代码实现

    public class CopyJpgDemo {
    	public static void main(String[] args) throws IOException {
        	//根据数据源创建字节输入流对象
        	FileInputStream fis = new FileInputStream("E:\\xxx\\mn.jpg");
        	//根据目的地创建字节输出流对象
        	FileOutputStream fos = new FileOutputStream("myByteStream\\mn.jpg");
    
        	//读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)
        	byte[] bys = new byte[1024];
        	int len;
        	while ((len = fis.read(bys)) != -1) {
            	fos.write(bys, 0, len);
        	}
    
        	//释放资源
        	fos.close();
        	fis.close();
    	}
    }
    

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

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

相关文章

【C++ 程序设计】第 1 章:C++ 语言简介

目录 一、C 语言的发展简史 二、C 语言的特点 &#xff08;1&#xff09;基本的输入/输出 &#xff08;2&#xff09;头文件和命名空间 &#xff08;3&#xff09;强制类型转换运算符 &#xff08;4&#xff09;函数参数的默认值 &#xff08;5&#xff09;引用和函数…

超简单好看的HTML5七夕情人节表白网页(表白直接拿去用) HTML+CSS+JS

博主&#xff1a;命运之光 专栏&#xff1a;web开发&#xff08;html css js&#xff09; 目录 ✨简介&#xff1a; ✨前言&#xff1a; ✨视频展示 ✨源代码 ✨代码的使用方法&#xff08;超简单什么都不用下载&#xff09; &#x1f353;1.打开记事本 &#x1f353;2.将…

springboot+vue高校食堂点餐送餐配送系统

食堂送餐系统的开发过程中&#xff0c;采用B / S架构&#xff0c;主要使用java语言进行开发&#xff0c;结合最新流行的springboot框架。使用Mysql数据库和Eclipse/idea开发工具。该四川工商学院食堂送餐系统包括用户、商家、送餐员和管理员。其主要功能包括商家管理、用户管理…

【Azure】微软 Azure 基础解析(八)Azure 存储服务:Blob存储、队列存储、文件存储等特点与应用场景

本系列博文还在更新中&#xff0c;收录在专栏&#xff1a;「Azure探秘&#xff1a;构建云计算世界」 专栏中。 本系列文章列表如下&#xff1a; 【Azure】微软 Azure 基础解析&#xff08;三&#xff09;描述云计算运营中的 CapEx 与 OpEx&#xff0c;如何区分 CapEx 与 OpEx…

chatgpt赋能python:Python创建节点:简单易行的SEO优化技巧

Python创建节点&#xff1a;简单易行的SEO优化技巧 简介 在今天的数字时代&#xff0c;拥有强大在线存在感已经成为了非常重要的一种要素&#xff0c;而搜索引擎优化&#xff08;SEO&#xff09;就是其中重要的一环。优秀的SEO技巧不仅能够帮助网站吸引更多的访客&#xff0c…

chatgpt赋能python:Python编程实现高效的SEO搜索程序

Python编程实现高效的SEO搜索程序 在当今互联网时代&#xff0c;搜索引擎是人类获取信息的主要途径&#xff0c;而优化搜索引擎结果从而使自己的网站得到更多展示机会是一直以来网站优化重要的一环。Python语言以其简洁、高效、易学的特点&#xff0c;成为了编写高效SEO搜索程…

Linux 实操篇--定时任务调度

Linux 实操篇-定时任务调度 crond 任务调度 crontab 进行定时任务的设置 概述 任务调度&#xff1a;是指系统在某个时间执行的特定的命令或程序。 任务调度分类&#xff1a;1.系统工作&#xff1a;有些重要的工作必须周而复始地执行。如病毒扫描等 个别用户工作&#xff…

java-基础语法(二)

java-基础语法(二) 一、流程控制语句 1.1 流程控制语句分类 顺序结构 分支结构(if, switch) 循环 结构(for, while, do…while) 1.2 顺序结构 顺序结构执行流程图&#xff1a; 1.3 分支结构之if语句 if语句格式1 格式&#xff1a;if (关系表达式) {语句体; }执行流程&…

04.JavaWeb-Tomcat服务器+Maven

1.B/S架构 B/S架构即浏览器/服务器模式&#xff0c;他是对C/S架构的一种改进&#xff1b;与C/S架构相比B/S架构可以实现跨平台&#xff0c;客户端零维护&#xff0c;但是个性化能力低&#xff0c;响应速度较慢。 2.Tomcat服务器 Tomcat是一个用于运行Java Web应用程序的服务器&…

chatgpt赋能python:Python分解9位数的方法介绍

Python分解9位数的方法介绍 Python是一种广泛使用的编程语言&#xff0c;具有强大的功能和易于使用的语法。其中&#xff0c;分解一个9位数是一个常见的问题。在本篇文章中&#xff0c;将介绍如何用Python分解一个9位数。 分解9位数的方法 对于一个9位数&#xff0c;我们可以…

SVM算法的介绍

一、SVM算法的介绍 1.什么是SVM算法&#xff1f; SVM&#xff08;Support Vector Machine&#xff09;是一种常见的监督学习算法&#xff0c;用于进行二分类或多分类任务。它的主要思想是找到一个最优的超平面&#xff0c;将不同类别的样本分隔开。 超平面最大间隔介绍&#…

MyBatisPlus快速入门

MyBatisPlus 1、MyBatisPlus简介MyBatisPlus概述入门案例 2、标准数据层开发MyBatisPlus开启日志标准CRUD分页查询 3、DQL编程控制条件查询null值处理查询投影查询条件字段映射与表名映射 4、DML编程控制id生成策略控制多数据操作逻辑删除乐观锁 5、代码生成器 1、MyBatisPlus简…

testng介绍

1、java.lang.Exception: No runnable methods at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods IDEA run case抛出no runnable methods&#xff0c;project基于testng编写case 需要配置Run→Edit Configuration 2、task配置 test {useTestNG {//打印…

Vector-常用CAN工具 - CANoe迁移常见Port配置问题

从 CANoe 和 CANalyzer 12.0 SP4 版本开始&#xff0c;以太网迁移向导将在必要时自动开始将现有工具配置转换为新的基于端口的网络访问格式。尽管大多数现有配置都可以毫无问题地转换&#xff0c;但有些可能不会。如果在迁移过程中遇到问题&#xff0c;迁移向导将通过以下可能的…

LeetCode刷题(ACM模式)-04字符串

参考引用&#xff1a;代码随想录 注&#xff1a;每道 LeetCode 题目都使用 ACM 代码模式&#xff0c;可直接在本地运行&#xff0c;蓝色字体为题目超链接 1. 反转字符串 344. 反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形…

PAT A1162 Postfix Expression

1162 Postfix Expression 分数 25 作者 陈越 单位 浙江大学 Given a syntax tree (binary), you are supposed to output the corresponding postfix expression, with parentheses reflecting the precedences of the operators. Input Specification: Each input file …

权限管理与Shiro入门

权限管理与Shiro入门 学习目标&#xff1a; 理解前端权限控制思路 理解有状态服务和无状态服务通过拦截器实现JWT鉴权 能够理解shiro以及shiro的认证和授权 前端权限控制 需求分析 需求说明 基于前后端分离的开发模式中&#xff0c;权限控制分为前端页面可见性权限与后…

操作系统复习3.1.1-内存非连续存储

基本分页存储管理 背景 固定分区带来的是内部内存碎片难以利用 而动态分配带来的外部内存碎片难以利用 而基本分页存储管理解决了这个问题&#xff0c;将一个进程分散地装入不同分区&#xff0c;避免了紧凑的处理 思想 将一个进程(43MB)装入内存&#xff0c;一个分页大小为…

【fluent】利用UDF和Scheme变量实现根据条件满足情况保存dat、case数据案例文件

一、问题背景 前一段时间在闲鱼上&#xff0c;遇到有一个人问我“在udf中如何实现某一个变量满足一定取值范围内才保存dat和case文件”。 而后我帮他解决了这个问题&#xff0c;在此处也将解决办法公益性地分享出来。 主要参考的是CFD online上的一篇讨论fluent udf, saving…