최근에는 프로젝트의 국제화 필요성으로 인해 전체 프로젝트에서 약 100개의 플러그인을 국제화해야 하는데 이는 순전히 수작업이기 때문에 괴로운 일입니다. 일을 조금이라도 아끼고자 일괄처리 프로그램을 작성해서 작업량을 줄여볼까 고민하다가 아래와 같은 코드를 생각해냈습니다.
1. 지정된(.java) 파일을 읽습니다 .
다음과 같이 코드 코드를 복사합니다 .
공개 정적 문자열 readFile(문자열 경로)이 IOException을 발생시킵니다.
파일 f = 새 파일(경로);
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);
문자열 라인 = null;
int linenum = 0;
while((line=br.readLine())!=null) {
라인넘++;
res.append(line+"여기에 자신만의 문자열 처리 논리를 추가할 수 있습니다."+"/r/n");
}
br.닫기();
res.toString()을 반환합니다.
}
2. 읽은 파일 내용 정보를 지정된(.java) 파일에 씁니다. 다음과 같이 코드 코드를 복사합니다 .
공개 정적 부울 writeFile(문자열 연속, 문자열 경로) {
노력하다 {
파일 dist = 새 파일(경로);
OutputStreamWriter 작가 = new OutputStreamWriter(new FileOutputStream(dist),"GBK");
작가.쓰기(계속);
작가.플러시();
작가.닫기();
사실을 반환;
} 잡기(IOException e) {
e.printStackTrace();
거짓을 반환;
}
}
3. 지정된 디렉터리에서 모든 정규화된 .java 파일을 찾아 파일 정보를 업데이트합니다. 다음과 같이 코드 코드를 복사합니다 .
/**
* 파일 찾기
* @param f
* @throwsIOException
*/
public static void findFile(파일 f)이 IOException을 발생시킵니다.
if(f.exists()) {
if(f.isDirectory()) {
for(파일 fs:f.listFiles(ff)) {
findFile(fs);
}
} 또 다른 {
업데이트파일(f);
}
}
}
/**
* Java 파일을 한 줄씩 읽습니다.
* @param f
* @throwsIOException
*/
private static void updateFile(File f)이 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);
문자열 라인 = null;
int linenum = 0;
StringBuffer res = new StringBuffer();
while((line=br.readLine())!=null) {
문자열 updateStr= updateStr(line);
res.append(updateStr+"/r/n");
if(!line.trim().equals(updateStr.trim())) {
라인넘++;
}
}
br.닫기();
//파일이 수정된 경우 수정된 파일이 원본 파일을 덮어씁니다.
if(라인번호>0) {
System.out.println("=============================");
System.out.println("filePathStr:"+filePathStr);
System.out.println("파일이 "+linenum+"에서 수정되었습니다.");
System.out.println("=============================");
문자열 cont = res.toString();
ReadWriteFile.write(cont, filePathStr);
}
}
/**
* 읽은 문자열 정보를 확인
* 및 문자열 정보 업데이트
* @param str
*/
개인 정적 문자열 updateStr(String str) {
//문자열이 업데이트가 필요한 문자열인지 확인
부울 isok = filterStr(str);
int strNum = StringValidation.strNum(str, StringValidation.ch);
if(isok || strNum == 0) {
str을 반환;
} 또 다른 {
문자열 온도 = "";
for(int i=1;i<=strNum/2;i++) {
temp += " //$NON-NLS-"+i+"$" //추가할 문자
}
str = str+온도;
}
str을 반환;
}
//파일 형식 필터링
개인 정적 FileFilter ff = 새로운 FileFilter() {
public boolean accept(파일 경로명) {
문자열 경로 = pathname.getName().toLowerCase();
logger.info("파일 필터 경로::::"+path);
//.java로 끝나는 파일만 일치합니다.
if (pathname.isDirectory() || path.endsWith(".java")) {
사실을 반환;
}
거짓을 반환;
}
};
/**
* 처리할 필요가 없는 문자열을 필터링합니다.
* @param str
* @반품
*/
공개 정적 부울 filterStr(String str) {
부울 isok = false;
//필터 문자열
isok = (str.indexOf("import ")>=0)
|| (str.indexOf("패키지 ")>=0)
|| (str.indexOf(" 클래스 ")>=0)
|| (str.indexOf("//$NON-NLS")>=0)
|| (str.indexOf("//")==0)
|| (str.indexOf("/*")>=0)
|| (str.indexOf("*")>=0)
|| (str.trim().indexOf("@")==0)
|| (str.indexOf("/"")==-1)
|| ("".equals(str))
||
반환 isok;
}
/**
* 문자열에 한자가 포함되어 있는지 확인
* @param str
* @반품
*/
공개 정적 부울 isCh(String str) {
패턴 pa = Pattern.compile("[/u4E00-/u9FA0]");
일치자 m = pa.matcher(str);
부울 isok = m.find();
반환 isok;
}
요약: 다른 사람의 요구를 받으면 서두르지 말고 먼저 분석하고 분석한 다음 최적의 솔루션을 만들어 작업을 잘 처리하십시오.