最近、プロジェクトの国際化の必要性から、プロジェクト全体で約100個のプラグインを国際化する必要があり、これは完全に手作業なので大変です。作業を省くためにバッチ処理プログラムを書いて負荷を軽減しようと考え、次のコードを思いつきました。
1. 指定された (.java) ファイルを読み取ります。
次のようにコードをコピーします。
public static String readFile(String path) throws IOException {
ファイル f = 新しいファイル(パス);
StringBuffer res = new StringBuffer();
文字列 filePathStr = f.getPath();
System.out.println("ファイルのパスを取得:::::::"+filePathStr);
FileInputStream fis = 新しい 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.close();
res.toString() を返します。
}
2. 読み込んだファイル内容情報を指定した(.java)ファイルに書き込みます。次のようにコードをコピーします。
public static boolean writeFile(String cont, String path) {
試す {
ファイル dist = 新しいファイル (パス);
OutputStreamWriter ライター = new OutputStreamWriter(new FileOutputStream(dist),"GBK");
Writer.write(続き);
ライター.flush();
Writer.close();
true を返します。
} キャッチ (IOException e) {
e.printStackTrace();
false を返します。
}
}
3. 指定されたディレクトリ内のすべての修飾された .java ファイルを検索し、ファイル情報を更新します。次のようにコードをコピーします。
/**
* ファイルの検索
* @param f
* @throwsIOException
*/
public static void findFile(File f) throws IOException {
if(f.exists()) {
if(f.isDirectory()) {
for(ファイル fs:f.listFiles(ff)) {
findFile(fs);
}
} それ以外 {
updateFile(f);
}
}
}
/**
* Java ファイルを 1 行ずつ読み取ります
* @param f
* @throwsIOException
*/
private static void updateFile(File f) throws IOException {
文字列 filePathStr = f.getPath();
System.out.println("ファイルの読み取りを開始するパス:::::::"+filePathStr);
FileInputStream fis = 新しい 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.close();
//ファイルが変更されている場合、変更されたファイルは元のファイルを上書きします。
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) {
文字列を返します。
} それ以外 {
文字列温度 = "";
for(int i=1;i<=strNum/2;i++) {
temp += " //$NON-NLS-"+i+"$" //追加する文字
}
str = str+temp;
}
文字列を返します。
}
//ファイルタイプをフィルタリングする
private static FileFilter ff = new FileFilter() {
public boolean accept(ファイルパス名) {
文字列パス = pathname.getName().toLowerCase();
logger.info("FileFilter パス::::"+パス);
// .java で終わるファイルのみに一致します
if (pathname.isDirectory() || path.endsWith(".java")) {
true を返します。
}
false を返します。
}
};
/**
* 処理する必要のない文字列を除外します。
* @param str
* @戻る
*/
public static boolean 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))
|| はCh(str);
isokを返します。
}
/**
* 文字列に中国語の文字が含まれているかどうかを確認します
* @param str
* @戻る
*/
public static boolean isCh(String str) {
パターン pa = Pattern.compile("[/u4E00-/u9FA0]");
マッチャー m = pa.matcher(str);
ブール値 isok = m.find();
isokを返します。
}
要約:他人から要求を受けたときは、急いで対応しないで、まずそれを分析し、次にそれを分析して、最適なソリューションを作成して仕事をうまく処理します。