package com.gary.util;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 清理指定目录下,符合扩展名条件的文件,删除每行开头结尾的空白(空格,制表符,换页符等)和空行
* @author gary
*
*/
public class CleanHTML {
//清理指定扩展名
static String[] targetExtName = {"html", "jsp", "ftl", "vm"};
public static void main(String[] args) throws IOException {
cleanDir(new File("E:\\test"));
}
/**
* 清理目录
* @param dir
*/
public static void cleanDir(File dir){
File[] subFile = dir.listFiles();
for (int i = 0; i < subFile.length; i++) {
//如果是dir,递归清理目录
if(subFile[i].isDirectory()){
cleanDir(subFile[i]);
}else{
System.out.println("文件:" + subFile[i].getAbsolutePath());
String fileName = subFile[i].getName();
//是否需要清理
boolean needClean = false;
//扩展名
String extName = getFileExtName(fileName);
for (int j = 0; j < targetExtName.length; j++) {
if(targetExtName[j].equalsIgnoreCase(extName)){
needClean = true;
}
}
if(needClean){
System.out.println("操作:清理");
cleanFile(subFile[i]);
}else{
System.out.println("操作:忽略");
}
}
}
}
/**
* 清理文件
* @param fileFullPath
* @throws IOException
*/
public static void cleanFile(File file){
FileWriter fw = null;
try {
fw = new FileWriter(file.getAbsoluteFile()+".tmp", false);
} catch (IOException e2) {
e2.printStackTrace();
}
BufferedWriter bw = new BufferedWriter(fw);
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
//每次读取一行
while ((tempString = reader.readLine()) != null) {
if(!isBlank(tempString)){
bw.write(cleanHTML(tempString));
bw.newLine();
}
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
//将数据更新至文件
try {
bw.flush();
bw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
File tmpFile = new File(file.getAbsoluteFile()+".tmp");
file.delete();
tmpFile.renameTo(file);
}
}
/**
* 删除开头结尾的空白(空格,制表符,换页符等)
* @param str
* @return
*/
public static String cleanHTML(String str){
Pattern pattern = Pattern.compile("^\\s*|\\s*$",Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
return matcher.replaceAll("");
}
/**
* 获取文件扩展名
* @param fileName
* @return
*/
public static String getFileExtName(String fileName){
return fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
}
/**
* 字符串是否为空
* @param str
* @return
*/
public static boolean isBlank(String str){
int strLen;
if ((str == null) || ((strLen = str.length()) == 0)){
return true;
}
for (int i = 0; i < strLen; ++i) {
if (!(Character.isWhitespace(str.charAt(i)))) {
return false;
}
}
return true;
}
}
分享到:
相关推荐
在这个场景中,"递归删除文件或子目录"指的是编写一个程序,它能够遍历并删除指定目录下的所有文件和子目录,包括它们的子孙目录,但会跳过那些被标记为只读属性的文件和目录。这个功能在清理或整理文件系统时非常...
在本文中,我们将深入探讨如何使用C#编程语言实现FTP(File Transfer Protocol)递归下载功能,以便能够从服务器获取整个目录结构,包括子目录及其内的所有文件。这个任务适用于那些需要从FTP服务器批量下载数据的...
在Windows系统中,目录结构是树状的,每个目录可能包含子目录和文件。为了获取一个目录下的所有文件,我们需要从根目录开始,检查其子目录并递归地处理它们。这通常涉及使用Windows API函数,如`FindFirstFile`、`...
4. 对每个子目录再次调用`getAllDirectories`方法,继续递归地添加子目录和文件。 5. 将当前子目录节点添加到父节点下。 #### 用户界面实现 接下来,我们来看一下如何创建用户界面来显示生成的文件目录树。这里...
在MATLAB中,递归搜索文件是一项非常实用的功能,它允许用户在指定的目录及其子目录下查找符合特定条件的文件或文件夹。这个过程通常涉及到编程中的递归概念,即函数调用自身来解决问题。在MATLAB中,我们可以利用...
此源码实现了文件夹下递归遍历文件,实现文件拷贝。代码已经变异通过,可直接运行,给用户的工具源码,可以直接编译并在产品中使用,经过长时间测试
我们遍历`files`,检查每个文件是否以`.mp4`结尾,如果是,则将其完整路径存入`file_map`。 `file_map`是一个字典,键是.mp4文件的完整路径,值可以是另一个字典,用来存储关于该文件的其他信息,例如大小、修改...
- 对于每个文件或子目录,判断是否为目录,如果是,则递归调用 `get_file_from_dir`;如果不是,则复制文件。 - 在复制文件之前,先检查目标路径下是否存在同名文件,如果存在,则将其信息写入日志文件。 5. **...
一个关于文件操作的静态工具类 实现手机SD卡目录或文件的拷贝 移动 删除 递归 Demo中有详细注释 在进行Demo测试时 建议先把测试的文件备份一下在测试 否则删除就找不回了 具体可见我博客...实现手机SD卡目录或文件的...
在C语言中,目录递归是一项重要的编程技巧,它允许程序遍历文件系统中的所有子目录,处理每个目录中的文件和子目录。本篇将详细探讨如何实现C语言的目录递归,以及其背后的原理和应用。 目录递归通常用于需要遍历...
在编程领域,递归是一种强大的工具,特别是在处理文件系统操作如删除目录及其包含的所有文件时。这个例子将探讨如何使用递归实现这个功能,主要关注C++编程语言,因为提供的文件列表暗示这是一个C++项目。 首先,让...
### Linux 下为目录和文件设置权限,包括子目录的循环递归设置 #### 知识点一:Linux 文件权限概述 在 Linux 操作系统中,文件权限管理是至关重要的安全特性之一。通过权限管理,我们可以控制不同用户对文件或目录...
在文件系统遍历中,递归可以帮助我们逐级深入目录结构,访问每一个文件和子目录。 要实现这个功能,我们通常会定义一个方法,例如`traverseDirectory(File dir)`。该方法接收一个`File`对象,代表当前正在处理的...
在遍历文件目录时,我们从根目录开始,然后对每个子目录递归地执行相同的操作,直到遍历完所有子目录及其文件。 要实现这个功能,我们可以创建一个函数,接收目录路径作为参数,并在内部使用`scandir()`函数来获取...
这是一个使用java开发了类,可以递归删除文件目录。
其次,"枚举文件"是指按顺序访问文件系统的每一个文件,这在需要对所有文件执行相同操作的情况下非常有用。在易语言中,可以使用系统提供的文件操作函数来实现这一功能,例如打开文件夹、获取文件信息等。 "线程"是...
在Java编程中,递归拷贝文件是一种常见操作,特别是在处理目录结构时。这个"java 递归拷贝文件显示进度demo"是一个实用的示例,它不仅实现了从一个源目录到目标目录的深度拷贝,而且还提供了进度显示功能,这对于...
在C#编程中,递归是一种强大的工具,常用于解决涉及层次结构或树形结构的问题,比如在文件系统中查找特定目录或文件。本话题主要关注如何使用递归方法遍历指定文件夹及其所有子目录。我们将探讨以下几个关键知识点:...
4. **处理文件**:在列出子目录的同时,检查并处理每个文件,根据需求执行相应的操作,如读取、写入或检查权限。 5. **清理**:遍历完成后,释放队列/栈占用的资源。 综上所述,这个技术组合可以有效地访问可能被...
java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取...