Java基础-I/O流(文件字节流)

2023-11-04

字符串常见的字符底层组成是什么样的?

  • 英文和数字等在任何国家的字符集中都占1个字节
  • GBK字符中一个中文字符占2个字节
  • UTF-8编码中一个中文字符占3个字节

注意,编码前的字符集和编码好的字符集要必须一致,否则会出现中文字符乱码,英文和数字在任何国家的编码中都不会乱码(编码都占1个字节)。

public class Test {

    public static void main(String[] args) throws UnsupportedEncodingException {
        // 1、编码:把文字转换成字节(使用指定的编码)
        String name = "abc我爱你中国";
//        byte[] bytes = name.getBytes();     // 以当前代码默认字符集进行编码(UTF-8)
        byte[] bytes = name.getBytes("GBK");     // 指定编码
        System.out.println(bytes.length);
        System.out.println(Arrays.toString(bytes));

        // 2、解码:把字节转换成对应的中文形式(编码前和编码后的字符集必须一致,否则乱码)
//        String rs = new String(bytes);      // 默认的UTF-8
        String rs = new String(bytes, "GBK");      // 默认的UTF-8
        System.out.println(rs);
    }
}

 

 

public class FileInputStreamDemo {
    public static void main(String[] args) throws IOException {
        // 1、创建一个文件字节输入流管道与原文件接通
//        InputStream inputStream = new FileInputStream(new File("reflectDemo\\src\\data.txt"));
        // 简化写法
        InputStream inputStream = new FileInputStream("D:\\ideaProject\\reflectDemo\\src\\data.txt");

        // 2、读取一个字节返回(每次读取一滴水)
        int b1 = inputStream.read();
        System.out.println(b1);

        int b2 = inputStream.read();
        System.out.println(b2);

        int b3 = inputStream.read();
        System.out.println(b3);

        int b4 = inputStream.read();    // 读取完毕,返回-1
        System.out.println(b4);
    }
}

97
98
51
-1

/**
 * 使用文件字节输入流每次读取一个字节数组的数据
 */
public class FileInputStreamDemo01 {
    public static void main(String[] args) throws IOException {
        // 1、创建一个文件字节输入流管道与原文件接通
        InputStream inputStream = new FileInputStream("D:\\ideaProject\\reflectDemo\\src\\data02.txt");

        // 2、定义一个字节数组,用于读取字节数组
        byte[] buffer = new byte[3];    // 3B
        int len = inputStream.read(buffer);
        System.out.println("读取了几个字节:" + len);
        String rs = new String(buffer);
        System.out.println(rs);

        int len1 = inputStream.read(buffer);
        System.out.println("读取了几个字节:" + len);
        String rs1 = new String(buffer);
        System.out.println(rs1);
        // buffer = [a b c]

        // buffer = [a b c] ==> [c d c]
        int len2 = inputStream.read(buffer);
        System.out.println("读取了几个字节:" + len2);
        // 读取多少,倒出多少
        String rs2 = new String(buffer, 0, len2);
        System.out.println(rs2);

        int len3 = inputStream.read(buffer);
        System.out.println(len3);   // 读取完毕返回-1
    }
}

读取了几个字节:3
ab3
读取了几个字节:3
abc
读取了几个字节:2
cd
-1

        // 改进使用循环,每次读取一个字节数组
        byte[] buffer = new byte[3];
        int len;    // 记录每次读取的字节数
        while ((len = inputStream.read(buffer)) != -1) {
            // 读取多少倒出多少
            System.out.print(new String(buffer, 0, len));
        }

ab3abccd

/**
 * 使用文件字节输入流一次读完文件的全部字节,避免中文乱码
 */
public class FileInputStreamDemo02 {
    public static void main(String[] args) throws IOException {
        // 1、创建一个文件字节输入流管道与原文件接通
        File f = new File("D:\\ideaProject\\reflectDemo\\src\\data02.txt");
        InputStream inputStream = new FileInputStream(f);

        // 2、定义一个字节数组与文件的大小一样大
        byte[] buffer = new byte[(int) f.length()];
        int len = inputStream.read(buffer);
        System.out.println("读取了多少个字节: " + len);
        System.out.println("文件大小:" + f.length());
        System.out.println(new String(buffer));
    }
}

读取了多少个字节: 31
文件大小:31
ab3abcd我ff爱ff你d花bb花cd

public class OutputStreamDemo {

    public static void main(String[] args) throws IOException {
        // 1、创建一个文件字节输出流管道与目标文件接通
        OutputStream os = new FileOutputStream("D:\\ideaProject\\reflectDemo\\src\\data03.txt", true); // 先清空之前的数据,写新数据进入
        // 2、写数据出去
        // public void write(int a):写一个字节出去
        os.write('a');
        os.write(98);
        os.write("\r\n".getBytes());  // 换行
//        os.write('徐');

        // public void write(byte[] buffer):写一个字节数组出去
        byte[] buffer = {'a', 97, 98, 99};
        os.write(buffer);
        os.write("\r\n".getBytes());  // 换行

        byte[] buffer2 = "我是中国人".getBytes();
        os.write(buffer2);
        os.write("\r\n".getBytes());  // 换行

        // 写一个字节数组的一部分出去
        byte[] buffer3 = {'a', 97, 98, 99};
        os.write(buffer3, 0, 3);
        os.write("\r\n".getBytes());  // 换行

//        os.flush();  // 写数据必须刷新数据,可以继续使用流
        os.close();  // 释放资源,包含了刷新的,关闭后流不能使用了
    }
}
ab
aabc
我是中国人
aab
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java基础-I/O流(文件字节流) 的相关文章

随机推荐

  • ROS_Kinetic_23 ROS流行版本和相关书籍汇总

    本文转载至 http blog csdn net zhangrelay article details 52244746 目前 ROS使用的主流版本主要是下面四种 Hydro Indigo Jade Kinetic Distro Relea
  • echarts中的提示框组件tooltip自定义icon图片

    代码环境 echarts 5 4 3 vue 2 x 想要的效果 三 实现代码 父组件Option Option tooltip trigger axis borderWidth 0 边框宽度设置1 borderColor none 设置边
  • 【网络编程】02 套接字

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 Berkeley Socket 二 地址信息设置 1 struct sockaddr 和 struct sockaddr in 2 大小端转换 3 域名和
  • unity安卓打包失败的问题解决

    我遇到的问题目录 1 下载sdk和jdk 2 Gradle无法打包建立 3 Bulid出的包在手机上无法打开 1 下载sdk和jdk unity上可以直接下载 需要注意环境变量的配置 下载后在相应的地方填写路径 再到Bulid settin
  • 七段码 (爆搜 + 并查集)

    文章目录 七段码 AC思路 AC代码 七段码 题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 小蓝要用七段码数码管来表示一种特殊的文字 图片描述 上图给出了七段码数码管的一个图示 数码管中一共有 77 段可
  • C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)

    前言 在C 中 有三大函数复制控制 复制构造函数 赋值操作符 析构函数 而在C 11中 加入了移动构造函数 移动赋值操作符 我就斗胆将他们命名为六大函数好了 一 构造函数 c primer中说过 构造函数是特殊的成员函数 只要创建类类型的新
  • Github下载慢或下载失败的问题(不用修改host)

    方法一 科学上网 不推荐 下载大文件有时还是很慢 方法二 使用码云来解决 参考以下博客 https blog csdn net TeFuirnever article details 99110367
  • [信息论与编码理论专题-2]:信息与熵

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 118526747 前言 什么是
  • 解决网页多次经过请求数据后,Ajax请求被挂起

    问题描述 网页多次通过Ajax向后端发送后 突然无法发送请求了 后端和前端网页都没有明显的报错 查看网页的网络请求 发现后面发送的请求被挂起 问题分析 单个测试网页功能时没有任何问题 可以正常可发送请求后获取数据 说明Ajax的编写没有问题
  • 第六章 PCB 的 DRC 检查、拼版设计及资料输出

    目录 第六章 PCB 的 DRC 检查 拼版设计及资料输出 6 1 DRC 的检查及丝印的调整 6 2 拼板介绍 6 3 V Cut 和邮票孔的概念 6 4 拼板的实战演示 6 5 Gerber 文件的输出及整理 第六章 PCB 的 DRC
  • 记一次失败的regeorg+proxifiler代理实验--解决内网主机不出网问题

    记一次失败的regeorg proxifiler代理实验 解决内网主机不出网问题 一 简述 二 环境 三 流程 3 1 种webshell 3 2 启动regeorg 3 3 配置proxifiler 3 3 1 配置代理服务器 3 3 2
  • UNI-APP_横屏切换竖屏出现样式混乱问题

    app从竖屏页面1进入竖屏页面2 再进入横屏 再返回 再返回从新回到竖屏页面1 再次进入竖屏页面2 发现竖屏页面2的所有图片字体都被放大了 再返回竖屏1 再进入竖屏2 一切又恢复正常 解决跳转横屏竖屏样式放大错乱问题 解决方法 不要使用un
  • 前端部署:vue跨域配置、打包、nginx本机&远程访问

    vue版本 npm版本 2 6 11 8 1 2 前排感谢大佬 最全vue打包前后的跨域问题 绝对解决你的问题 0 项目说明 服务器和访问其的电脑同属校园网内网中 1 vue跨域配置 两种跨域方式均可 这里采用跨域2 1 1 vue con
  • 【Java】list对象(类)按某个属性排序

    这里采用的方法是 将要排序的类实现Comparable接口 具体如下 假设有个rule类 要按照sort字段排序 首先该类要实现Comparable接口 并实现它的compareTo 方法 Author EvanChen Date 2018
  • java连接kafka测试

    进入到kafka文件夹中修改配置文件 vim config server properties 启动zookeeper bin zookeeper server start sh config zookeeper properties 端口
  • python mssql数据库开发_Python实现的连接mssql数据库操作示例

    本文实例讲述了Python实现的连接mssql数据库操作 分享给大家供大家参考 具体如下 1 目标数据sql2008 R2 ComPrject gt TestModel 2 安装python 连接mssql 模块 运行 pip instal
  • 小程序hover-class点击态效果——小程序体验

    微信小程序设置 hover class 实现点击态效果 增强小程序触感 提高用户交互感知度 概念及注意事项 微信小程序中 可以用 hover class 属性来指定元素的点击态效果 但是在在使用中要注意 大部分组件是不支持该属性的 目前支持
  • Spring Cache

    Spring Cache Spring Cache使用方法与Spring对事务管理的配置相似 Spring Cache的核心就是对某个方法进行缓存 其实质就是缓存该方法的返回结果 并把方法参数和结果用键值对的方式存放到缓存中 当再次调用该方
  • Cisco Voip实验

    http hackerjx blog 51cto com 383839 248031 转载于 https blog 51cto com markyan 1043695
  • Java基础-I/O流(文件字节流)

    字符串常见的字符底层组成是什么样的 英文和数字等在任何国家的字符集中都占1个字节 GBK字符中一个中文字符占2个字节 UTF 8编码中一个中文字符占3个字节 注意 编码前的字符集和编码好的字符集要必须一致 否则会出现中文字符乱码 英文和数字