java入门篇12---io操作

     2022-05-17     422

关键词:

在jiava中InputStream跟OutputStream分别代表输入流跟输出流,接下来来看一下IO的相关操作

首先来看一下如何操作文件

import java.io.File;
import java.io.FilenameFilter;
import java.nio.file.Path;
import java.nio.file.Paths;

public class HelloWorld {
    public static void main(String[] args) throws Exception {
        File f = new File("./src/text.txt");
        System.out.println(f.isFile());  // true
        System.out.println(f.getPath());  // 获取构造方法的传入路径 ./src/text.txt
        System.out.println(f.getAbsolutePath());  // 获取绝对路径 /Users/***/Desktop/demo/javaDemo/./src/text.txt
        System.out.println(f.getCanonicalPath());  // 获取规范路径 /Users/***/Desktop/demo/javaDemo/src/text.txt
        File f1 = new File("./src");
        System.out.println(f1.isFile());  // false 判断是否是文件
        System.out.println(f1.exists());  // true  判断是否存在
        System.out.println(f1.isDirectory());  // true  判断是否是文件夹
        System.out.println(f1.getName());  // src  获取名字
        // 可以自定义文件过滤方式
        File[] f2 = f1.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".xml") || name.endsWith(".txt");
            }
        });
        if (f2 != null) {
            for (File ff : f2) {
                System.out.println(ff);
            }
        }  // ./src/logback.xml  ./src/text.txt
        // Path
        Path p = Paths.get(".", "src");  // 路径拼接
        System.out.println(p.toAbsolutePath());  // /Users/****/Desktop/demo/javaDemo/./src
        File f3 = p.toFile();  // 转化为文件
        System.out.println(f3.isDirectory());  // true
    }
}

好了,文件跟路径的一些基本操作输完了,现在来看一下流输入和流输出

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class HelloWorld {
    public static void main(String[] args) throws Exception {
        // 初始化一个流
        InputStream f = new FileInputStream("./src/text.txt");
        for (; ; ) {
            int n = f.read();
            // 如果返回值为-1,证明文件读取完毕
            if (n == -1) {
                break;
            }
            System.out.println(n);
        }  // 105 32 108 111 118 101 32 99 104 105 110 97
        // 最终我们要把文件关闭,避免造成不必要的内存浪费
        f.close();
        // try finally可以在报错情况下帮我们最终关闭,但是java帮助我们提供了更简洁的写法
        try (InputStream f1 = new FileInputStream("./src/text.txt")) {
            int n;
            // 一个字节一个自己读
            while ((n = f1.read()) != -1) {
                System.out.println((char) n); // i love china
                System.out.println(n); // 105 32 108 111 118 101 32 99 104 105 110 97
            }
        }
        // 还有一种复制的方法,当然还有很多方法,但是都大同小异
        try (InputStream f1 = new FileInputStream("./src/text.txt")) {
            int n;
            byte[] b = new byte[10];
            while ((n = f1.read(b)) != -1) {
                System.out.println(b);  // [B@38af3868  10
                System.out.println(n);  // 10  2
            }
        }

        // OutputStream
        OutputStream o = new FileOutputStream("./src/text.txt");
        o.write(72); // 写入 H,原内容会被删除
        o.write(72);
        o.close();
        InputStream f3 = new FileInputStream("./src/text.txt");
        System.out.println(f3.read());  // 72
        System.out.println(f3.read());  // 72
        System.out.println(f3.read());  // -1 写入了两个字节,读出两个字节
        f.close();
        // 当然也可以一次写入多个字节
        try (OutputStream o1 = new FileOutputStream("./src/text.txt")) {
            o1.write("hello".getBytes(StandardCharsets.UTF_8));
        }
        try (InputStream f1 = new FileInputStream("./src/text.txt")) {
            byte[] b = f1.readAllBytes();
            for (byte b1 : b) {
                System.out.println((char) b1);  // hello
            }
        }
        // 读写 zip 文件
        try (ZipOutputStream zip = new ZipOutputStream(new FileOutputStream("t.zip"))) {
            File f4 = new File("./src/text.txt");
            zip.putNextEntry(new ZipEntry(f4.getName()));
            zip.write(new FileInputStream("./src/text.txt").readAllBytes());
            zip.closeEntry();
        }
        System.out.println("---");
        try (ZipInputStream zip = new ZipInputStream(new FileInputStream("t.zip"))) {
            ZipEntry ze = null;
            while ((ze = zip.getNextEntry()) != null) {
                String name = ze.getName();
                if (!ze.isDirectory()) {
                    int n;
                    while ((n = zip.read()) != -1) {
                        System.out.println((char) n);  // hello
                    }
                }
            }
        }
    }
}

读写配置文件

import java.io.*;
import java.util.Properties;

public class HelloWorld {
    public static void main(String[] args) throws Exception {
        // 读取配置文件的一种方法
        Properties p = new Properties();
        Properties p2 = new Properties();
        p.load(new FileInputStream("./src/default.properties"));
        System.out.println(p);  // {a=1, b=2}
        System.out.println(p.getProperty("a"));  // 1
        System.out.println(p.getProperty("not exist", "offer default value")); // offer default value
        // 从 classPath中读取配置信息
        p2.load(HelloWorld.class.getResourceAsStream("/default.properties"));
        System.out.println(p2);  // {a=1, b=2}
        // 写入配置
        Properties p3 = new Properties();
        p3.setProperty("user", "ning");
        p3.store(new FileOutputStream("./src/tt.propertites"), "anno for this");
        p3.load(new FileInputStream("./src/tt.propertites"));
        System.out.println(p3);  // {user=ning}
    }
}

根据字符来写入写出文件

import java.io.*;
import java.nio.charset.StandardCharsets;

public class HelloWorld {
    public static void main(String[] args) throws Exception {
        //  根据字符流读写文件
        try (Writer w = new FileWriter("./src/text.txt", StandardCharsets.UTF_8)) {
            w.write(‘h‘);  // 写入字符
            w.write("hello".toCharArray()); // 写入字符数组
            w.write("hello");  // 写入字符串
            w.write("我爱我家"); // 写入字符串
        }
        //,跟InputStream差不多,也有很多种读取方法,下面只lie了一种
        try (Reader r = new FileReader("./src/text.txt", StandardCharsets.UTF_8)) {
            int n;
            while ((n = r.read()) != -1) {
                System.out.println((char) n);
            }  // hhellohello我爱我家
        }

    }
}

java学习随笔入门篇

java之父叫JamesGoslingjava的吉祥物叫duke也叫JavaBean、我们通过编写源代码通过编译器将源码转为电脑认识的机器语言从而实现对电脑的命令代码的执行:需通过编译器將源代码编译成机器语言,因为电脑只会读懂机器语言(高电平1... 查看详情

c语言入门篇---表达式

表达式是C语言的主体。在C语言中,表达式由操作数和操作符组成。最简单的表达式可以只含有一个操作数。表达式可分为 简单表达式和复杂表达式。简单表达式:可以只含有一个操作数。复杂表达式:可以含有两... 查看详情

《java从入门到放弃》javase入门篇:单元测试

单元测试其实没什么好说的,直接看操作步骤!我们来测试前一篇的小明买食物的方法。第一步:在小明类上点右键,然后再new一个JUnitTestCase650)this.width=650;"src="https://s3.51cto.com/wyfs02/M02/A5/8D/wKioL1m_iAygNbgSAABZDwejGG4076.png"title="11.png"w... 查看详情

java入门算法(动态规划篇1:初识动规)

本专栏已参加蓄力计划,感谢读者支持❤往期文章一.Java入门算法(贪心篇)丨蓄力计划二.Java入门算法(暴力篇)丨蓄力计划三.Java入门算法(排序篇)丨蓄力计划四.Java入门算法(递归篇)丨蓄力计划五.Java入门算法(双指针... 查看详情

mybatis入门篇1---编写入门小程序

首先简单说一下为什么使用mybatis,我们上一个项目使用的JDBC,所有的sql语句都是写在java程序中,这样的就会使sql语句与java程序高度耦合,不符合我们的高内聚,低耦合情况,我们只希望你给我一个接口并且返回指定类型的程... 查看详情

java入门算法(树篇)

本专栏已参加蓄力计划,感谢读者支持❤往期文章一.Java入门算法(贪心篇)丨蓄力计划二.Java入门算法(暴力篇)丨蓄力计划三.Java入门算法(排序篇)丨蓄力计划四.Java入门算法(递归篇)丨蓄力计划五.Java入门算法(双指针... 查看详情

java入门算法(树篇)

本专栏已参加蓄力计划,感谢读者支持❤往期文章一.Java入门算法(贪心篇)丨蓄力计划二.Java入门算法(暴力篇)丨蓄力计划三.Java入门算法(排序篇)丨蓄力计划四.Java入门算法(递归篇)丨蓄力计划五.Java入门算法(双指针... 查看详情

git入门篇-----本地操作

一,git的简介  1,git的历史      概念性的知识,大家百度一下,就会出现好多优秀的文章供参考,这里我就不多说了。    如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。 ... 查看详情

docker入门基础篇(代码片段)

查看docker教学视频,请点击《狂神说java》:https://www.bilibili.com/video/BV1og4y1q7M4?p=1记得投币三连呀~~Docker学习Docker概述Docker安装Docker命令镜像命令容器命令操作命令......Docker镜像容器数据卷DockerFileDocker网络原理Idea整合DockerDockerCompose... 查看详情

java入门算法(动态规划篇2:01背包精讲)(代码片段)

...栏已参加蓄力计划,感谢读者支持❤往期文章一.Java入门算法(贪心篇)丨蓄力计划二.Java入门算法(暴力篇)丨蓄力计划三.Java入门算法(排序篇)丨蓄力计划四.Java入门算法(递归篇)丨蓄力... 查看详情

elasticsearch集群搭建---入门篇二(代码片段)

Elasticsearch(二)elasticSearch安装,基本操作,入门篇一1通过java客户端对es维护1.1工程搭建创建maven工程添加依赖,在pom.xml文件添加如下依赖:<dependencies><dependency><groupId>org.elastic 查看详情

《mongodb入门教程》第22篇聚合操作(代码片段)

本文将会介绍如何使用MongoDB聚合操作对文档进行分组,以及聚合表达式的使用。聚合操作MongoDB聚合操作可以处理多个文档并返回计算后的结果。聚合操作通常用于按照指定字段的值进行分组并计算汇总结果。例如,聚合... 查看详情

《java从入门到放弃》文章目录

...,等相关内容都写完后,再按学习顺序来整理。《Java从入门到放弃》入门篇:XMLHttpRequest的基本用法《Java从入门到放弃》入门篇:Struts2的基本访问方《Java从入门到放弃》入门篇:Struts2的基本访 查看详情

java工程师学习指南(入门篇)

Java工程师学习指南入门篇最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的... 查看详情

java工程师学习指南(入门篇)

Java工程师学习指南入门篇最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的... 查看详情

java入门篇13--多线程

多线程是java并发的基础,我们先来学习一下吧:首先,让我们来起一个多线程,看看publicclassHelloWorld{publicstaticvoidmain(String[]args)throwsException{//lambda写法Threadt=newThread(()->{System.out.println("threadstart");try{Thread.sleep(1 查看详情

rabbitmq学习一入门篇(helloworld)

简介     RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java,也是众多消息队列中表现不俗的一员,作用就是提高系统的并发性,将一些不需要及时响应客户端... 查看详情

java入门基础课程

初级篇最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的全局上进行思考和... 查看详情