当前位置:网站首页 > Java基础 > 正文

苏州0基础java



此笔记来自于B站黑马程序员

File

创建对象

image-20241005222459829

 
  • File对象既可以代表文件、也可以代表文件夹。
  • File封装的对象仅仅是一个路径名,这个路径可以是存在的,也允许是不存在的。

image-20241005225438100

常用方法1:判断文件类型、获取文件信息

image-20241005223959659

就不演示代码了,Java 有一个很好的优势,即见名知意思

常用方法2:创建文件、删除文件

 

delete方法默认只能删除文件和空文件夹,删除文件后的文件不会进入回收站

常用方法3:遍历文件夹

 
使用 listFiles 方法时的注意事项:
  • 当主调是文件,或者路径不存在时,返回null
  • 当主调是空文件夹时,返回一个长度为0的数组
  • 当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回
  • 当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
  • 当主调是一个文件夹,但是没有权限访问该文件夹时,返回null

前置知识:方法递归

什么是方法递归?

递归是一种算法,在程序设计语言中广泛应用。

从形式上说:方法调用自身的形式称为方法递归(recursion)

递归的形式

直接递归:方法自己调用自己。

间接递归:方法调用其他方法,其他方法又回调方法自己。

使用方法递归时需要注意的问题:

递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出错误。

文件搜素

image-20241005231038801

 

苏州0基础java

前置知识:字符集

image-20241006002947388

image-20241006003403394

image-20241006003517166

image-20241006003531605

image-20241006134415217

本节要点
  • ASCI字符集:只有英文、数字、符号等,占1个字节。
  • GBK字符集:汉字占2个字节,英文、数字占1个字节。
  • UTF-8字符集:汉字占3个字节,英文、数字占1个字节。

注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码 ⚠️

注意2:英文,数字一般不会乱码,因为很多字符集都兼容了 ASCII 编码。 ⚠️

image-20241006134944825

 

IO 流

image-20241006140113709

IO 流的应用场景

image-20241006140335209

IO 流概述

image-20241006140806697

IO流-字节流

文件字节输入流:每次读取一个字节(FileInputStream)

image-20241006141529213

 
 

文件字节输入流:每次读取多个字节 (FileOutputStream)

 

文件字节输入流:一次读取完全部字节 (FileReader)

文件字节输入流:一次读取完全部字节
  • 方式一: 自己定义一个字节数组与被读取的文件大小一样大,然后使用该字节数组,一次读完文件的全部字节。
  • image-20241006145641914
 
方式二:Java官方为lnputStream提供了如下方法,可以直接把文件的全部字节读取到一个字节数组中返回。

image-20241006150532012

 
总结

image-20241006150614013

文件字节输出流:写字节出去 (FileWriter)

作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去。

image-20241006151008372

 

案例:文件复制

image-20241006152027887

 

IO流-资源释放方式

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

作用:一般用于在程序执行完成后进行资源的释放操作(专业级做法)。

 
 

image-20241006160922550

JDK7 开始提供了更简单的资源释放方案:try-with-resource

image-20241006161003253

该资源使用完毕后,会自动调用其 close()方法,完成对资源的释放!

 
 
  • () 中只能放置资源,否则报错
  • 什么是资源呢?
  • 资源一般指的是最终实现了 AutoCloseable 接口。
  • public abstract class InputStream implements Closeable { }
  • public abstract class OutputStream implements Closeable, Flushable { }
  • public interface Closeable extends AutoCloseable { }

IO 流-字符流(字节流:适合复制文件等,不适合读写文本文件)

文件字符输入流(FileReader)-读字符数据进来

image-20241006162637865

image-20241006162730811

 

文件字符输出流(FileWriter)-写字符数据出去

image-20241006163819987

image-20241006163900254

 
字符输出流写出数据后,必须刷新流,或者关闭流,写出去的数据才能生效 ⚠️

image-20241006165421514

IO 流-缓冲流

image-20241006170037134

字节缓冲流

提高字节流读写数据的性能

image-20241006170415695

image-20241006170630810

 

字符缓冲流

字符缓冲输入流(BufferedReader)

作用:自带 8K(8192)的字符缓冲池,可以提高字符输入流读取字符数据的性能。

image-20241006171450175

 
字符缓冲输出流(BufferedWriter)

image-20241006172337012

 

原始流、缓冲流的性能分析[重点]

测试用例:

分别使用原始的字节流,以及字节缓冲流复制一个很大视频。

测试步骤:
使用低级的字节流按照一个一个字节的形式复制文件。
使用低级的字节流按照字节数组的形式复制文件。
使用高级的缓冲冲字节流按照一个一个字节的形式复制文件。
使用高级的缓冲字节流按照字节数组的形式复制文件。
 

IO 流-转换流

  • 如果代码编码和被读取的文本文件的编码是一致的,使用字符流读取文本文件时不会出现乱码!
  • 如果代码编码和被读取的文本文件的编码是不一致的,使用字符流读取文本文件时就会出现乱码!
引出问题:不同编码读取时会乱码

image-20241006182332362

字符输入转换流 (InputStreamReader)

解决思路:先获取文件的原始字节流,再将其按真实的字符集编码转成字符输入流,这样字符输入流中的字符就不乱码了。

image-20241006193522774

 

字符输出转换流(OutputStreamWrite)

image-20241006194807562

  • 解决思路:获取字节输出流,再按照指定的字符集编码将其转换成字符输出流,以后写出去的字符就会用该字符集编码了。

image-20241006195948045

IO 流-打印流

image-20241006200704131

作用:打印流可以实现更方便、更高效的打印数据出去,能实现打印啥出去就是啥出去。

image-20241006201027313

 

PrintWriter

image-20241006201842873

PrintStream 和 PrintWriter 的区别
  • 打印数据的功能上是一模一样的:两者都是使用方便,性能高效 (核心优势)
  • PrintStream 继承自字节 输出流OutputStream,因此支持写字节数据的方法。
  • PrintWriter 继承自字符 输出流Writer,因此支持写字符数据出去。
 

image-20241006203148059

IO 流-数据流

image-20241006204604982

image-20241006204433348

image-20241006204756408

 
 

IO 流-序列化流

  • 对象序列化:把Java对象写入到文件中去
  • 对象反序列化:把文件里的java对象读出来

image-20241006211813361

可以把 Java 对象进行序列化:把 Java 对象存入到文件中去

注意:对象如果要参与序列化,必须实现序列化接口(java.io.Serializable)

image-20241006212130859

 

ObjectlnputStream(对象字节输入流)

可以把 Java 对象进行反序列化:把存储在文件中的 Java 对象读入到内存中来。

image-20241006213242956

 

transient 这个成员变量将不参与序列化

image-20241006214212793

补充知识::IO 框架

什么是框架?
  • 解决某类问题,编写的一套类、接口等,可以理解成一个半成品,大多框架都是第三方研发的。
  • 好处:在框架的基础上开发,可以得到优秀的软件架构,并能提高开发效率。
  • 框架的形式:一般是把类、接口等编译成class形式,再压缩成一个.jar结尾的文件发行出去。

image-20241006214527615

什么是 IO 框架
  • 封装了 Java 提供的对文件、数据进行操作的代码,对外提供了更简单的方式来对文件进行操作,对数据进行读写等。
Commons-io

Commons-io 是 apache开源基金组织 提供的一组有关 lO操作 的小框架,目的是 提高lO流 的开发效率。

image-20241006214655003

image-20241006215007477

建议用 Maven, 导入依赖就是爽啊.

版权声明


相关文章:

  • 以java为基础的产品2024-11-11 23:10:06
  • java基础100道小程序2024-11-11 23:10:06
  • 零基础蓝桥杯java2024-11-11 23:10:06
  • 没有java基础类库2024-11-11 23:10:06
  • java基础简单计算器2024-11-11 23:10:06
  • 学习前端需要java基础学习吗2024-11-11 23:10:06
  • 蓝桥杯基础练习矩阵乘法java2024-11-11 23:10:06
  • 韩顺平0基础学java2024-11-11 23:10:06
  • 基础工资java杭州2024-11-11 23:10:06
  • java程序基础接单2024-11-11 23:10:06