java怎么多线程扫描磁盘
答案:3 悬赏:30 手机版
解决时间 2021-02-23 23:28
- 提问者网友:喧嚣尘世
- 2021-02-23 01:34
用java怎么实现扫描D盘所有文件,并筛选出所有视频文件?
最佳答案
- 五星知识达人网友:蕴藏春秋
- 2021-02-23 01:48
import java.io.*;
public class Demo {
public static void main(String[] args) throws Exception {
System.out.println(Thread.currentThread().getName()+"抓取的内容:");
getFiles(new File("E:\\aa"));
}
private static void getFiles(File pathName){
File[] files = pathName.listFiles();
for(File file : files){
if(!file.isHidden() && file.isDirectory()){
new Thread(){
public void run(){
getFiles(file);
System.out.println(Thread.currentThread().getName()+"抓取到的内容:");
}
}.start();
}else{
new FileFilter() {
public boolean accept(File pathname) {
//如果要抓取别的,可以修改.xx,我这里测试使用.txt
boolean flag = pathname.getName().endsWith(".txt");
if(flag){
System.out.println("\t"+pathname);
}
return flag;
}
}.accept(file);
}
}
}
}提示:我这程序一个文件夹一个线程,本身main方法是一个线程。
//测试结果:
main抓取的内容:
E:\aa\aa1.txt
E:\aa\复件 aa1.txt
E:\aa\bb\复件 (2) bb2.txt
E:\aa\bb\复件 (3) bb2.txt
E:\aa\bb\复件 (4) bb2.txt
Thread-0抓取到的内容:
E:\aa\复件 bb\bb1.txt
E:\aa\复件 bb\bb2.txt
E:\aa\复件 bb\复件 bb2.txt
Thread-1抓取到的内容:
public class Demo {
public static void main(String[] args) throws Exception {
System.out.println(Thread.currentThread().getName()+"抓取的内容:");
getFiles(new File("E:\\aa"));
}
private static void getFiles(File pathName){
File[] files = pathName.listFiles();
for(File file : files){
if(!file.isHidden() && file.isDirectory()){
new Thread(){
public void run(){
getFiles(file);
System.out.println(Thread.currentThread().getName()+"抓取到的内容:");
}
}.start();
}else{
new FileFilter() {
public boolean accept(File pathname) {
//如果要抓取别的,可以修改.xx,我这里测试使用.txt
boolean flag = pathname.getName().endsWith(".txt");
if(flag){
System.out.println("\t"+pathname);
}
return flag;
}
}.accept(file);
}
}
}
}提示:我这程序一个文件夹一个线程,本身main方法是一个线程。
//测试结果:
main抓取的内容:
E:\aa\aa1.txt
E:\aa\复件 aa1.txt
E:\aa\bb\复件 (2) bb2.txt
E:\aa\bb\复件 (3) bb2.txt
E:\aa\bb\复件 (4) bb2.txt
Thread-0抓取到的内容:
E:\aa\复件 bb\bb1.txt
E:\aa\复件 bb\bb2.txt
E:\aa\复件 bb\复件 bb2.txt
Thread-1抓取到的内容:
全部回答
- 1楼网友:骨子里都是戏
- 2021-02-23 03:48
当调用object的wait()、notify()、notifyall()时,如果当前线程没有获得该对象锁,则会抛出illegalmonitorstateexception异常。
如果一个方法申明为synchronized,则等同于在这个方法上调用synchronized(this)。
如果一个静态方法被申明为synchronized,则等同于在这个方法上调用synchronized(类.class)。当一个线程进入同步静态方法中时,其他线程不能进入这个类的任何静态同步方法。
线程成为对象锁的拥有者:
通过执行此对象的同步实例方法
通过执行在此对象上进行同步的synchronized语句的正文
对于class类型的对象,可以通过执行该类的同步静态方法。
死锁:
死锁就是两个或两个以上的线程被无限的阻塞,线程之间相互等待所需资源。
可能发生在以下情况:
当两个线程相互调用thread.join();
当两个线程使用嵌套的同步块,一个线程占用了另外一个线程必须的锁,互相等待时被阻塞就有可能出现死锁。
调用了thread类的start()方法(向cpu申请另一个线程空间来执行run()方法里的代码),线程的run()方法不一定立即执行,而是要等待jvm进行调度。
run()方法中包含的是线程的主体,也就是这个线程被启动后将要运行的代码。
- 2楼网友:第四晚心情
- 2021-02-23 03:11
为啥要用多线程?
是不是直接用File,区别视频文件还是以文件的后缀吧,把所有后缀为视频文件的文件找出来不就可以了?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯