首页 > 其他分享 >IO流

IO流

时间:2024-03-11 15:47:50浏览次数:20  
标签:IO static io import new public String

File

File是Java.io.包下的类,File类的对象用于代表当前操作系统的文件/文件夹。File类只能对文件本身进行操作,不能读写文件里面存储的数据。

  • 递归
/**
 * @author Pickle
 * @version V1.0
 * @date 2024/3/11 9:22
 */
public class demo {
    private static int lastBottleNumber;
    private static int totalNumber;
    private static int lastCoverNumber;
    public static void main(String[] args) {
        buy(10);
        System.out.println("可购买总数:"+totalNumber);
        System.out.println("剩余瓶子数量"+lastBottleNumber);
        System.out.println("剩余瓶盖数量"+lastCoverNumber);
    }
    public static void buy(int money){
        //先买了再说
        int buyNumber = money / 2;
        totalNumber += buyNumber;
        money %= 2;
        //增加了多少瓶盖和瓶子
        lastBottleNumber += buyNumber;
        lastCoverNumber += buyNumber;
        //瓶子换钱
        money += (lastBottleNumber / 2) * 2;
        lastBottleNumber %= 2;
        //瓶盖换钱
        money += (lastCoverNumber / 4) * 2;
        lastCoverNumber %= 4;
        if (money >= 2) buy(money);
    }
}

  • 案例
import java.io.File;
import java.io.IOException;

/**
 * @author Pickle
 * @version V1.0
 * @date 2024/3/11 8:58
 */
public class FileSearchDemo {
    public static void main(String[] args) throws IOException {
        searchFile(new File("D:/QQ"), "QQ.exe");
    }

    /**
     * 查找指定文件
     * @param dir 目录
     * @param fileName 文件名字
     */
    public static void searchFile(File dir, String fileName) throws IOException {
        if (dir == null || !dir.exists() || dir.isFile()){
            return;
        }
        //获取目录下的一级文件对象
        final File[] files = dir.listFiles();
        if (files != null && files.length > 0){
            for (File file : files) {
                if (file.isFile()){
                    if (file.getName().contains(fileName)){
                        System.out.println(file.getAbsolutePath());
                        final Runtime runtime = Runtime.getRuntime();
                        runtime.exec(file.getAbsolutePath());
                    } 
                }else {
                    searchFile(file, fileName);
                }
            }
        }
    }
}

字符集

Java的编码和解码

import java.io.UnsupportedEncodingException;
import java.util.Arrays;
/**
 * @author Pickle
 * @version V1.0
 * @date 2024/3/11 9:52
 */
public class CodeDemo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String data =  "a我b";
        //默认是按照平台字符集(UTF-8)进行编码的
        final byte[] bytes = data.getBytes("GBK");
        System.out.println(Arrays.toString(bytes));
        //解码
        String str = new String(bytes,"GBK");
        System.out.println(str);
    }
}

IO流

IO总体四大流

  • 字节输出流
  • 字节输入流
  • 字符输出流
  • 字符输入流

字节流

FileInputStream

文件字节输入流



读取所有内容,不需要自己设置buffer大小

FileOutputStream

文件字节输出流

  • 案例:文件复制

字节流适合做一切文件的复制工作

字符流

字符流更是和读取文本

FileReader

image-20240311113729100

image-20240311114257571

FileWriter

image-20240311115759994

字符输出流写出数据后,必须刷新流,或者关闭流,写出取得数据才能生效,底层原理就是延迟写,减少向硬盘写数据的次数

释放资源的两种方式

  • try-catch-finally

finally代码区的特点:无论try中的程序是正常执行还是出现异常,最后都一定会执行finally区,除非JVM终止


打印

终止虚拟机

打印

在finally中不要使用return语句

  • try-with-resource

始于JDK7,finally释放代码过于臃肿

缓冲流

  • 字节缓冲输入流
  • 字节缓冲输出流
  • 字符缓冲输入流
  • 字符缓冲输出流

作用:对原始流进行包装,以提高原始流读写数据的性能

image-20240311130420416

字节缓冲流

原理

image-20240311130702403

import java.io.*;
/**
 * @author Pickle
 * @version V1.0
 * @date 2024/3/11 13:08
 */
public class BufferedInputStreamDemo {
    public static void main(String[] args){
        try (
                InputStream is = new FileInputStream("src/File1.txt");
                InputStream bis = new BufferedInputStream(is);
                OutputStream ops = new FileOutputStream("src/File2.txt");
                OutputStream bops = new BufferedOutputStream(ops);
                ){
            byte[] buffer = new byte[1024];
            int len;
            while((len = bis.read(buffer)) != -1){
                bops.write(buffer,0,len);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

字符缓冲流

作用:对原始流进行包装,以提高原始流读写数据的性能

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.Reader;
/**
 * @author Pickle
 * @version V1.0
 * @date 2024/3/11 13:47
 */
public class BufferReaderDemo {
    public static void main(String[] args) {
        try (
                Reader fr = new FileReader("src/File1.txt");
                BufferedReader br = new BufferedReader(fr);
                ){
//            char[] buffer = new char[3];
//            int len;
//            while((len = br.read(buffer)) != -1){
//                System.out.print(new String(buffer, 0, len));
            String line;
            while((line = br.readLine()) != null){
                System.out.println(line);
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

案例:恢复原来的顺序

image-20240311140951042

转换流

字符输入转换流

控制读取特定格式的字符流

image-20240311144838878

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
/**
 * @author Pickle
 * @version V1.0
 * @date 2024/3/11 14:59
 */
public class InputStreamReaderDemo {
    public static void main(String[] args) {
        try (
                FileInputStream fs = new FileInputStream("src/File1.txt");
                final InputStreamReader isr = new InputStreamReader(fs,"GBK");
                final BufferedReader br = new BufferedReader(isr);
        ) {
            final String s = br.readLine();
            System.out.println(s);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

字符输出转换流

控制字符输出的格式

image-20240311150617528

打印流

  • PrintStream
  • PrintWriter

数据流

DataOutputStream(数据输出流)

允许把数据和其他类型一并写出去

字节输出流

DataInputStream(数据输入流)

序列化流

实现Serializable

  • ObjectInputStream

  • ObjectOutputStream

Commons-io

标签:IO,static,io,import,new,public,String
From: https://www.cnblogs.com/poteitoutou/p/18066189

相关文章

  • redis自学(15)IO多路复用
     无论是阻塞IO还是非阻塞IO,用户应用在一阶段都需要调用recvfrom来获取数据,差别在于无数据时的处理方案: 如果调用recvfrom时,恰好没有数据,阻塞IO会使进程阻塞,非阻塞IO使CPU空转,都不能充分发挥CPU的作用。 如果调用recvfrom时,恰好有数据,则用户进程可以直接进入第二阶段,读取并......
  • sio风扇转速
    TemperatureLimitofOFF,TemperatureLimitofStart,TemperatureLimitofFULL,FanStartPWM,SlopePWM2。HardwareHealthConfigurationCPUFanModeSetting(CPU风扇设置)可选1:FullOnmode2:PWMManuallymode3:Automaticmode一、全速模式二、软件模式三、自动模式 ......
  • VMware Workstation安装+彻底卸载教程(Windows版)
    VMwareWorkstation是一款虚拟机软件,它允许你在一台电脑上创建并运行多个虚拟操作系统。就像在一台电脑上同时运行多个计算机一样,你可以在VMwareWorkstation中创建虚拟计算机,安装不同的操作系统(如Windows、Linux等),并在它们之间轻松切换。这对普通用户来说,就好像在电脑上开设了多......
  • HarmonyOS-安装篇(DevEco Studio)
    一、下载可通过官网下载:https://developer.harmonyos.com/cn/develop/devevo-studio二、安装(经过实践了)          三、配置•nodejs&ohpm配置  •SDK配置      •等待(这块还是稍微有点慢,不要焦急......
  • location /abc/ 和location /abc 有什么区别
    在Nginx的location指令中,路径规则末尾是否带斜杠/会影响匹配的行为。下面是/abc/和/abc两种情况的区别:location/abc/:这种配置会匹配以 /abc/ 开头的路径,例如 /abc/xyz 或 /abc/123。这个配置会匹配以 /abc/ 结尾的路径,但不会匹配 /abc(没有斜杠结尾)。nginx......
  • 【Spring】BeanDefinition 深入了解
    1 前言今天想细细研究下BeanDefinition,至于为什么,主要是看了很多遍,没太关注mergedBeanDefinition所以比较好奇,它是干啥的呢?所以得先搞清BeanDefinition,开整。2 源码分析我们得先知道BeanDefinition在Spring这个大框架下是个什么位置。我的理解它就类似于Java中的......
  • 使用 Docker 部署 Fiora 在线聊天室平台
    一、Fiora介绍Fiora简介Fiora是一款开源免费的在线聊天系统。GitHub:https://github.com/yinxin630/fioraFiora功能注册账号并登录,可以长久保存你的数据加入现有群组或者创建自己的群组,来和大家交流和任意人私聊,并添加其为好友多种消息类型,包括文本/表情/图片/......
  • Vue项目中封装axios统一管理http请求
    <divid="content_views"class="markdown_viewsprism-tomorrow-night"><svgxmlns="http://www.w3.org/2000/svg"style="display:none;"><pathstroke-lineca......
  • Pacing guide is based on five 50 minute class sessions per week
    Pacingguideisbasedonfive50minuteclasssessionsperweekcorecontent     corecontent     capstone     explorations     optionalcontent     WEEK1 Session1Session2Session......
  • Augmentation-Free Self-Supervised Learning on Graphs论文阅读笔记
    Abstract我们认为,如果没有精心设计的增强技术,图上的扩充可能会任意的做出表现,因为图的底层语义会极大地变化。因此,现有的基于增强的方法的性能高度依赖于增强方案的选择,即与增强相关的超参数。在本文中,我们提出了一种新的无增强图自监督学习框架,即AFGRL。具体地说,我们发现通过与......