`
gary0416
  • 浏览: 333474 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

按目录递归清理文件每行开头结尾的空白

阅读更多

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递归下载文件(子目录和子目录中的文件)

    在本文中,我们将深入探讨如何使用C#编程语言实现FTP(File Transfer Protocol)递归下载功能,以便能够从服务器获取整个目录结构,包括子目录及其内的所有文件。这个任务适用于那些需要从FTP服务器批量下载数据的...

    VC6 递归得到目录下文件列表

    在Windows系统中,目录结构是树状的,每个目录可能包含子目录和文件。为了获取一个目录下的所有文件,我们需要从根目录开始,检查其子目录并递归地处理它们。这通常涉及使用Windows API函数,如`FindFirstFile`、`...

    使用递归生成文件目录树

    4. 对每个子目录再次调用`getAllDirectories`方法,继续递归地添加子目录和文件。 5. 将当前子目录节点添加到父节点下。 #### 用户界面实现 接下来,我们来看一下如何创建用户界面来显示生成的文件目录树。这里...

    matlab开发-递归搜索文件

    在MATLAB中,递归搜索文件是一项非常实用的功能,它允许用户在指定的目录及其子目录下查找符合特定条件的文件或文件夹。这个过程通常涉及到编程中的递归概念,即函数调用自身来解决问题。在MATLAB中,我们可以利用...

    python实现MP4文件递归查找功能

    我们遍历`files`,检查每个文件是否以`.mp4`结尾,如果是,则将其完整路径存入`file_map`。 `file_map`是一个字典,键是.mp4文件的完整路径,值可以是另一个字典,用来存储关于该文件的其他信息,例如大小、修改...

    Shell脚本实现从文件夹中递归复制文件

    - 对于每个文件或子目录,判断是否为目录,如果是,则递归调用 `get_file_from_dir`;如果不是,则复制文件。 - 在复制文件之前,先检查目标路径下是否存在同名文件,如果存在,则将其信息写入日志文件。 5. **...

    Android 手机sdcard目录或文件的拷贝 移动 删除 递归

    一个关于文件操作的静态工具类 实现手机SD卡目录或文件的拷贝 移动 删除 递归 Demo中有详细注释 在进行Demo测试时 建议先把测试的文件备份一下在测试 否则删除就找不回了 具体可见我博客...实现手机SD卡目录或文件的...

    C语言目录递归经典代码Recurse-Directories-in-C

    在C语言中,目录递归是一项重要的编程技巧,它允许程序遍历文件系统中的所有子目录,处理每个目录中的文件和子目录。本篇将详细探讨如何实现C语言的目录递归,以及其背后的原理和应用。 目录递归通常用于需要遍历...

    一个递归删除指定目录和文件的例子

    在编程领域,递归是一种强大的工具,特别是在处理文件系统操作如删除目录及其包含的所有文件时。这个例子将探讨如何使用递归实现这个功能,主要关注C++编程语言,因为提供的文件列表暗示这是一个C++项目。 首先,让...

    linux下为目录和文件设置权限,包括子目录的循环递归设置

    ### Linux 下为目录和文件设置权限,包括子目录的循环递归设置 #### 知识点一:Linux 文件权限概述 在 Linux 操作系统中,文件权限管理是至关重要的安全特性之一。通过权限管理,我们可以控制不同用户对文件或目录...

    关于java递归文件,以及检索特定文件

    在文件系统遍历中,递归可以帮助我们逐级深入目录结构,访问每一个文件和子目录。 要实现这个功能,我们通常会定义一个方法,例如`traverseDirectory(File dir)`。该方法接收一个`File`对象,代表当前正在处理的...

    php如何实现递归遍历文件目录

    在遍历文件目录时,我们从根目录开始,然后对每个子目录递归地执行相同的操作,直到遍历完所有子目录及其文件。 要实现这个功能,我们可以创建一个函数,接收目录路径作为参数,并在内部使用`scandir()`函数来获取...

    递归删除文件目录的方法

    这是一个使用java开发了类,可以递归删除文件目录。

    易语言递归枚举所有文件

    其次,"枚举文件"是指按顺序访问文件系统的每一个文件,这在需要对所有文件执行相同操作的情况下非常有用。在易语言中,可以使用系统提供的文件操作函数来实现这一功能,例如打开文件夹、获取文件信息等。 "线程"是...

    java 递归拷贝文件显示进度demo

    在Java编程中,递归拷贝文件是一种常见操作,特别是在处理目录结构时。这个"java 递归拷贝文件显示进度demo"是一个实用的示例,它不仅实现了从一个源目录到目标目录的深度拷贝,而且还提供了进度显示功能,这对于...

    C# 用递归的方式查找指定文件夹下的所有子目录

    在C#编程中,递归是一种强大的工具,常用于解决涉及层次结构或树形结构的问题,比如在文件系统中查找特定目录或文件。本话题主要关注如何使用递归方法遍历指定文件夹及其所有子目录。我们将探讨以下几个关键知识点:...

    windows内核 自创建IRP访问文件加非递归遍历文件

    4. **处理文件**:在列出子目录的同时,检查并处理每个文件,根据需求执行相应的操作,如读取、写入或检查权限。 5. **清理**:遍历完成后,释放队列/栈占用的资源。 综上所述,这个技术组合可以有效地访问可能被...

    java 递归读取文件夹 读取文件 写文件

    java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取...

    ASP.net 递归读出网站上所有目录文件(源)

    在给定的标题“ASP.net 递归读出网站上所有目录文件(源)”中,主要涉及到的技术点是使用递归算法来遍历并读取网站目录下的所有文件。下面我们将详细探讨这一主题。 递归是一种解决问题的方法,它将问题分解为更小的...

Global site tag (gtag.js) - Google Analytics