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

这篇具有很好参考价值的文章主要介绍了java-字符流和字节流(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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”

  • 实现步骤

    • 根据数据源创建字节输入流对象
    • 根据目的地创建字节输出流对象
    • 读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)
    • 释放资源
  • 代码实现文章来源地址https://www.toymoban.com/news/detail-469588.html

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

到了这里,关于java-字符流和字节流(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java基础教程】(四十五)IO篇 · 中:转换流、内存流和打印流(探索装饰设计模式与PrintStream类的进阶),文件操作案例实践、字符编码问题~

    掌握内存操作流、转换流、打印流的使用; 掌握文件复制操作; 掌握字符的主要编码类型以及乱码问题产生的原因; 虽然字节流与字符流表示两种不同的数据流操作,但是这两种流彼此间是可以实现互相转换的,而要实现这样的转换可以通过 InputStreamReader 、 OutputStreamWrit

    2024年02月16日
    浏览(36)
  • 字节流概述,及字节流写数据的三种方式

    如果数据通过记事本打开,我们还可以读懂里面的内容就使用字符流,否则使用字节流。如果不知道使用哪种类型的流,就使用字节流。 创建字节输出流的时候,一共做了三件事情。 调用系统功能创建了文件 创建了字节输出流对象 让字节输出流对象指向创建好的文件 写完

    2024年02月11日
    浏览(53)
  • 头歌:Java高级特性 - IO流 (答案+详细注释)第1关:什么是IO流+第2关:字节流-输入输出+第3关:字符流 - 输入输出+第4关:复制文件

    目录 第1关:什么是IO流 第2关:字节流-输入输出 第3关:字符流 - 输入输出 第4关:复制文件

    2024年02月10日
    浏览(64)
  • Java通过文件流和文件地址下载文件

    如何使用 MultipartFile 进行文件上传、下载到本地,并返回保存路径呢: 用于在 Spring Boot 应用中获取文件流,然后处理上传的文件,将文件保存到指定目录并返回保存的文件路径。下面对代码的各个部分进行简要介绍: 上传目录设置 :在这个示例中, UPLOAD_DIR 常量用于定义上

    2024年02月12日
    浏览(45)
  • 力扣2182.构造限制重复的字符串

     思路:先记录每个字符的出现次数,构建一个新字符串,从尾取字符,每取一个该字符个数-1,若该字符已经取到有repeatLimit个,则递归取次大的字符,并对应字符个数-1,若没有次大字符了,则直接返回 代码:  

    2024年02月01日
    浏览(46)
  • 【每日一题】构造限制重复的字符串

    【贪心】【字符串】【2024-01-13】 2182. 构造限制重复的字符串 思路 解题思想比较简单,利用贪心思想,每次选择当前剩余字符串中字典序最大的字符加到答案字符串末尾,如果答案字符串末尾的字符已经连续出现了 repeatLimit 次,则将字典序次大的字符加到答案字符串,随后

    2024年01月22日
    浏览(43)
  • 2645. 构造有效字符串的最少插入数

    给你一个字符串  word  ,你可以向其中任何位置插入 \\\"a\\\"、\\\"b\\\" 或 \\\"c\\\" 任意次,返回使  word   有效  需要插入的最少字母数。 如果字符串可以由 \\\"abc\\\" 串联多次得到,则认为该字符串  有效  。 示例 1: 示例 2: 示例 3: 提示: 1 = word.length = 50 word  仅由字母 \\\"a\\\"、\\\"b\\\" 和 \\\"c\\\" 组成

    2024年01月20日
    浏览(44)
  • Java文件导入接口多参数写法 (POST方法同时支持接收文件流和其他参数)

    使用表单方式进行传输,需要注意其他参数需要使用 @RequestPart 注解进行接收,因为在 post 方法中表单传输使用@RequestParam 接收 json 格式默认视为字符串类型,接口无法映射对应实体类 @RequestParam 依赖Converter or PropertyEditor进行数据解析, @RequestPart参考’Content-Type’ header,依赖

    2024年02月16日
    浏览(48)
  • 【算法题】2745. 构造最长的新字符串

    给你三个整数 x ,y 和 z 。 这三个整数表示你有 x 个 “AA” 字符串,y 个 “BB” 字符串,和 z 个 “AB” 字符串。你需要选择这些字符串中的部分字符串(可以全部选择也可以一个都不选择),将它们按顺序连接得到一个新的字符串。新字符串不能包含子字符串 “AAA” 或者

    2024年02月12日
    浏览(51)
  • leetcode-2645 构造有效字符串的最小插入数

    题目链接 2645. 构造有效字符串的最少插入数 - 力扣(LeetCode) 解题思路 动态规划 1、定义状态d[i]为将前i个字符(为了方便编码,下标从1开始)拼凑成若干个abc所需要的最小插入数。那么初始状态d[0]=0,最终要求解d[n],其中n为word的长度。 2、转移过程 3、因为每个字符都尽

    2024年02月02日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包