java对指定目录下文件读写操作介绍
程序员文章站
2023-11-29 22:43:04
最近因为项目的国际化的需要,需要对整个项目的100来个插件做国际化,这是一件痛苦的事情,因为纯体力劳动。为了省点工作量,想着能不能写个程序批处理了,减少点工作量,于是就有了...
最近因为项目的国际化的需要,需要对整个项目的100来个插件做国际化,这是一件痛苦的事情,因为纯体力劳动。为了省点工作量,想着能不能写个程序批处理了,减少点工作量,于是就有了下面的代码。
1.读取指定的(.java)文件:
public static string readfile(string path) throws ioexception {
file f = new file(path);
stringbuffer res = new stringbuffer();
string filepathstr = f.getpath();
system.out.println("获取文件的路径:::::::"+filepathstr);
fileinputstream fis = new fileinputstream(f);
inputstreamreader isr = new inputstreamreader(fis,charset.forname("gbk")); //以gbk编码打开文本文件
bufferedreader br = new bufferedreader(isr, 8192 * 8);
string line = null;
int linenum = 0;
while((line=br.readline())!=null) {
linenum ++;
res.append(line+"此处可以添加你自己的字符串处理逻辑"+"\r\n");
}
br.close();
return res.tostring();
}
2.读取的文件内容信息写到指定的(.java)文件
public static boolean writefile(string cont, string path) {
try {
file dist = new file(path);
outputstreamwriter writer = new outputstreamwriter(new fileoutputstream(dist),"gbk");
writer.write(cont);
writer.flush();
writer.close();
return true;
} catch (ioexception e) {
e.printstacktrace();
return false;
}
}
3.查找指定目录下所有符合条件的.java文件,并更新文件信息
/**
* 查找文件
* @param f
* @throws ioexception
*/
public static void findfile(file f) throws ioexception {
if(f.exists()) {
if(f.isdirectory()) {
for(file fs:f.listfiles(ff)) {
findfile(fs);
}
} else {
updatefile(f);
}
}
}
/**
* 逐行读java文件
* @param f
* @throws ioexception
*/
private static void updatefile(file f) throws ioexception {
string filepathstr = f.getpath();
system.out.println("开始读取文件的路径:::::::"+filepathstr);
fileinputstream fis = new fileinputstream(f);
inputstreamreader isr = new inputstreamreader(fis,charset.forname("gbk")); //以gbk编码打开文本文件
bufferedreader br = new bufferedreader(isr, 8192 * 8);
string line = null;
int linenum = 0;
stringbuffer res = new stringbuffer();
while((line=br.readline())!=null) {
string updatestr= updatestr(line);
res.append(updatestr+"\r\n");
if(!line.trim().equals(updatestr.trim())) {
linenum ++;
}
}
br.close();
//如果文件有修改,则修改后的文件,覆盖原有文件
if(linenum>0) {
system.out.println("=============================");
system.out.println("filepathstr:"+filepathstr);
system.out.println("文件修改了:"+linenum+"处。");
system.out.println("=============================");
string cont = res.tostring();
readwritefile.write(cont, filepathstr);
}
}
/**
* 验证读取的字符串信息
* 和更新字符串信息
* @param str
*/
private static string updatestr(string str) {
//判断字符串是否是需要更新的字符串
boolean isok = filterstr(str);
int strnum = stringvalidation.strnum(str, stringvalidation.ch);
if(isok || strnum == 0) {
return str;
} else {
string temp = "";
for(int i=1;i<=strnum/2;i++) {
temp += " //$non-nls-"+i+"$"; //需要添加的字符
}
str = str+temp;
}
return str;
}
//过滤文件类型
private static filefilter ff = new filefilter() {
public boolean accept(file pathname) {
string path = pathname.getname().tolowercase();
logger.info("filefilter path::::"+path);
//只匹配 .java 结尾的文件
if (pathname.isdirectory() || path.endswith(".java")) {
return true;
}
return false;
}
};
/**
* 过滤掉不需要处理的字符串
* @param str
* @return
*/
public static boolean filterstr(string str) {
boolean isok = false;
//过滤字符串
isok = (str.indexof("import ")>=0)
|| (str.indexof("package ")>=0)
|| (str.indexof(" class ")>=0)
|| (str.indexof("//$non-nls")>=0)
|| (str.indexof("//")==0)
|| (str.indexof("/*")>=0)
|| (str.indexof("*")>=0)
|| (str.trim().indexof("@")==0)
|| (str.indexof("\"")==-1)
|| ("".equals(str))
|| isch(str);
return isok;
}
/**
* 验证字符串是否含有中文字符
* @param str
* @return
*/
public static boolean isch(string str) {
pattern pa = pattern.compile("[\u4e00-\u9fa0]");
matcher m = pa.matcher(str);
boolean isok = m.find();
return isok;
}
总结:当我们拿到一个别人给的需求,先不要急于去处理,先分析,再分析,然后做出最优的解决方案,处理好这项工作。
1.读取指定的(.java)文件:
复制代码 代码如下:
public static string readfile(string path) throws ioexception {
file f = new file(path);
stringbuffer res = new stringbuffer();
string filepathstr = f.getpath();
system.out.println("获取文件的路径:::::::"+filepathstr);
fileinputstream fis = new fileinputstream(f);
inputstreamreader isr = new inputstreamreader(fis,charset.forname("gbk")); //以gbk编码打开文本文件
bufferedreader br = new bufferedreader(isr, 8192 * 8);
string line = null;
int linenum = 0;
while((line=br.readline())!=null) {
linenum ++;
res.append(line+"此处可以添加你自己的字符串处理逻辑"+"\r\n");
}
br.close();
return res.tostring();
}
2.读取的文件内容信息写到指定的(.java)文件
复制代码 代码如下:
public static boolean writefile(string cont, string path) {
try {
file dist = new file(path);
outputstreamwriter writer = new outputstreamwriter(new fileoutputstream(dist),"gbk");
writer.write(cont);
writer.flush();
writer.close();
return true;
} catch (ioexception e) {
e.printstacktrace();
return false;
}
}
3.查找指定目录下所有符合条件的.java文件,并更新文件信息
复制代码 代码如下:
/**
* 查找文件
* @param f
* @throws ioexception
*/
public static void findfile(file f) throws ioexception {
if(f.exists()) {
if(f.isdirectory()) {
for(file fs:f.listfiles(ff)) {
findfile(fs);
}
} else {
updatefile(f);
}
}
}
/**
* 逐行读java文件
* @param f
* @throws ioexception
*/
private static void updatefile(file f) throws ioexception {
string filepathstr = f.getpath();
system.out.println("开始读取文件的路径:::::::"+filepathstr);
fileinputstream fis = new fileinputstream(f);
inputstreamreader isr = new inputstreamreader(fis,charset.forname("gbk")); //以gbk编码打开文本文件
bufferedreader br = new bufferedreader(isr, 8192 * 8);
string line = null;
int linenum = 0;
stringbuffer res = new stringbuffer();
while((line=br.readline())!=null) {
string updatestr= updatestr(line);
res.append(updatestr+"\r\n");
if(!line.trim().equals(updatestr.trim())) {
linenum ++;
}
}
br.close();
//如果文件有修改,则修改后的文件,覆盖原有文件
if(linenum>0) {
system.out.println("=============================");
system.out.println("filepathstr:"+filepathstr);
system.out.println("文件修改了:"+linenum+"处。");
system.out.println("=============================");
string cont = res.tostring();
readwritefile.write(cont, filepathstr);
}
}
/**
* 验证读取的字符串信息
* 和更新字符串信息
* @param str
*/
private static string updatestr(string str) {
//判断字符串是否是需要更新的字符串
boolean isok = filterstr(str);
int strnum = stringvalidation.strnum(str, stringvalidation.ch);
if(isok || strnum == 0) {
return str;
} else {
string temp = "";
for(int i=1;i<=strnum/2;i++) {
temp += " //$non-nls-"+i+"$"; //需要添加的字符
}
str = str+temp;
}
return str;
}
//过滤文件类型
private static filefilter ff = new filefilter() {
public boolean accept(file pathname) {
string path = pathname.getname().tolowercase();
logger.info("filefilter path::::"+path);
//只匹配 .java 结尾的文件
if (pathname.isdirectory() || path.endswith(".java")) {
return true;
}
return false;
}
};
/**
* 过滤掉不需要处理的字符串
* @param str
* @return
*/
public static boolean filterstr(string str) {
boolean isok = false;
//过滤字符串
isok = (str.indexof("import ")>=0)
|| (str.indexof("package ")>=0)
|| (str.indexof(" class ")>=0)
|| (str.indexof("//$non-nls")>=0)
|| (str.indexof("//")==0)
|| (str.indexof("/*")>=0)
|| (str.indexof("*")>=0)
|| (str.trim().indexof("@")==0)
|| (str.indexof("\"")==-1)
|| ("".equals(str))
|| isch(str);
return isok;
}
/**
* 验证字符串是否含有中文字符
* @param str
* @return
*/
public static boolean isch(string str) {
pattern pa = pattern.compile("[\u4e00-\u9fa0]");
matcher m = pa.matcher(str);
boolean isok = m.find();
return isok;
}
总结:当我们拿到一个别人给的需求,先不要急于去处理,先分析,再分析,然后做出最优的解决方案,处理好这项工作。