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 ...
随机推荐
- zabbix待完整
fad 下载zabbix3.4的配置文件 wget -O zabbix-3.4.2.tar.gz http://sourceforge.net/projects/zabbix/files/ZABBIX ...
- 怎么查看自己电脑的IP地址
1/2 使用Windows+R键打开“运行”窗口,然后输入CMD进入命令提示窗口 进入命令窗口之后,输入:ipconfig/all 回车即可看到整个电脑的详细的IP配置信息 1/3 使用网络状态查看I ...
- 数据库迁移之从oracle 到 MySQL最简单的方法
数据库迁移之从oracle 到 MySQL最简单的方法 因工作需要将oracle数据库换到MySQL数据库,数据量比较大,百万级别的数据,表也比较多,有没有一种既快捷又安全的方法呢?答案是肯定的,下面 ...
- 自定义上传控件(兼容IE8)
上传控件是 <input type="file"/> 而实际开发过程中,都会自定义一个控件,因为这个控件本身难看,而且不同浏览器效果不一样. 如IE8显示如下: 谷歌浏 ...
- linux 删除指定日期之前的文件
两种方法: 1. 在一个目录中保留最近三个月的文件,三个月前的文件自动删除. find /email/v2_bak -mtime +92 -type f -name *.mail[12] -exec ...
- 关于datatables与jquerUI版本冲突问题
今天开发项目是,需要用到表格,于是想到,之前的项目中使用过datatables插件,于是就拿了过来,但是发现无法识别 Uncaught TypeError: $(...).DataTable is n ...
- 10.Solr4.10.3数据导入(DIH全量增量同步Mysql数据)
转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.创建MySQL数据 create database solr; use solr; DROP TABLE ...
- python第三十课--异常(else讲解)
演示else语句和异常处理机制结合使用 try: print('try...') print(10/0) except: print('except...') else: print('else... ...
- 【转】网段,子网掩码,网络标识,IP划分
网段指一个计算机网络中使用同一物理层设备(传输介质,中继器,集线器等)直接通讯的那一部分.就是从一个IP到另一个IP 好比 从192.168.0.1到192.168.255.255这之间就是一个网段 ...
- 如何用IDEA http://localhost:8080/不带上项目名访问
IDEA TOMCAT设置中把这里的项目名去掉即可