Java SE 学习笔记-Day 06

正则表达式(Regular Expression)

按照一定规则匹配字符串的字符串。

普通字符

包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。

注意大小写,大写表示取反,\d则表示除数字以外的

  • +:代表前面的子表达式必须至少出现一次(1次或多次)

  • *:代表前面的子表达式出现0...n次

  • ?:代表前面的子表达式出现0次或1次,也表示非贪婪模式

    • 贪婪模式:尽可能匹配字符多的符合条件的字符串
    • 非贪婪模式:即匹配尽可能少的满足条件的字符串
  • ():选定一个子表达式,可以用|隔开

  • ^:表示一行字符串以其之后的字符串开头

  • $:表示一行字符串以其之前的字符串结尾

  • {}:限定之前子表达式出现的数量

    • {n}:之前子表达式出现n次
    • {n,}:之前子表达式至少出现n次
    • {m,n}:之前子表达式出现m-n次
  • \b:从一个单词的边界(开头还是结尾要看\b放的位置)开始匹配

  • \B:表示非单词边界匹配,即不匹配字符出现在开头和结尾的字符串

  • | : 两项中的一项

  • .: 匹配除了\n\r换行符之外的任何一个字符,相等于 [^\n\r]

  • \s:匹配多个空格

  • \d :匹配多个数字

  • \w: 匹配大小写字母和下划线,等价于 [A-Za-z0-9_]

  • []:表示一个集合,匹配其中的字符,注意方框里面的都是取并集的,所以[\s\S]表示匹配所有字符

  • [^ ]:表示匹配除集合中的字符以外的字符

  • [ - ]:表示两数字或字符中间省略的字符

特殊字符(元字符)

对于一些已经代表特殊含义的字符,为了匹配他们,要在元字符前面加上\,才能匹配它。如*$()+[?\^{|

单行模式:将整个文本看作一个字符串,只有一个开头,一个结尾

多行模式:将一行看作一个独立的字符串

捕获组

()会将内部的表达式匹配到的字符都缓存下来,并且之后可以通过\num进行引用。有时不得不使用(),但又不需要后续引用时,可以使用(?:Expression)避免缓存。

预搜索(零宽断言)

零宽:表示匹配的是位置,而不是一个具体的字符

(?=expression):匹配某个以expression结尾,但选中的内容要匹配括号以前的内容

(?!=expression):匹配某个不以expression结尾的

?<=expression:匹配某个以expression开头
?<!expression:匹配某个不以expression开头

容器、集合

所有集合类都位于 java.util 包下。Java的集合类主要由两个接口派生而出:Collection 和 Map,Collection 和 Map 是 Java 集合框架的根接口,这两个接口又包含了一些子接口或实现类。

image-20210310195347960

  • Collection : 是一个接口
  • Set接口:存放的元素没有顺序,只是单纯的集合,所以不能有重复的元素,不可以根据元素的索引来访问,只能根据元素本身来访问。
  • List接口:存放的元素有顺序,可以有重复的元素,可以根据元素的索引来访问。
  • Map接口:存放一对映射的值,可以通过关键字查找,可以根据元素的索引来访问。

泛型

即将类型参数化,像传递具体变量一样,传递类型。

泛型方法

泛型方法同正常方法一样,只是可以在方法返回值之前用方括号<>括住要接受的参数标识符,如< T >,多个参数标识符,可以用逗号隔开。

  • 可以对传入的类型做一个限定,规定只能是某类的子类的。例如<T extends Number>,只能是传入和数字相关的类型。
  • 注意类型参数只能代表引用型类型,不能是原始类型(像 int,double,char 等)
public static <T extends Comparable<T>> T max(T a, T b) {
    if (a.compareTo(b) > 0) {
        return a;
    } else return b;
}
泛型类

在类名后使用<>接受类型参数,在类当中,可以使用。

IO 流

I即InputStream/Reader ,O即OutputStream/Writer。流即是一组有顺序的,单向的,有始有终的数据集合。

字节流和字符流

按照流当中的最小数据单元分为字节流字符流

  • 字节流:以1byte作为一个数据单元,可以处理图片、视频等任何类型数据。抽象类是InputStream/OutputStream。
  • 字符流:以一个字符(1char)作为一个数据单元,只能处理字符类型的数据。Java采用Unicode编码,一个字符占用两个字节。抽象类是Reader/Writer。

流式部分

Java在字节流和字符类抽象基类的基础上,针对不同应用场景和功能派生出了许多子类,用来满足文件、网络、管道等不同场景的IO需求,从而形成了IO体系。

非流式部分

主要包含一些辅助流式部分的类,如: SerializablePermission 类、File 类、RandomAccessFile 类和 FileDescriptor 等

阻塞型IO与非阻塞型IO(NIO)
  • 阻塞性IO当读取数据时,如果数据未到达,将会一直等待直到读取到数据为止,在高并发的情况下性能不佳。
  • NIO没有采用“流”的方式来处理数据,而是采用通道,通道的数据是双向的,且是异步的,不会引起阻塞。
Java流操作的相关类或接口:

File -- 文件类

RandomAccessFile -- 随机存储文件类

InputStream -- 字节输入流

OutputStream -- 字节输出流

Reader -- 字符输入流

Writer -- 字符输出流

字符流与字节流的转换

转换流的特点实现字节流与字符流的相互转换。

1、InputStreamReader:字节到字符的桥梁。

2、OutputStreamWriter:字符到字节的桥梁。

File类

File类的对象是文件或目录的路径名的抽象表示。File类保存文件或目录的各种数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名、判断文件是否存在、获取当前目录中的文件列表、创建、删除文件和目录等方法。但File类并没有保存内容,也不能通过File进行读写文件。

File对象是不可变的; 也就是说,一旦创建,由File对象表示的抽象路径名永远不会改变。

文件系统分隔符

Windows系统使用反斜杠\,Linux系统使用正斜杠/,为了统一,Java使用File.separator来统一。

  • 注意在路径字符串中,windows上要使用'"\\"

获取当前工作目录

String  workingDir = System.getProperty("user.dir");

常用文件操作

创建

  • createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false。

  • mkdir() 在指定位置创建一个单级文件夹。父目录存在才能创建。
    mkdirs() 在指定位置创建一个多级文件夹。若父目录不存在就创建父目录

  • renameTo(File dest) 如果目标文件与源文件是在同一个路径下,那么renameTo的作用是重命名, 如果目标文件与源文件不是在同一个路径下,那么renameTo的作用就是剪切,而且还不能操作文件夹。

    File对象是不可变的; 也就是说,一旦创建,由File对象表示的抽象路径名永远不会改变。所以renameTo重命名实际是用新创建的对象

删除

  • delete() 删除文件或者一个空文件夹,不能删除非空文件夹,马上删除文件,返回一个布尔值。

  • deleteOnExit() jvm退出时删除文件或者文件夹,用于删除临时文件,无返回值。

判断

  • exists() 文件或文件夹是否存在。

  • isFile() 是否是一个文件,如果不存在,则始终为false。

  • isDirectory() 是否是一个目录,如果不存在,则始终为false。

  • isHidden() 是否是一个隐藏的文件或是否是隐藏的目录。

  • isAbsolute() 测试此抽象路径名是否为绝对路径名。

获取:

  • getName() 获取文件或文件夹的名称,不包含上级路径。
  • getAbsolutePath() 获取文件的绝对路径,与文件是否存在没关系
  • length() 获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。
  • getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
  • lastModified()获取最后一次被修改的时间。

文件夹相关

  • static File[] listRoots()列出所有的根目录(Window中就是所有系统的盘符)
  • list() 返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。返回String []
  • listFiles() 返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。
  • list(FilenameFilter filter)返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
  • listFiles(FilenameFilter filter)返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null
InputStream类

FileInputStream,ByteArrayInputStream和PipedInputStream,FilterInputStream的具体类。

常用方法

ID 方法/说明
1 read() 读取一个字节并将读取的字节作为int返回。 当到达输入流的结尾时,它返回-1。
2 read(byte[] buffer) 读取最大值直到指定缓冲区的长度。 它返回在缓冲区中读取的字节数。 如果到达输入流的结尾,则返回-1。
3 read(byte [] buffer,int offset,int length) 读取最大值到指定长度字节。 数据从偏移索引开始写入缓冲区。 它返回读取的字节数或-1,如果到达输入流的结束。
3 close() 关闭输入流
4 available() 返回可以从此输入流读取但不阻塞的估计字节数。
FileInputStream 类

该流用于从文件读取数据。

构造方法

  • 直接使用文件名 字符串
 InputStream f = new FileInputStream("C:/java/hello");
  • 使用File文件对象
File f = new File("C:/java/hello");
InputStream out = new FileInputStream(f);

操作方法

序号 方法及描述
1 public void close() throws IOException{} 关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。
2 protected void finalize()throws IOException {} 这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。
3 public int read(int r)throws IOException{} 这个方法从 InputStream 对象读取指定字节的数据。返回为整数值。返回下一字节数据,如果已经到结尾则返回-1。
4 public int read(byte[] r) throws IOException{} 这个方法从输入流读取r.length长度的字节。返回读取的字节数。如果是文件结尾则返回-1。
5 public int available() throws IOException{} 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。
FileOutputStream

该类用来创建一个文件并向文件中写数据。该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。

构造方法

  • 直接使用文件名 字符串
OutputStream f = new FileOutputStream("C:/java/hello")
  • 使用File文件对象
File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);
序号 方法及描述
1 public void close() throws IOException{} 关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。
2 protected void finalize()throws IOException {} 这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。
3 public void write(int w)throws IOException{} 这个方法把指定的字节写到输出流中。
4 public void write(byte[] w) 把指定数组中w.length长度的字节写到OutputStream中。
FileReader类

按字节流的方式读取文件

FileWriter类

按字符向流中写入文件

posted @ 2021-03-11 01:36  蓬飞  阅读(62)  评论(0)    收藏  举报