java实现基于关键字的文件夹(文件)的搜索、文件夹(文件)的复制、删除
最近在做一个项目,需要实现这几项功能,上网查了很多资料,自己研究了好几天终于实现了,现在与大家分享一下。
一、JAVA实现文件夹的搜索
import java.awt.event.ActionEvent;
import java.io.File; public class FileListener implements java.awt.event.ActionListener, Runnable { private static String content;//确保一变化线程中即可调用
private String root = "C:\\";
private static File[] listFile;//确保一变化线程中即可调用
private String fileName; //所需搜索问关键字
private static String item = "";//通过item来判定执行run中的哪一个方法
private Thread t;//统一设定线
private static int count = 0;//统计出现的文件个数
private FileListener fl;//控制线程的启动
private static String s = "";//标识是否停止寻找
private int threadNum = 0;
private File[] rootlist;
private int success = 0; //标识是否成功得到文件夹绝对路径 public FileListener() { } public FileListener(String fileName, String root) {
this.root = root;
this.fileName = fileName;
File file1 = new File("");
rootlist = file1.listRoots(); //获取所有盘符
} public void actionPerformed(ActionEvent e) {
// System.out.println("响应事件");
content = fileName; //所需搜索的关键字
if (e.getActionCommand().equals("Search")) {
// 指定盘
if (root == null || root.equals("")) {
System.out.println("该路径不存在!");
File file = new File("");
listFile = file.listRoots(); } else {
if (content == null || content.length() == 0) { File file = new File(root);
listFile = file.listFiles();
//启动线程
item = "search";
s = "";
fl = new FileListener(fileName, root); t = new Thread(fl);
t.start(); } else { // String[] list;
int number = rootlist.length;
//list = new String[number]; //list[i] = rootlist[i].getAbsolutePath();
System.out.println("-------------------->" + rootlist[threadNum].getAbsolutePath());
File file = new File(rootlist[threadNum].getAbsolutePath());
listFile = file.listFiles();
//启动线程
item = "searchCount";
s = "";//每次线程启动前都要将s清空
fl = new FileListener(fileName, rootlist[threadNum].getAbsolutePath());
//
t = new Thread(fl);
t.start(); }
} }
} private int search(File[] file) { //每次使用之前都将count清0,否则会叠加
int count = 0;
if (file == null || file.length == 0) {
return 0;
}
for (int i = 0; i < file.length; i++) {
File filenew = file[i];
if (filenew.isDirectory()) {
File[] tempFile = filenew.listFiles();
count += search(tempFile);
this.count = count;
}
if (s.equals("stop")) { break;
} else {
if (filenew.isFile()) {
count++; s = "stop"; }
}
} return count;
} private int searchContent(File[] file) {
int count = 0;
if (file == null || file.length == 0) {
return 0;
}
for (int i = 0; i < file.length; i++) {
File filenew = file[i];
// 包含字符
if (filenew.isDirectory()) {
File[] tempFile = filenew.listFiles();
count += searchContent(tempFile);
this.count = count;
} if (filenew.isFile()) {
String path = filenew.getAbsolutePath();
//找到与内容相符的路径 if (s.equals("stop")) { break;
} else { if (path.indexOf(content) != -1) {
count++; s = "stop"; // LeftPanel.ReturnPath = analysisPath(filenew.getAbsolutePath()); //此处为将搜索时检索的路径显示在JLabel上,用户体验更好。
if (analysisPath(filenew.getAbsolutePath())) {
break;
}
}
}
}
} return count;
} //重写run方法
@Override
public void run() {
// searchContent(listFile);
System.out.println("searchContent函数结束");
if (success == 0) {
if (threadNum++ < rootlist.length) {
System.out.println("-------------------->" + rootlist[threadNum].getAbsolutePath());
File file = new File(rootlist[threadNum].getAbsolutePath());
listFile = file.listFiles();
//启动线程
item = "searchCount";
s = "";//每次线程启动前都要将s清空
fl = new FileListener(fileName, rootlist[threadNum].getAbsolutePath());
//
t = new Thread(fl);
t.start();
}
} } /**
* 解析搜索到的文件路径 得出目录文件绝对路径
*
* @param absolutePath
* @return
*/
private String analysisPath(String absolutePath) {//此处传入的absolutePath时定位到的路径中含有关键字的文件,,也就是目标文件夹中的文件。
File f = new File(absolutePath); try {
while (!f.getName().equals(fileName)) { //此处是为了得到目标文件夹的绝对路径
f = f.getParentFile(); //得到父文件路径
} } catch (Exception e) {
System.out.println("未能成功检索到文件夹")
s = "";
return null;
}
System.out.println("成功检索到文件夹");
success = 1; //成功检索到文件夹 ,修改该变量值 使进程停止//fun(f.getAbsolutePath();) //此处为您所需要处理该路径的方法,也可以把该值付给调用方的类成员变量得到该值return f.getAbsolutePath();} }
二、JAVA实现文件夹的复制、删除
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import static qqbackup.BackUpProgress.currentNum;
//import static qqbackup.BackUpProgress.currentSize; class CopyFile { /**
* 复制文件到目录 <功能详细描述>
*
* @param srcPath 文件绝对路径
* @param destDirPath 目标文件夹绝对路径
* @throws Exception
* @see [类、类#方法、类#成员]
*/
public static void copyFile(String srcPath, String destDirPath) throws Exception {
File srcfile = new File(srcPath);
File destDir = new File(destDirPath); InputStream is = null;
OutputStream os = null;
int ret = 0; // 源文件存在
if (srcfile.exists() && destDir.exists() && destDir.isDirectory()) {
try {
is = new FileInputStream(srcfile); String destFile = destDirPath + File.separator + srcfile.getName(); os = new FileOutputStream(new File(destFile)); byte[] buffer = new byte[1024]; while ((ret = is.read(buffer)) != -1) {
os.write(buffer, 0, ret); // 此处不能用os.write(buffer),当读取最后的字节小于1024时,会多写;
// ret是读取的字节数
}
os.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new Exception("");
} catch (IOException e) {
e.printStackTrace();
throw new Exception("");
} finally {
try {
if (os != null) {
os.close();
}
} catch (IOException e) {
e.printStackTrace();
} try {
if (is != null) {
is.close();
}
} catch (Exception e) {
}
}
} else {
throw new Exception("源文件不存在或目标路径不存在");
} } /**
* 列出文件夹下的所有文件,使用递归。 <功能详细描述>
*
* @param dirPath 文件夹绝对路径
* @see [类、类#方法、类#成员]
*/
public static void getFileList(String dirPath) {
File rootDir = new File(dirPath);
if (rootDir.exists()) {
File[] files = rootDir.listFiles(); for (File file : files) {
if (file.isDirectory()) {
System.out.println("目录" + file.getName());
// 递归调用
getFileList(file.getPath());
} else {
System.out.println("文件" + file.getName());
}
}
}
} /**
* <一句话功能简述>复制文件夹 <功能详细描述>
*
* @param srcDir 文件夹的绝对路径
* @param destDir 目标绝对路径
* @throws Exception
* @see [类、类#方法、类#成员]
*/
public static void copyFolder(String srcDir, String destDir) throws Exception {
File srcFile = new File(srcDir); // 在目标路径建立文件夹
String name = srcFile.getName();
File destDirFile = new File(destDir);
if (!destDirFile.exists()) {
destDirFile.mkdirs(); //如果路径不存在则创建文件夹 }
File destFile = new File(destDir + File.separator + name); //目的文件夹内的元文件夹名称路径
if (!destFile.exists()) {
destFile.mkdir(); //如果路径不存在则创建文件夹
}
if (srcFile.exists() && destFile.isDirectory()) {
File[] files = srcFile.listFiles(); String src = srcDir;
String dest = destFile.getAbsolutePath(); for (File temp : files) {
// 复制目录
if (temp.isDirectory()) {
String tempSrc = src + File.separator + temp.getName();
String tempDest = dest + File.separator + temp.getName();
File tempFile = new File(tempDest);
if(!tempFile.exists()){
tempFile.mkdir();
}
// 当子目录不为空时
if (temp.listFiles().length != 0) {
// 递归调用
copyFolder(tempSrc, dest);
}
} else // 复制文件
{
String tempPath = src + File.separator + temp.getName();
copyFile(tempPath, dest);
}
}
}
// System.out.println("拷贝完成");
} /**
* 删除文件夹 <功能详细描述>
* 要先删除子内容,再删除父内容
*
* @param dirPath 要删除的文件夹
* @see [类、类#方法、类#成员]
*/
public static void deleteFolder(String dirPath) {
File folder = new File(dirPath);
File[] files = folder.listFiles(); for (File file : files) {
if (file.isDirectory()) {
String tempFilePath = dirPath + File.separator + file.getName();
deleteFolder(tempFilePath);
} else {
file.delete();
} } folder.delete();
} }
希望这些代码能给大家带来些帮助,欢迎留言交流。
如有转载请标明出处 ,谢谢合作哦。
java实现基于关键字的文件夹(文件)的搜索、文件夹(文件)的复制、删除的更多相关文章
- java 弹出选择目录框(选择文件夹),获取选择的文件夹路径
java 弹出选择目录框(选择文件夹),获取选择的文件夹路径 java 弹出选择目录框(选择文件夹),获取选择的文件夹路径:int result = 0;File file = null;String ...
- 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集合中,遍历map集合
package cn.it.zuoye5; import java.io.File;import java.util.HashMap;import java.util.Iterator;import ...
- java实现批量修改指定文件夹下所有后缀名的文件为另外后缀名的代码
java实现批量修改指定文件夹下所有后缀名的文件为另外后缀名的代码 作者:Vashon package com.ywx.batchrename; import java.io.File; import ...
- java:多层文件夹情况下,判断文件夹下是否有文件夹,并获取到没有文件夹的名字的方法
业务问题案例 在公司遇到的一个问题,本以为很小很好解决,没想到花了一下午时间.图给的是文件路径,page1下有10个文件夹,每个有的有文件夹或者文件,要求得到page1下(即:123456789,10 ...
- JAVA中删除文件夹下及其子文件夹下的某类文件
##定时删除拜访图片 ##cron表达式 秒 分 时 天 月 ? ##每月1日整点执行 CRON1=0 0 0 1 * ? scheduled.enable1=false ##图片路径 filePat ...
- Android(java)学习笔记184:生成 4种 不同权限的文件
1.首先我们编写一个生成 4种 不同权限的文件的程序案例: (1)首先是activity_main.xml文件: <RelativeLayout xmlns:android="http ...
- [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表
写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的 ...
- Java项目生成可执行jar包、exe文件以及在Windows下的安装文件
1.如何通过eclipse将Java项目生成可执行jar包 首先把在eclipse下的java项目导出jar file 下一步 下一步 下一步 最后点击完成,便生成了可执行的jar文件.可以在刚刚选择 ...
- JFinal中文件上传后会默认放置到WebContent的upload包下,但是tomcat会自动重启,当我们再次打开upload文件夹查看我们刚刚上传的文件时,发现上传的文件已经没有了。
JFinal中文件上传后会默认放置到WebContent的upload包下,但是tomcat会自动重启,当我们再次打开upload文件夹查看我们刚刚上传的文件时,发现上传的文件已经没有了.因为tomc ...
随机推荐
- QT的初步学习笔记
一.Qt简介 1.Qt是什么:图形用户界面程序框架 能做界面的还有什么:MFC.GTK+ 2.Qt的由来和发展 3.为什么选择Qt 二.Qt环境与工具 1.工具 a.Qt助手:里面详细说明了Qt ...
- 全面认识一下.NET 4.0的缓存功能 (转)
转自:http://www.cnblogs.com/hjf1223/archive/2010/07/16/net_4_caching.html 很多关于.NET 4.0新特性的介绍,缓存功能的增强肯定 ...
- scp机器间远程拷贝
scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.linux的scp命令可以在linux服务器之间复制文件和目录. 使用语法:scp [参数 ...
- SQL server权限管理和备份实例
权限设置: 1.创建用户zhangsan,并赋予zhangsan有dbcreator的服务器权限. 2.使用zhangsan登录,测试能否创建数据库. 3.使用sa用户附加myschool数据库,设置 ...
- django模板系统(下)
主要内容:母版,继承母版,块,组件,静态文件 母版 <!DOCTYPE html> <html lang="en"> <head> <me ...
- .Net Core Api 跨域配置
.Net Core 和Asp.Net 不同,不需要再去引用其他的跨域组件.创建项目时,就有了. 让接口实现跨域,需要配置两个地方. 一.Startup.cs 这里需要配置两个地方 public voi ...
- 性能问题案例01——sybase数据库内存问题
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xuepiaohan2006/article/details/30064399 近期现场反馈问 ...
- luogu P2365 任务安排
嘟嘟嘟 如果常规dp,\(dp[i][j]\)表示前\(i\)个任务分\(j\)组,得到 \[dp[i][j] = min _ {k = 0} ^ {i - 1} (dp[k][j - 1] + (s ...
- PHP foreach 循环使用"&$val" 地址符“&”
在熟悉项目代码的时候 看到这样的foreach 循环: foreach($data as &$val){ .... } 第一次看到循环里面使用了地址符“&”,我印象中的这个符号 是直接 ...
- unlimited 控制