每日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结束前也会发出)
}
}
}