一.IO流
1.File:文件和目录路径名的抽象表示形式
常用方法:
(1)createNewFile():创建一个文件(不是文件夹),如果指定的文件不存在并成功地创建,则返回true;如果指定的文件已经存在,则返回false
(重要)list():遍历所有目录下的文件,返回字符串数组
listFiles()
(重要)delete():删除指定的文件
getName():获取文件名称
(重要)mkDir():创建一个目录
(重要)mkDirs():创建联级目录
(重要)isDirectory():判断是否为目录
(重要)isFile():判断是否为文件
(重要)exists():判断是否存在
2.数据流(IO)
(1).输入流:用于读取数据源的数据
(2)输出流:用于把数据写入目的地.
流本质是字节序列的封装,有两种类型:
(1)字节流,是对二进制字节进行读写的对象。
主要用于读取图片,声音,视频,一般不用于文本的读取
(2)字符流,按一定编码格式以字符为单位进行操作。主要用于读取文本。
因此有4种基本的流:
(1)字节输入流,由InputStream(此抽象类是表示字节输入流的所有类的超类。)子类构建。
(2)字节输出流,由OutputStream(此抽象类是表示输出字节流的所有类的超类。)类构建,
(3)字符输入流,由Reader子类构建,
(4)字符输出流,由Writer子类构建。
3.字符流:
FileReader:字符输入流,read(),read(char[] chars),close()
BufferedReader:缓冲字符输入流,readLine(),close()
FileWriter:字符输出流,write(int c),write(Stringstr),flush(),close()
BufferedWriter缓冲字符输出流,write(),newLine(),flush(),close();
4.字节流:
FileInputStream:字节输入流
FileOutputStream:字节输出流
BufferedInputStream:缓冲字节输入流
BufferedOutputStream:缓冲字节输出流
URL:openStream(),获取字节输入流
5.对象流:
二.线程
1.进程和线程
(1)进程,是程序在计算机上的一次运行过程,进程是动态的。
(2)线程也是动态的,是比进程更小的概念,它是进程(程序运行过程)的一条执行路线。
(3)进程和线程的关系:
这副图是一个双向多车道的道路图,假如我们把整条道路看成是一个“进程”的话,那么图中由白色虚线分隔开来的各个车道就是进程中的各个“线程”了。
3.1这些线程(车道)共享了进程(道路)的公共资源(土地资源)。
3.2这些线程(车道)必须依赖于进程(道路),也就是说,线程不能脱离于进程而存在(就像离开了道路,车道也就没有意义了)。
3.3这些线程(车道)之间可以并发执行(各个车道你走你的,我走我的),也可以互相同步(某些车道在交通灯亮时禁止继续前行或转弯,必须等待其它车道的车辆通行完毕)。
3.4这些线程(车道)之间依靠代码逻辑(交通灯)来控制运行,一旦代码逻辑控制有误(死锁,多个线程同时竞争唯一资源),那么线程将陷入混乱,无序之中。
3.5这些线程(车道)之间谁先运行是未知的,只有在线程刚好被分配到CPU时间片(交通灯变化)的那一刻才能知道。
线程使用的场合:
2.创建线程有两种方式:
(1)继承Thread类:重写run()方法
(2)实现Runnable接口,实现该接口中的run()方法
启动线程调用start()方法,底层会调用run方法,线程所要执行的功能都在run方法中写
3.Thread类常用的方法:
(1)getPriority():获取线程的优先级,线程的优先级从低到高:1-10,值越大优先级越高,分配给该线程的cpu时间片段的几率就越高(执行该线程的机率就越大),创建好的线程默认优先级是5。
set Priority():设置线程的优先级
(2)getName():返回该线程的名称
setName():设置线程名称,不设置会默认设置名字
(3)getId():返回该线程的标识符,线程ID是惟一的,并终生不变。线程终止时,该线程ID可以被重新使用。
(4)setDaemon():设置守护线程(线程分为守护线程和非守护线程),特点:当只剩下守护线程时,守护线程会强制停止,因为没有了被守护者,Daemon也就没有工作可做了,也就没有继续运行程序的必要了
(5)sleep():在指定的毫秒数内让当前正在执行的线程休眠
(6)yield():暂停当前正在执行的线程对象,并执行其他线程(主动让出cpu时间片段,让其他线程运行)
(7)join():等待该线程终止。
4.锁机制:synchronized
5.线程的生命周期: