`

用java-io查找包含关键字的文件或用某些字符替代掉指定的字符,大小写转换

    博客分类:
  • java
阅读更多
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;

public class SearchOrReplaceKeyword {

	public static int count = 1;// 用于统计数量

	/**
	 * 测试
	 */
	public static void main(String[] args) {

		replaceAllFile(new File("C:/Documents and Settings/Administrator/桌面/new/tract"),".xsl","@StatisticDate","@ReportStatisticDate");
		replaceAllFile(new File("C:/Documents and Settings/Administrator/桌面/new/tract"), ".xsl", "<p class=\"reportdetail\">没有数据</p>", "<p class=\"reportdetail\">没有数据!</p>");
		System.out.println("end");
	}

	/**
	 * 搜索到要查找的关键字就打印其文件名
	 * 
	 * @param dir:文件目录
	 * @param fileType:文件类型
	 * @param keyword:要查找的关键字,这个关键字是正则表达式的形式
	 */
	public static void searchFile(File dir, String fileType, String keyword) {
		if (dir.isDirectory()) {
			for (File file : dir.listFiles()) {
				if (file.isDirectory()) {
					searchFile(file, fileType, keyword);
				} else {
					if (file.getName().endsWith(fileType)) {
						String path = getFilePath(file, keyword);

						if (null != path) {
							System.out.println(path);
						}

					}
				}
			}
		}
	}

	/**
	 * 返回文件路径或null
	 * 
	 * @param file:被查找的文件
	 * @param keyword:查看文件是否包含此关键字,这个关键字是正则表达式的形式
	 * @return
	 */
	public static String getFilePath(File file, String keyword) {
		BufferedReader br = null;
		try {
			// 读取文件
			br = new BufferedReader(new FileReader(file));
			String line = "";
			while ((line = br.readLine()) != null) {
				//if (line.contains(keyword)) {
					//return file.getPath();
				//}
				//正则表达式的方式查找所要找的内容
				Pattern pattern = Pattern.compile(keyword);
				Matcher matcher = pattern.matcher(line);
				if (matcher.find()) {
					return file.getPath();
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return null;

	}

	/**
	 * 用新的字符串替代指定的字符串
	 * 
	 * @param dir:文件目录
	 * @param fileType:文件类型
	 * @param keyword:被替代的关键字
	 * @param newWord:替代关键字的字符串
	 */
	public static void replaceAllFile(File dir, String fileType, String keyword, String newWord) {
		if (dir.isDirectory()) {
			for (File file : dir.listFiles()) {
				if (file.isDirectory()) {
					replaceAllFile(file, fileType, keyword, newWord);
				} else {
					if (file.getName().endsWith(fileType)) {
						replaceFile(file, keyword, newWord);
					}
				}
			}
		}
	}

	/**
	 * 用新的字符串替代指定的字符串
	 * 
	 * @param file:文件
	 * @param keyword:被替代的关键字
	 * @param newWord:替代关键字的字符串
	 */
	public static void replaceFile(File file, String keyword, String newWord) {
		// StringBuilder stringBuilder = new StringBuilder();
		StringBuffer stringBuilder = new StringBuffer("");
		BufferedReader br = null;
		BufferedWriter bw = null;
		boolean flag = false;
		try {
			// 读取文件
			br = new BufferedReader(new FileReader(file));
			String line = "";
			while ((line = br.readLine()) != null) {
				if (line.contains(keyword)) {
					line = line.replaceAll(keyword, newWord);
					flag = true;
				}
				stringBuilder.append(line);
				stringBuilder.append("\n");
			}

			if (flag) {
				// 写文件
				bw = new BufferedWriter(new FileWriter(file));
				//这里用了一个字符转换的类
				bw.write(new ChangeCharest().toGBK(stringBuilder.toString()));
				System.out.println((count++) + "修改了" + file.getPath());
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (null != bw) {
					bw.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				if (null != br) {
					br.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

}

import java.io.UnsupportedEncodingException;

/** *
 * 转换字符串的编码
 *
 */

public class ChangeCharest {
    /** *//** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块      */
    public static final String US_ASCII = "US-ASCII";
    /** *//** ISO拉丁字母表 No.1,也叫做ISO-LATIN-1     */
    public static final String ISO_8859_1 = "ISO-8859-1";
    /** *//** 8 位 UCS 转换格式     */
    public static final String UTF_8 = "UTF-8";
    /** *//** 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序     */
    public static final String UTF_16BE = "UTF-16BE";
    /** *//** 16 位 UCS 转换格式,Litter Endian(最高地址存放地位字节)字节顺序     */
    public static final String UTF_16LE = "UTF-16LE";
    /** *//** 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识     */
    public static final String UTF_16 = "UTF-16";
    /** *//** 中文超大字符集     **/
    public static final String GBK = "GBK";
    
    public static final String GB2312 = "GB2312";
    
    /** *//** 将字符编码转换成US-ASCII码     */
    public String toASCII(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str, US_ASCII);
    }
    
    /** *//** 将字符编码转换成ISO-8859-1     */
    public String toISO_8859_1(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str, ISO_8859_1);
    }
    
    /** *//** 将字符编码转换成UTF-8     */
    public String toUTF_8(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str, UTF_8);
    }
    
    /** *//** 将字符编码转换成UTF-16BE     */
    public String toUTF_16BE(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str, UTF_16BE);
    }
    
    /** *//** 将字符编码转换成UTF-16LE     */
    public String toUTF_16LE(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str, UTF_16LE);
    }
    
    /** *//** 将字符编码转换成UTF-16     */
    public String toUTF_16(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str, UTF_16);
    }
    
    /** *//** 将字符编码转换成GBK     */
    public String toGBK(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str, GBK);
    }
    
    /** *//** 将字符编码转换成GB2312     */
    public String toGB2312(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str,GB2312);
    }
    
    /** *//**
     * 字符串编码转换的实现方法
     * @param str    待转换的字符串
     * @param newCharset    目标编码
     */
    public String changeCharset(String str, String newCharset) throws UnsupportedEncodingException{
        if(str != null){
            //用默认字符编码解码字符串。与系统相关,中文windows默认为GB2312
            byte[] bs = str.getBytes();
            return new String(bs, newCharset);    //用新的字符编码生成字符串
        }
        return null;
    }
    
    /** *//**
     * 字符串编码转换的实现方法
     * @param str    待转换的字符串
     * @param oldCharset    源字符集
     * @param newCharset    目标字符集
     */
    public String changeCharset(String str, String oldCharset, String newCharset) throws UnsupportedEncodingException{
        if(str != null){
            //用源字符编码解码字符串
            byte[] bs = str.getBytes(oldCharset);
            return new String(bs, newCharset);
        }
        return null;
    }
    
    public static void main(String[] args) throws UnsupportedEncodingException{
        ChangeCharest test = new ChangeCharest();
        String str = "This is a 中文的 String!";
        System.out.println("str:" + str);
        
        String gbk = test.toGBK(str);
        System.out.println("转换成GBK码:" + gbk);
        System.out.println();
        
        String ascii = test.toASCII(str);
        System.out.println("转换成US-ASCII:" + ascii);
        System.out.println();
        
        String iso88591 = test.toISO_8859_1(str);
        System.out.println("转换成ISO-8859-1码:" + iso88591);
        System.out.println();
        
        gbk = test.changeCharset(iso88591, ISO_8859_1, GBK);
        System.out.println("再把ISO-8859-1码的字符串转换成GBK码:" + gbk);
        System.out.println();
        
        String utf8 = test.toUTF_8(str);
        System.out.println();
        System.out.println("转换成UTF-8码:" + utf8);
        String utf16be = test.toUTF_16BE(str);
        System.out.println("转换成UTF-16BE码:" + utf16be);
        gbk = test.changeCharset(utf16be, UTF_16BE, GBK);
        System.out.println("再把UTF-16BE编码的字符转换成GBK码:" + gbk);
        System.out.println();
        
        String utf16le = test.toUTF_16LE(str);
        System.out.println("转换成UTF-16LE码:" + utf16le);
        gbk = test.changeCharset(utf16le, UTF_16LE, GBK);
        System.out.println("再把UTF-16LE编码的字符串转换成GBK码:" + gbk);
        System.out.println();
        
        String utf16 = test.toUTF_16(str);
        System.out.println("转换成UTF-16码:" + utf16);
        String gb2312 = test.changeCharset(utf16, UTF_16, GB2312);
        System.out.println("再把UTF-16编码的字符串转换成GB2312码:" + gb2312);
    }

} 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
//文件内容大写转小写
public class UpperToLower
{
    public static void main(String [] args){
        //contentUpperToLower(new File("D:/common2.css"));
        replaceAllFile(new File("D:/css"), "css");
    }
    
    public static void replaceAllFile(File dir, String fileType) {  
        if (dir.isDirectory()) {  
            for (File file : dir.listFiles()) {  
                if (file.isDirectory()) {  
                    replaceAllFile(file, fileType);  
                } else {  
                    if (file.getName().endsWith(fileType)) {  
                        contentUpperToLower(file);  
                    }  
                }  
            }  
        }  
    }

    private static void contentUpperToLower(File file)
    {

        StringBuffer stringBuilder = new StringBuffer("");  
        BufferedReader br = null;  
        BufferedWriter bw = null;  
       // boolean flag = false;  
        try {  
            // 读取文件  
            br = new BufferedReader(new FileReader(file));  
            String line = "";  
            int count = 0;
            while ((line = br.readLine()) != null) {  
                line = line.toLowerCase();
                stringBuilder.append(line);  
                stringBuilder.append("\n");  
                count++;
            }  
  
           // if (flag) {  
                // 写文件  
                bw = new BufferedWriter(new FileWriter(file));  
                //这里用了一个字符转换的类  
                bw.write(new ChangeCharest().toGBK(stringBuilder.toString()));  
                System.out.println((count++) + "修改了" + file.getPath());  
           // }  
  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                if (null != bw) {  
                    bw.close();  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            try {  
                if (null != br) {  
                    br.close();  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }
        
    }

}

分享到:
评论

相关推荐

    java-IO流学习使用教程

    - 当需要读取或写入包含文本内容的文件时,如.txt、.properties等,使用字符流更合适,因为它能处理字符编码,避免了字节流处理文本时可能出现的乱码问题。 - 在读取时,字符流会按字符大小进行读取,不会出现半个...

    java--总结 融会贯通

    2. **标识符**:由字母(大小写)、数字、下划线或美元符号组成,不能以数字开头,区分大小写。 3. **常量**:用字面量表示,如整数、浮点数、字符串或布尔值,一旦定义就不能更改。 4. **关键字**:Java有50个保留...

    JavaIO流学习资料

    Java IO流的学习是Java开发中不可或缺的部分,它主要用于在程序中处理数据的输入与输出。在Java中,IO流被广泛应用于文件操作、网络通信、数据传输等多个场景。本章节我们将深入探讨Java IO流的基本概念、File类以及...

    commons-io-2.CHM

    apache commons-io-2.CHM帮助文档 一、FileUtils 打开FileUtils的api文档,我们抽出一些工作中比较常用的方法,进行总结和讲解。总结如下: cleanDirectory:清空目录,但不删除目录。 contentEquals:比较两个...

    JAVA IO文件操作

    Java IO文件操作是Java编程中不可或缺的一部分,它允许开发者与外部设备进行数据交换,包括文件、网络、内存等。在Java中,IO流是实现这一功能的核心机制。 首先,流是一个按照顺序组织的数据集合,从起点(源)...

    java源码包---java 源码 大量 实例

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    day019-io笔记和代码.rar

    * 别人给提供了字节流,而需要处理文本文件,这时候,就需要用转换流转换一下,更方便处理文本文件 * * 作用:就是一字符流的方式读取或写出文本相关的数据 * * InputStreamReader:将字节输入流包装...

    java中的io详解.

    Java IO 是指应用程序对外部设备的数据输入和输出,在程序中,键盘被当作输入文件,显示器被当作输出文件使用。Java 语言定义了许多类专门负责各种方式的输入输出,这些类都被放在 java.io 包中。 File 类 File 类...

    java_io学习java_io学习.doc

    Java.IO.File 类是Java标准库中的核心类之一,用于处理文件和目录的操作。这个类提供了丰富的功能,包括创建、删除、重命名文件,获取文件属性,以及管理目录结构。以下是对File类的一些关键知识点的详细说明: 1. ...

    Java_JDK6之IO详解

    Java IO还提供了缓冲流(Buffered Stream)来提高性能,以及转换流(InputStreamReader/OutputStreamWriter)用于在字节流和字符流之间转换。 **文件操作** Java提供了多种操作文件的方法,如创建、删除、重命名和...

    C# 字符串及文本文件操作 资料整理

    这些函数在处理字符串时提供了极大的灵活性,例如,你可以使用`Mid`函数来获取字符串的某个部分,使用`Replace`来替换特定的子串,或者使用`LCase`和`UCase`进行大小写转换,这对于处理用户输入或格式化输出非常有用...

    Java IO流 文件传输基础

    文件传输基础是Java IO流应用的一个核心场景,通过IO流可以实现对文件的读写操作,包括创建、打开、修改和删除文件。在本文中,我们将深入探讨Java IO流在文件传输中的基础知识,特别是涉及文件编码的概念。 文件的...

    Java-程序设计基础第章-Java语言的输入输出与文件处理完整版资料.pptx

    总的来说,Java的I/O系统通过流提供了一种统一的方式来处理各种类型的输入输出操作,包括文件、网络连接、标准输入输出等。理解和熟练掌握这个系统对于编写能够高效、可靠地处理数据交换的Java程序至关重要。

    java IO类操作

    Java的IO类操作是Java平台中不可或缺的一部分,它用于处理数据的输入和输出,包括文件操作、网络通信、内存数据传输等。本篇文章将详细解析Java IO类的一些核心概念和重要知识点。 1. **File类**: File类是Java中...

    入门学习Linux常用必会60个命令实例详解doc/txt

    mount命令的作用是加载文件系统,它的用权限是超级用户或/etc/fstab中允许的使用者。 2.格式 mount -a [-fv] [-t vfstype] [-n] [-rw] [-F] device dir 3.主要参数 -h:显示辅助信息。 -v:显示信息,...

    java源码包2

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java 编写文件上传类简单易用

    用 Java 编写的、协议和平台都独立的服务器端组件,使用请求/响应的模式,提供了一个基于 Java 的服务器解决方案。本文将从文件传输的基本原理入手,分析如何用 java进行文件的上传,并提出解决方案。 一、基本...

    Java_NIO与IO的区别和比较.doc

    相比于传统的IO(Input/Output)模型,NIO引入了非阻塞I/O、字符转换、缓冲和通道等新特性,极大地提高了Java程序在处理I/O操作时的性能。 1. **Buffer**:在传统的IO操作中,数据通常直接在流之间传输,这可能导致...

    javaIO流[归纳].pdf

    Java IO流是Java平台中用于处理输入输出的重要机制,它允许程序与外部设备(如硬盘、网络、内存等)之间交换数据。以下是对Java IO流的详细解释: 1. **IO流的分类**: - **按方向**:Java IO流分为输入流和输出流...

    java IO 流

    Java IO流还包含缓冲流(BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter)以提高效率,转换流(InputStreamReader、OutputStreamWriter)用于字节流和字符流之间的转换,以及过滤流...

Global site tag (gtag.js) - Google Analytics