一.File类
(一).概述:
File 类的对象代表操作系统的文件(文件、文件夹),File 类提供了诸如:创建文件对象代表文件,获取文件信息(大小、修改时间)、删除文件、创建文件(文件夹)等功能。
(二.)File类的创建
实例操作:
public class file1 {
public static void main(String[] args) {
//1.根据字符串表示的路径,变成File对象
String str="D:\\java\\Study1\\src\\JAVATEXT\\File";
File f1=new File(str);
System.out.println(f1);
//2.父级路径:D:\java\Study1\src\JAVATEXT
//子级路径:File
String parent1="D:\\java\\Study1\\src\\JAVATEXT";
String child1="File";
File f2=new File(parent1,child1);
System.out.println(f2);
//3.把一个File表示的路径和String表示路径拼接
File parent2=new File("D:\\java\\Study1\\src\\JAVATEXT");
String child2="File";
File f3=new File(parent2,child2);
System.out.println(f3);
}
}
(三).常用方法:判断文件类型、获取文件信息功能
(四).常用方法:创建文件、删除文件功能
实例操作:
//1.创建一个新的空文件
//如果当前文件不存在,创建成功,如果当前路径存在,创建失败
File f1=new File("E:\\魏子轩\\B\\abc.text");
boolean b=f1.createNewFile();
System.out.println(b);
System.out.println("------------------------");
//2.创建一个文件夹(目录)
//如果当前路径是存在的,则创建失败,返回false
//mkdir方法只能创建单级文件夹
File f2=new File("E:\\魏子轩\\B\\abc");
boolean b2=f2.mkdir();
System.out.println(b2);
System.out.println("------------------------");
//3.创建多级文件夹
//既可以创建单级文件夹,也可以创建多级文件夹
File f3=new File("E:\\魏子轩\\B\\aaa\\bbb");
boolean b3=f3.mkdirs();
System.out.println(b3);
System.out.println("------------------------");
//4.删除文件,文件夹
//如果删除文件或者空文件夹,删除成功,不经过回收站
//如果删除有内容的文件夹,删除失败
File f4=new File("E:\\魏子轩\\B\\abc.text");
boolean b4=f4.delete();
System.out.println(b4);
System.out.println("------------------------");
二.多线程(一)
(一).概述
线程(thread)进程可进一步细化为线程,是一个程序内部的执行路径。若一个进程同一时间并行执行多个线程,那么这个进程就是支持多线程的。一个进程中的多个线程共享相同的内存单元/内存地址空间。他们从同一堆中分配对象,可以访问相同的变量和对象
多线程的优点;
- 提高应用程序的响应。可以增强用户体验。
- 提高计算机系CPU的利用率。
- 改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理解和修改。
多线程的应用范围:
- 程序需要同时执行两个或多个任务。
- 程序需要实现一些需要等待的任务时,如用户输入、文件读写操作、网络操作、搜索等。
- 需要一些后台运行的程序时。
(二).多线程的创建
1.方法一:继承于Thread类
public class Duoxiancheng1 {
public static void main(String[] args) {
//多线程的第一种启动方法:继承Thread类的方式实现
//1.自己定义一个类继承Thread
//2.重写run方法
//3.创建子类的对象,并启动多线程
MyThread mt1=new MyThread();
MyThread mt2=new MyThread();
mt1.setName("线程一:");
mt2.setName("线程二:");
//开启多线程
mt1.start();
mt2.start();
}
}
public class MyThread extends Thread{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(getName()+"多线程");
}
}
}
2.方法二:实现Runnable接口
public class Duoxiancheng2 {
public static void main(String[] args) {
//多线程的第二种启动方法:实现Runnable接口的方法实现
//1.自己定义一个类实现Runnable接口
//2.重写里面的run方法
//3.创建自己的类的对象
//4.创建一个Thread类的对象,并开启线程
//创建MyRun对象
//表示多线程要执行的任务
Myrunable mr = new Myrunable();
//创建多线程对象
Thread t1 = new Thread(mr);
Thread t2 = new Thread(mr);
t1.setName("线程1:");
t2.setName("线程2:");
//开启线程
t1.start();
t2.start();
}
}
public class Myrunable implements Runnable{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+"多线程");
}
}
}
3.方式三:实现Callable接口
public class Duoxiancheng3 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//多线程的第三种创建方式:利用Callable接口和Future接口方式实现
//特点:可以获取到多线程运行时的结果
/*
* 1.创建一个类MyCollable实现Collable接口
* 2.重写run方法
* 3.创建MyCollable对象(表示多线程要执行的任务)
* 4.创建FutureTast的对象(作用管理多线程运行的结果)
* 5.创建Thread类的对象,并启动(表示线程)
* */
MyCallable mc=new MyCallable();
//作用管理多线程运行的结果
FutureTask<Integer> ft=new FutureTask<>(mc);
Thread t1=new Thread(ft);
t1.start();
Integer f = ft.get();
System.out.println(f);
}
}
public class MyCallable implements Callable {
@Override
public Integer call() throws Exception {
int sum=0;
for (int i = 0; i < 100; i++) {
sum+=i;
}
return sum;
}
}
三种创建方式的比较:
(三).Thread类的常用方法:
(四).线程的生命周期:
想要实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程,在他的一个完整的生命周期中通常要经历如下的五种状态:
新建-->就绪-->运行-->阻塞-->死亡.