当前位置: 首页 > news >正文

小白学习java第12天(下):IO流之字符输入输出

其实对于前面的字节输入输出流有一个缺陷(最后一个图片复制例子是规范的),就是写的不够规范,为什么呢就是我们需要关闭资源,不能一直让这个流占用资源,因此我们需要两种结构无论代码中间段是不是出错,都需要执行最后一个关闭资源的流程(下面介绍一下两种方法!)

try-catch-finally(专业方法,但是感觉有点臃肿):

package IoDemo;

import java.io.*;

public class Test01 {
    public static void main(String[] args)  {
        //首先你要进行传输数据,你需要进行连接管道的创建
        InputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream("src\\IoDemo\\node.txt");
            File file = new File("src\\IoDemo\\node.txt");
            long size = file.length();

            byte[] buffer = new byte[(int) size];//这里就给我了一些警告,要是真的太大了也没办法进行处理
            int len = fileInputStream.read(buffer);

            System.out.println(new String(buffer, 0, len));
            System.out.println(size);
            System.out.println(len);
            
        } catch (Exception e) {
            throw new RuntimeException(e);
        }finally {
            //为了避免空指针,就是你需要判断不为null才关闭
            if (fileInputStream != null){
                try {
                    fileInputStream.close();//关闭资源
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}

try-with-catch(根据简约):上述其实释放资源的时候会显得很麻烦,如果我们事先定义好需要释放的资源后,那就不需要对其finally释放资源了:try(里面写你需要进行释放的流对象,占用的资源)-catch

package IoDemo;

import java.io.*;

public class Test01 {
    public static void main(String[] args)  {
        //首先你要进行传输数据,你需要进行连接管道的创建
        try (
                InputStream  fileInputStream = new FileInputStream("src\\IoDemo\\node.txt");
                ){
            File file = new File("src\\IoDemo\\node.txt");
            long size = file.length();

            byte[] buffer = new byte[(int) size];//这里就给我了一些警告,要是真的太大了也没办法进行处理
            int len = fileInputStream.read(buffer);

            System.out.println(new String(buffer, 0, len));
            System.out.println(size);
            System.out.println(len);

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

【那么就需要对其进行注意就是,你怎么判断这个是不是资源(查看他是不是继承AutoCloseable接口就行),是资源才会放进去try()里面】

字符流:

(读写文本内容)--前面我们知道字节流是比较适合复制文件的,但是对于读取文件内容是不好的!(对于英文来说一个字符占用一个字节,汉字来说就是一个字符占用三个字节

字符输入流:(硬盘写入到内存中)

package IoCharDemo;

import java.io.FileNotFoundException;
import java.io.FileReader;

public class Test01 {
    public static void main(String[] args) {
        try (
                //首先我们还是创建输入管道
                FileReader fileReader = new FileReader("src\\IoCharDemo\\note01.txt")
        ){
            System.out.println("-----------方案1------------");
            //一次只读一个字符这样循环的调用是很浪费资源的!
//            int c;
//            while ((c = fileReader.read()) != -1){
//                System.out.print((char)c);
//            }
            System.out.println("-----------方案2------------");
            //这次就创建一个字符数组进行作为桶
            char[] buffer = new char[3];
            int len;
            while ((len = fileReader.read(buffer)) != -1){
                System.out.print(new String(buffer,0,len));
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

字符输出流:(内存中写到硬盘中):

package IoCharDemo;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Arrays;

public class Test02 {
    public static void main(String[] args) {
        try (
                Writer fileWriter = new FileWriter("src\\IoCharDemo\\note02.txt",true);//后面有true就是追加
                ){
            //写一个字符
            fileWriter.write('a');
            fileWriter.write('6');
            fileWriter.write('好');
            fileWriter.write("\r\n");

            //字符串
            fileWriter.write("我爱你中国!");
            fileWriter.write("我爱你中国!",0,3);
            fileWriter.write("\r\n");

            //字符数组
            char[] buffer = {'我','d','2'};
            fileWriter.write(buffer);
            fileWriter.write(buffer,0,2);
            fileWriter.write("\r\n");


        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

这里需要注意就是你必须关闭流,才能对文件里面进行写入数据!,输入数据是不需要,因为内存对于硬盘来很快,所以从硬盘到内存的输入操作不要关闭资源,但是对于内存到硬盘来说,硬盘太慢了不能让内存等他吧!,所以就需要个缓存池进行,等到资源关闭后,一起写入文件里面

相关文章:

  • 联影医疗智能体 重构医疗新范式
  • 【物联网】PWM控制蜂鸣器
  • aosp13增加摄像头控制功能实现
  • C#MVC项目引用Swagger的详细步骤
  • C++指针(二)
  • DAOS系统架构-组件
  • Mamba原理及在low-level vision的工作[持续更新]
  • 14-大模型微调和训练之-Hugging Face 模型微调训练(基于 BERT 的中文评价情感分析(二分类))
  • opencv-python基础
  • 如何让老电脑运行快些(极限榨干老电脑硬件)
  • 傅利叶发布首款开源人形机器人N1:开发者可实现完整复刻
  • 科普:关系图谱中的网络特征如何输入到模型中?
  • 华为RH2288H V3服务器极速重装:从RedHat到openEuler 24超详细重装指南
  • 2025ArkTS基础UI(一)——Column、Row、Text、Button组件
  • 主服务器和子服务器之间通过NFS实现文件夹共享
  • 【数据结构】集合框架、时间复杂度和空间复杂度
  • 同时打开多个Microchip MPLAB X IDE
  • JAVA虚拟机(JVM)学习
  • vue 实战:百度音乐项目
  • 网络机顶盒OTT业务HTTPS网络包分析:Wireshark抓包与解析技术指南
  • 做soho 怎么建立网站/个人网页设计制作网站模板
  • 车公庙网站建设/专业seo网站优化推广排名教程
  • 柳州做网站的公司/推广排名seo
  • 网站仿站建设/发布外链的平台有哪些
  • 公司做网站之前要准备什么软件/如何线上推广引流
  • 做网站多少钱一个/网站搜索优化价格