LOADING

加载过慢请开启缓存 浏览器默认开启

2023/11/12

每日0题+java学习

鸽了几天blog,重振旗鼓

速通了下java集合,现在学到javaIO了,这周打算把IO和多线程学完,之后开始学后端相关了

package java_io;

import javax.imageio.IIOException;
import java.io.*;

public class io_learning {
    public static void main(String[] args) throws IOException {
        //Reader和Writer本质上是一个能自动编解码的InputStream和OutputStream。
        //同步IO是指,读写IO时代码必须等待数据返回后才继续执行后续代码,它的优点是代码编写简单,缺点是CPU执行效率低。
        //而异步IO是指,读写IO时仅发出请求,然后立刻执行后续代码,它的优点是CPU执行效率高,缺点是代码编写复杂。

        File f=new File("./src/java_stl/use_property.java");   //注意这里.返回的是项目文件夹,就很奇怪,以后使用./相对路径要先看看他代表的到底是哪个文件夹nnd
        System.out.println(f.getAbsolutePath()+"\n"+f.getPath()+"\n"+f.getCanonicalPath()); //分别返回绝对路径、填写路径和规范路径(去掉..和.
        System.out.println(f.isFile());  //判断该文件是否是一个已经存在的文件
        //System.out.println(f.createNewFile()); 当前文件存在则创建失败,返回false
        File f_l=new File("./src/java_learning/");
        File[] f2=f_l.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".java");
            }
        });
        for(var i:f2){
            System.out.println(i.getPath());
        }
        try (InputStream input=new FileInputStream(f.getPath())){  //try语句后面跟着resource参数,如果有实现close方法,就会在最后加上finally{input.close}
            byte[] buffer=new byte[1024];
            int n;
            while ((n=input.read(buffer))!=-1){  //input.read()方法自动读取文件中的字节数据且以 整数编码形式 返回,每读入一字节文件指针就会往后移动一个,直到遇到-1结束
                //这里已经改成了read(buffer)方法,使用buffer数组作为缓存区,read(buffer)会一次性读取数组大小的数据字节,有数据则会返回读取到的字节数,没数据则会返回-1
                System.out.println(n);
            }

        }
        try (InputStream input=new FileInputStream(f.getPath())){
            StringBuilder sb=new StringBuilder();
            int n;
            while ((n=input.read())!=-1){
                sb.append((char)n);  //将整型编码强制转为字符
            }
            String sb_string=sb.toString();
            System.out.println(sb_string);
        }
        /*
        output.write(72); // H
        output.write(101); // e
        output.write(108); // l
        output.write(108); // l
        output.write(111); // o
        output.close();
        */
         try(OutputStream output=new FileOutputStream("Readme.md")){  //调用try自动关闭
             output.write("Hello java!".getBytes());
             output.flush(); //OutputStream也有缓存区,并且是默认实现的,类似一个byte[]数组,存满了才发出去,但是flsuh可以提前发出(close结束前也会发出)
         }
    }

}