【Java寒假打卡】Java基础-字符流

news2024/11/18 20:16:33

【Java寒假打卡】Java基础-字符流

    • 编码表
    • 字符串中的编码和解码问题
    • 字节流读取文本文件出现乱码的原因
    • 字符流读取中文的过程
    • 字符流写出数据
    • 字符流输出数据注意事项
    • flush和close方法
    • 字符流读取数据
    • 案例-保存键盘录入的数据
    • 字符缓冲输入流
    • 字符缓冲输出流
    • 缓冲流的特有方法
    • 案例-读取文件中的数据排序之后 写入本地

编码表

在这里插入图片描述

编码和解码的过程:

在这里插入图片描述

字符串中的编码和解码问题

在这里插入图片描述

  • 字符串编码
package com.hfut.edu.test10;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;

public class test1 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        // 使用IDEA默认的字符集 UTF-8 将字符串编码为一些字节 然后将结果存储到字节数组中

        String s = "黑马程序员";// 一个UTF-8字符 变为为三个字节
        byte[] bytes = s.getBytes();// 将字符串存入字符数组中
        System.out.println(Arrays.toString(bytes));// 将字节数组 转换为字符串

        // 指定编码格式 GBK windows默认编码  一个字符使用两个字节

        byte[] bytes1 = s.getBytes("GBK");
        System.out.println(Arrays.toString(bytes1));// 将字节数组 转换为字符串
    }
}
  • 字符串解码
package com.hfut.edu.test10;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;

public class test1 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        // 使用IDEA默认的字符集 UTF-8 将字符串编码为一些字节 然后将结果存储到字节数组中

        method1();
        method2();
    }

    private static void method2() throws UnsupportedEncodingException {
        byte[] bytes1 = {-23, -69, -111, -23, -87, -84, -25, -88, -117, -27, -70, -113, -27, -111, -104};
        byte[] bytes2 = {-70, -38, -62, -19, -77, -52, -48, -14, -44, -79};

        // 使用默认utf-8进行解码
        String s1 = new String(bytes1);
        System.out.println(s1);

        // 使用指定的GBK进行解码
        String s2 = new String(bytes2,"gbk");
        System.out.println(s2);

    }

    private static void method1() throws UnsupportedEncodingException {
        String s = "黑马程序员";// 一个UTF-8字符 变为为三个字节
        byte[] bytes = s.getBytes();// 将字符串存入字符数组中
        System.out.println(Arrays.toString(bytes));// 将字节数组 转换为字符串

        // 指定编码格式 GBK windows默认编码  一个字符使用两个字节

        byte[] bytes1 = s.getBytes("GBK");
        System.out.println(Arrays.toString(bytes1));// 将字节数组 转换为字符串
    }
}

字节流读取文本文件出现乱码的原因

在这里插入图片描述

字符流读取中文的过程

一次性读取多个字节

在这里插入图片描述

字符流写出数据

在这里插入图片描述

package com.hfut.edu.test10;

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

public class test2 {
    public static void main(String[] args) throws IOException {

        // 字符流写出数据 FileWriter
        FileWriter fw = new FileWriter(new File("D:\\heima\\1.txt"));// 传入文件对象

        // 写出数据
        fw.write(97);
        fw.write(98);
        fw.write(99);

        // 传入字符数组
        char[] chars = {97,98,99};
        fw.write(chars);

        // 传入一个字符串数组
        String line = "jcdsahfjdsghb";
        fw.write(line);

        String line1 = "字节跳动";
        fw.write(line1,0,2);// 从0索引开始 读取两个字符

        // 释放资源
        fw.close();
    }
}

字符流输出数据注意事项

在这里插入图片描述

flush和close方法

在这里插入图片描述

字符流读取数据

在这里插入图片描述

  • 一次性读取一个字符
package com.hfut.edu.test10;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class test3 {
    public static void main(String[] args) throws IOException {

        // 创建字符输入流的对象
        FileReader fr = new FileReader(new File("D:\\heima\\1.txt"));

        // 读取数据

        int ch;
        while((ch = fr.read()) != -1){
            System.out.println((char) ch);// 强制转换成字符
        }

        // 释放资源
        fr.close();
    }
}


  • 一次性读取多个字节
package com.hfut.edu.test10;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class test4 {
    public static void main(String[] args) throws IOException {
        // 一次性读取多个字符
        // 创建对象
        FileReader fr = new FileReader(new File("D:\\heima\\1.txt"));

        // 一次性读取多个字符
        char[] chars = new char[1024];
        int len;// 每次读取的字符个数

        while((len = fr.read(chars)) != -1){
            // 写入指定个数的字符
            System.out.println(new String(chars,0,len));
        }

        fr.close();

    }
}

案例-保存键盘录入的数据

在这里插入图片描述

package com.hfut.edu.test10;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class test5 {
    public static void main(String[] args) throws IOException {
        // 将键盘录入的用户的用户名和密码保存到本地实现永久化存储
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名");
        String username = sc.next();
        System.out.println("请输入密码");
        String password = sc.next();

        // 将用户名和密码写入本地文件
        FileWriter fw = new FileWriter(new File("D:\\heima\\1.txt"));

        // 将用户名和密码写入文件中  参数传入字符串
        fw.write(username);
        fw.write("\r\n");// 添加回车换行
        fw.write(password);

        fw.close();
    }
}


字符缓冲输入流

package com.hfut.edu.test10;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class test6 {
    public static void main(String[] args) throws IOException {
        // 字符缓冲输入流
        BufferedReader br = new BufferedReader(new FileReader("D:\\heima\\1.txt"));

        // 读取数据
        char chars[] = new char[1024];
        int len;// 每次读取的字符数据

        while((len = br.read(chars)) != -1){
            System.out.println(new String(chars,0,len));// 打印输出的字符
        }
    }
}


字符缓冲输出流

package com.hfut.edu.test10;

import java.io.*;

public class test7 {
    public static void main(String[] args) throws IOException {
        // 字符缓冲输出流
        BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\heima\\1.txt"));

        // 将数据写入缓冲流
        bw.write(97);

        // 换行符
        bw.write("\r\n");

        char[] chars = {97,98,99,101};
        bw.write(chars);

        bw.flush();
        bw.close();
    }
}

缓冲流的特有方法

在这里插入图片描述

  • newLine() 换行符
package com.hfut.edu.test10;

import java.io.*;

public class test7 {
    public static void main(String[] args) throws IOException {
        // 字符缓冲输出流
        BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\heima\\1.txt"));

        // 将数据写入缓冲流
        bw.write(97);

        // 换行符
        bw.newLine();

        char[] chars = {97,98,99,101};
        bw.write(chars);

        bw.newLine();

        bw.flush();
        bw.close();
    }
}


  • readLine() 读取一整行的数据
package com.hfut.edu.test10;

import java.io.*;

public class test8 {
    public static void main(String[] args) throws IOException {
        // readline 读取一整行数据

        BufferedReader br = new BufferedReader(new FileReader("D:\\heima\\1.txt"));

        // 使用循环读取数据
        String line;// 读不到数据 返回null
        while((line = br.readLine()) != null){
            System.out.println(line);
        }

        br.close();
    }
}

案例-读取文件中的数据排序之后 写入本地

package com.hfut.edu.test10;

import java.io.*;
import java.nio.Buffer;
import java.util.Arrays;

public class test9 {
    public static void main(String[] args) throws IOException {
        // 读取文件中的数据排序之后写入本地文件
        // 首先将文件中的数据读入到缓冲流中
        BufferedReader br = new BufferedReader(new FileReader("D:\\heima\\1.txt"));

        // 文件中只有一行数据
        String line = br.readLine();
        System.out.println(line);

        // 将数据字符串 按照空格进行分割  获得数组
        String [] splits = line.split(" ");// 分割字符串数组

        // 将字符串数组 转换成整数型数组
        int[] arr = new int[splits.length];
        
        // 遍历split数组 可以进行类型转换
        for (int i = 0; i < splits.length; i++) {
            String smallStr = splits[i];
            int number = Integer.parseInt(smallStr);// 将字符串转换成 Integer对象 然后自动拆箱操作
            arr[i] = number;// 存入数组
            
        }

        // 将整数进行排序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));

        BufferedWriter bw = new BufferedWriter(new FileWriter(new File("D:\\heima\\2.txt")));

        for (int i = 0; i < arr.length; i++) {
            bw.write(arr[i] + " ");
            bw.flush();

        }


    }
}


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

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

相关文章

【算法】广度优先遍历 (BFS)

目录1.概述2.代码实现3.应用1.概述 &#xff08;1&#xff09;广度优先遍历 (Breadth First Search)&#xff0c;又称宽度优先遍历&#xff0c;是最简便的图的搜索算法之一。 &#xff08;2&#xff09;已知图 G (V, E) 和一个源顶点 start&#xff0c;宽度优先搜索以一种系…

让我用Python自制软件,看视频畅通无阻

前言 一个账号只能登录一台设备&#xff1f;涨价就涨价&#xff0c;至少还能借借朋友的&#xff0c;谁还没几个朋友&#xff0c;搞限制登录这一出&#xff0c;瞬间不稀罕了 这个年头谁还不会点技术了&#xff0c;直接拿python自制一个可以看视频的软件… 话不多说&#xff0…

终于弄懂了 非极大抑制 NMS

NMS的作用就是有效地剔除目标检测结果中多余的检测框&#xff0c;保留最合适的检测框。 以YOLOv5为例&#xff0c;yolov5模型的输入三个feature map的集合&#xff0c;加上batch的维度&#xff0c;也就是三维张量&#xff0c;即[batch&#xff0c;(p0∗p0p1∗p1p2∗p2)∗3&…

SWC步骤

纲要&#xff1a; SWC属于AUTOSAR的Component文件夹下&#xff0c;而Composition属于Composition文件夹下。 目录 1. Import "Data Type" and "Interface" information 2. Creat Software Component(SWC) 3. Create "Port" for this SWC 4.…

nexus raw 仓库代理(node-sass离线安装node-sass: Command failed)

问题背景 内网环境中使用 node 构建项目&#xff0c;项目中依赖了 node-sass&#xff0c;环境自动下载 node-saas 失败&#xff08;内网&#xff09;。 下面是构建 node-sass 的错误代码&#xff1a; [5/5] Building fresh packages... error /workspace/node_modules/node-…

nuxt概念

文章目录前言nuxt项目结构介绍网页导航文字显示&#xff08;商标&#xff09;package.jsonnuxt.config.js路由固定路由动态路由总结前言 首先了解下B2C模式&#xff0c;分前后台&#xff0c;后台一般为管理系统&#xff0c;不需要展示给过多的用户&#xff0c;而前台需要展示给…

2023年有哪些具备潜力的加密投资标的?

随着2022年一系列的黑天鹅事件&#xff08;Terra、Luna的暴雷、FTX、Three Arrows Capital等知名加密机构的破产&#xff09;&#xff0c;加密货币总市值已经从最高点的2.9万亿美元&#xff08;2021年的11月&#xff09;&#xff0c;下降到8500亿美元&#xff08;与2021年1月的…

NKOJ P7842 疫情防控

分析 这道题的本质就是找可以使得每座城市有且仅有一条道单行路进入该市的图有什么特点; 首先,我们假设图联通,则由于每个城市只有一条单行道可以进入,即一个城市必须有且仅有一条单行道与之配对,所以这个图至少要有nnn条边,即图中必须要有环才可以满足要求! 那如果图不连通…

Java多线程之读写锁ReentrantReadWriteLock类使用

在JDK中提供了一种读写锁ReentrantReadWriteLock类&#xff0c;相比ReentrantLock类&#xff0c;使用前者可以加快运行效率。ReentrantLock类是具有完全互斥排他的效果&#xff0c;即同一时间只有一个线程在执行ReentrantLock.lock()方法后面的任务&#xff0c;这样做虽然保证了…

【UE4 第一人称射击游戏】40-改变武器的可见性

上一篇&#xff1a;【UE4 第一人称射击游戏】39-“M4A1”武器设置本篇效果&#xff1a;步骤&#xff1a;打开“Weapon_M4A1”&#xff0c;删除带有“AK47”的那个骨架网格体打开事件图表&#xff0c;将“SkeletalMesh1”拖入打开“ThirdPersonCharacter”&#xff0c;在事件图表…

Docker:独具魅力的开源容器引擎

Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux 或 Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口&#…

MATLAB-控制系统模型之间的转换

系统的线性时不变&#xff08;LTI&#xff09;模型有传递函数&#xff08;tf&#xff09;模型、零极点增益&#xff08;zpk)模型和状态空间(ss&#xff09;模型,它们之间可以相互转换。模型之间的转换函数可以分为以下两类。第一类是把其他类型的模型转换为函数表示的模型自身&…

PHP多进程(一)

多进程的作用是一个程序启动多个进程。 一个程序启动起来本应该是一个进程&#xff0c;但它可作为父进程启动多个子进程来一起操作 形成并发操作 pcntl是php官方的多进程扩展,只能在linux环境使用 以下所有操作请在Linux环境下操作: 先认识两个函数,下面是官方文档地址: …

铜缆测试——近端和远端串扰(NEXT和FNEXT)

如果您非常熟悉铜缆测试&#xff0c;那么很可能听说过串扰——一对或一个通道上传输的信号对另外一对或一个通道产生不良影响的现象。(杂讯) 串扰会对具体的一对导线或整根电缆形成干扰&#xff0c;导致误码或数据无法传输。例如&#xff0c;您是否曾经在电话中听到有其他人说话…

马蹄集 数组最大公约数

给定一个由N个正整数组成的数组&#xff0c;求所有数组元素的最大公约数。 格式 输入格式&#xff1a;第一行输入数组长度N,第二行输入数组元素&#xff0c;整型 空格分隔。 输出格式&#xff1a;输出整型 #include <bits/stdc.h> using namespace std;int gcd(int a…

(十八)Java的时间与日期(2)

目录 前言: 一、JDK8新增日期类 二、LocalDate&#xff0c;LocalTime,LocalDateTime 三、Instant时间戳 四、DateTimeFormatter类 五、Duration/Period类 六、ChronoUnit类 前言: JDK 8中增加了一套全新的日期时间API&#xff0c;这套API设计合理&#xff0c;是线程安全的。新的…

ctfshow学习记录-web入门(sql注入191-200)

目录web191web192web193web194web195web196web197web198web199web200九某人来更新啦&#xff1a;2023年第一篇wp新鲜出炉&#xff5e; web191 解答&#xff1a;增加了过滤 过滤了ascii&#xff0c;可以用ord方法代替。&#xff08;这里手册中也有告知~&#xff09; web190的pa…

【数据结构与算法】Trie

&#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…

集合引用类型 下

目录 Map Map.set() Map.get() Map.delete() Map.has() Map.values() Map.entries() Map.clear() 选择Object 还是Map 数据转换 转为数组 转为 JSON 对象转为 Map 数组转为 Map 转为Object WeakMap 基本API 弱键 不可迭代 Set 创建Set实例 Set实例转数组 si…

STM32-启动文件详解

✅作者简介&#xff1a;嵌入式入坑者&#xff0c;与大家一起加油&#xff0c;希望文章能够帮助各位&#xff01;&#xff01;&#xff01;&#xff01; &#x1f4c3;个人主页&#xff1a;rivencode的个人主页 &#x1f525;系列专栏&#xff1a;玩转FreeRTOS &#x1f4ac;推荐…