问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JAVA 搜索目录下符合条件的文件

发布网友 发布时间:2022-04-23 03:17

我来回答

3个回答

热心网友 时间:2023-10-13 02:53

不是因为搜索量太大,而多半是因为权限问题。具体函数是listFiles。函数说明了,如果遇到IO错误将返回null,而你的报错是处理null,所以你这里肯定是遇到了IO错误。之前能用isDirectory,不大可能是磁盘错误或者逻辑错误,就只剩下权限问题了。Win下有好些目录是没有列表权限的,原因是那些目录本身是为了兼容老版本的Win而存在的目录链接;存在的意义在于可以通过老版本Win访问文件的方式来访问新版本Win里的文件,因为是目录链接,所以文件实际在新目录里;而老版本目录不让列举文件的原因是如果允许列举,遇到像你这样的搜索,处在新目录里的文件就会被找到两次(通过旧目录链接和通过新目录直接找到)。还有回收站相关的文件和System Volume Information目录相关的也有很多默认不能打开的目录,因为这些不是普通的用户文件。
所以处理一下listFiles的结果就行了。输出不能访问的提示。至于搜索量,报错也是ArrayIndexOutOfBoundsException或者StackOverflowError,所以直接输出别先保存在数组里吧,这样也让不能访问而报错时的输出连续一点。Pattern先compile在matcher可以提高效率。
import java.io.File;
import java.util.regex.Pattern;

public class Search {
public static void search(File folder, Pattern regex) {
File[] files = folder.listFiles();
if (files == null) {
System.err.println("不能访问" + folder.getAbsolutePath());
return;
}
for(File file : files) {
if(file.isDirectory()) {
search(file, regex);
} else {
if (regex.matcher(file.getName()).matches()) {
System.out.println(file.getAbsolutePath());
}
}
}
}
public static void search(String path, String regex) {
search(new File(path), Pattern.compile(regex));
}
public static void main(String[] args) {
Search.search("C:\\Users", ".*\\.mp3");
}
}

热心网友 时间:2023-10-13 02:54

public class SearcFile {
public List<File> list=new ArrayList<File>();

public void doSearch(File f,String regex){
File[] f1=f.listFiles();
for(File ff: f1){
if(ff.isDirectory()){
doSearch(ff,regex);

}else if(ff.getName().matches(regex)){
list.add(ff);
}
}
}

public void display(){
for(File f:list){
System.out.println(f.getAbsolutePath());
}
}

public static void main(String[] asd){
SearcFile search = new SearcFile();
search.doSearch(new File("D:\\temp\\"), ".*\\.mp3");
search.display();
}
}追问这个问题还是一样啊 我的目的是搜索整个E:盘中含有 mp3后缀的文件
但是search.doSearch(new File("D:\\temp\\"), ".*\\.mp3");这个还是只能搜索比较小的文件

搜索整个 D: 还是会出现
Exception in thread "main" java.lang.NullPointerException

热心网友 时间:2023-10-13 02:54

这个错误是空指针一场!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果手机微信怎么换漂亮字体(苹果手机微信怎么换行输入) 有什么好用的app转换字体 手写转文字的软件 erp可以看评论地址吗 淘宝评论url是什么意思? 揭秘:码牌支付风控升级,背后真相揭秘 电脑电视直播软件哪个好用什么软件好电脑看电视直播 潼南子同街学区是哪些 三极管BU406价格和参数? 火锅料放在冰柜忘了插电一个星期给会坏了吗 火锅的设备有哪些 被永久封了怎么办? java 搜索引擎 被永久封号的话,就不可能找回来了么?还是有什么方法可以找回来? JAVA 动态搜索(查找) 在线等 如何查找java路径? 该已被永久限制是什么意思?还能好吗,还能恢复回来吗 用Java如何实现站内搜索? JAVA如何实现全局搜索 Java怎么在整个项目中搜索某一个词 java如何实现文件搜索功能 我的永久被封了,还能解开吗? 被永久封号了如何解开 被永久封了怎么办? 请教:为什么西瓜视频分享钮不好用? 请问vⅰⅴo手机中西瓜视频中设置中为何找不到分享权限,手机中设置中也找不到 西瓜视频怎么才能发给好友? 我的西瓜视频能发到朋友圈,但朋友看不到,只有自己看 其... 西瓜视频不能播放是什么原因- 问一问 为什么西瓜视频分享到微信不能播放,你们的也是这样吗? 西瓜视频分享到朋友圈,朋友打不开。 java中怎么搜索一个字符串中的所有英文单词 JAVA程序的搜索和排序问题 Java怎么指定文件里搜索关键字 java搜索文件的代码怎么写,返回文件的路径?求教 java 查找某字符串 JAVA 搜索一个词,显示含此词的句子 关于java搜索引擎 JAVA实现BAIDU的搜索功能 java中怎么搜索一个字符串中的所有英文单词? JAVA查找 java中如何模糊查找 微博怎么更改支付宝绑定?以前的支付宝不用了 我的支付宝绑定了别人的微博,没办法绑定自己的微博,我这个手机号应该以前是他人用过的原因,有办法吗 家用空调是怎样运行和制冷的? 新浪微博绑定了淘宝和支付宝,但是我换了手机号,淘宝账号支付宝账号 家用空调要怎么选择?注意哪些细节? 我正打算微博绑定支付宝,绑定的时候显示支付宝已绑定其他账号。可能是因为我手机号以前是别人的。然后我 家用空调怎么选择?求推荐 微博钱包绑定的支付宝,然后支付宝换手机号了,微博钱包解绑不了 家用空调买海尔空调怎么样?这个牌子空调好不好用啊?