2.1、线程池
理解为容器,装有预先创建好的线程,执行任务。执行后归还给线程池等待下次分配任务。为了降低程序的开销:频繁的创建和销毁线程对象,降低程序的性能。
目的:提高线程对象的复用性。
使用:
//1.创建一个固定数量的线程池:
ExecutorServicees=Executors.newFixedThreadPool(3);
//第2种:创建一个线程池对象:里面有对应的线程对象
ExecutorServicees=Executors.newCachedThreadPool();
示例代码:
//step1:创建一个线程池对象:里面存放一些线程
//第1种:这种线程池中的线程的数量是固定的:由参数来指定
//t1,t2,t3
ExecutorService es = Executors.newFixedThreadPool(3);
//第2种:创建一个线程池对象:里面有对应的线程对象
ExecutorServicees=Executors.newCachedThreadPool();
//step2:创建任务,Runnable接口的实现
Taskt1=newTask();
Taskt2=newTask();
Taskt3=newTask();
Taskt4=newTask();
Taskt5=newTask();
//step3:提交任务:将任务提交给线程池,分配线程对象执行任务对应的run()
es.submit(t1);//将t1这个任务提交给es线程池
es.submit(t2);//将t1这个任务提交给es线程池
es.submit(t3);//将t1这个任务提交给es线程池
es.submit(t4);//将t1这个任务提交给es线程池
es.submit(t5);//将t1这个任务提交给es线程池
2.2、File文件类
文件类File类:java.io包的。
File类的构造方法:
File(Stringpathname) ;//C:\Ruby\pro\aa.jpeg
通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
File(Stringparent,Stringchild) ;//parent:C:\Ruby\pro,child:aa.jpeg
从父路径名字符串和子路径名字符串创建新的File实例。
File(Fileparent,Stringchild)
从父抽象路径名和子路径名字符串创建新的File实例。
新建文件或文件夹
1、createNewFile()--->boolean
通过File类对象来调用,创建该对象所对应的目录文件。
如果返回true,创建成功,否则就是创建失败。
如果文件已经存在,无法创建成功
但是如果文件所在的文件夹都没有,无法创建成功
2、booleanmkdir()
创建由此抽象路径名命名的目录,仅创建一层。
如果文件夹已经存在,那么创建失败
3、booleanmkdirs() ;//厉害
创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
4、booleanrenameTo(Filedest)
重命名由此抽象路径名表示的文件
可以重命名,还可以剪切
删除文件或文件夹
1、booleandelete()
删除由此抽象路径名表示的文件或目录。
如果文件不存在,删除失败
还可以删除文件夹:但是只能删除空文件夹,(如果文件夹中有内容,不会直接删除的,是一种保护机制)
2、voiddeleteOnExit()
请求在虚拟机终止时删除由此抽象路径名表示的文件或目录
程序要退出了:删除程序执行过程中,产生的日志文件,缓冲文件。。。
常用方法:
1、exists();//判断File类的对象所表示文件或文件夹,是否存在
2、booleanisFile()
测试此抽象路径名表示的文件是否为普通文件
3、booleanisDirectory()
测试此抽象路径名表示的文件是否为目录。
4、booleanisAbsolute()
测试这个抽象路径名是否是绝对的。
5、StringgetName()
返回由此抽象路径名表示的文件或目录的名称。
6、StringgetPath()
将此抽象路径名转换为路径名字符串。
7、StringgetAbsolutePath()
返回此抽象路径名的绝对路径名字符串。
8、FilegetAbsoluteFile()
返回此抽象路径名的绝对形式。
9、StringgetParent()
返回此抽象路径名的父null的路径名字符串,如果此路径名未命名为父目录,则返回null。
10、FilegetParentFile()
返回此抽象路径名的父,或抽象路径名null如果此路径名没有指定父目录。
11、longlength()
返回由此抽象路径名表示的文件的长度。以字节为单位。
bit:位,0,1
byte:字节,8个bit。
kb:1024个字节
mb:
12、longlastModified()
返回此抽象路径名表示的文件上次修改的时间。
重要的问题:
Filef1=newFile("C:\\Ruby\\pro\\aa.jpg");//创建一个File类的对象,但是该文件对象所对应的目录文件,不一定存在。
遍历文件夹:只针对目录来讲,不能对文件操作,否则返回null。
1、String[]list()
返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
2、File[]listFiles()
返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
3、File[]listFiles(FileFilterfilter)
返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
自已定义过滤的规则,实现FileFilter接口即可。
接口中:publicbooleanaccept(Filepathname)-->boolean,
原理:将目录下的所有的子文件和文件夹,都作为accept()方法的参数,一个一个的判断,如果返回true,就是我们要的。返回false,就是不要的。
2.3、IO流
I/O流
I:input,输入
O:output,输出
流向来分:
输入流:数据从外部进入到程序中。。
输出流:数据从程序中出去。。。
单位来分:
字节流:以字节为单位。 核心:所有类型的文件
字符流:以字符为单位。——>文本信息
功能来分:
节点流:直接结束数据源的流。
处理流:又叫过滤流。套在流上的流。
IO流的4大基类
InputStream字节输入流
OutputStream字节输出流
Reader字符输入流
Writer字符输出流
文件流:
FileInputStream:文件字节输入流
构造方法:
FileInputStream(Filefile)
通过打开与实际文件的连接创建一个FileInputStream,该文件由文件系统中的File对象file命名。
FileInputStream(Stringname)
通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的路径名name命名。
读取数据:
intread()
从该输入流读取一个字节的数据。
每次读取一个字节的数据,返回值就是读到的数据本身(int),如果到达末尾,返回值就是-1。
IO的操作步骤流程:
step1:分析需求,明确数据从哪到哪。文件信息
数据的流向:输入,输出
单位:字节,字符
子类流:
step2:创建流的对象:流向,单位,哪个具体的流
step3:操作流
读取:
输入——>read()
写出:
输出——>write()
step4:关闭流
释放资源:close()