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

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();
}
}

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值