Récemment, en raison de la nécessité d'internationaliser le projet, il a été nécessaire d'internationaliser environ 100 plug-ins dans l'ensemble du projet. C'est une chose pénible car il s'agit d'un travail purement manuel. Afin d'économiser du travail, j'ai pensé à écrire un programme de traitement par lots pour réduire la charge de travail, j'ai donc proposé le code suivant.
1. Lisez le fichier (.java) spécifié :
Copiez le code comme suit :
public static String readFile (String path) lance IOException {
Fichier f = nouveau fichier (chemin);
StringBuffer res = new StringBuffer();
Chaîne filePathStr = f.getPath();
System.out.println("Obtenir le chemin du fichier :::::::"+filePathStr);
FileInputStream fis = new FileInputStream(f);
InputStreamReader isr = new InputStreamReader(fis,Charset.forName("GBK")); //Ouvrir un fichier texte avec encodage gbk
BufferedReader br = nouveau BufferedReader(isr, 8192 * 8);
Ligne de chaîne = null ;
int linum = 0 ;
while((line=br.readLine())!=null) {
linum++;
res.append(line+"Vous pouvez ajouter votre propre logique de traitement de chaîne ici"+"/r/n");
}
br.close();
return res.toString();
}
2. Écrivez les informations sur le contenu du fichier lu dans le fichier spécifié (.java). Copiez le code comme suit :
public static boolean writeFile (String cont, String chemin) {
essayer {
Dist du fichier = nouveau fichier (chemin);
OutputStreamWriterwriter = new OutputStreamWriter(new FileOutputStream(dist),"GBK");
écrivain.write(suite);
écrivain.flush();
écrivain.close();
renvoie vrai ;
} catch (IOException e) {
e.printStackTrace();
renvoie faux ;
}
}
3. Recherchez tous les fichiers .java qualifiés dans le répertoire spécifié et mettez à jour les informations du fichier Copiez le code comme suit :
/**
* Rechercher des fichiers
* @param f
* @throwsIOException
*/
public static void findFile (Fichier f) lance IOException {
if(f.exists()) {
if(f.isDirectory()) {
for(Fichier fs:f.listFiles(ff)) {
findFichier(fs);
}
} autre {
updateFichier(f);
}
}
}
/**
* Lire les fichiers Java ligne par ligne
* @param f
* @throwsIOException
*/
private static void updateFile (File f) lance IOException {
Chaîne filePathStr = f.getPath();
System.out.println("Chemin pour commencer la lecture du fichier :::::::"+filePathStr);
FileInputStream fis = new FileInputStream(f);
InputStreamReader isr = new InputStreamReader(fis,Charset.forName("GBK")); //Ouvrir un fichier texte avec encodage gbk
BufferedReader br = nouveau BufferedReader(isr, 8192 * 8);
Ligne de chaîne = null ;
int linum = 0 ;
StringBuffer res = new StringBuffer();
while((line=br.readLine())!=null) {
Chaîne updateStr= updateStr(ligne);
res.append(updateStr+"/r/n");
if(!line.trim().equals(updateStr.trim())) {
linum++;
}
}
br.close();
//Si le fichier a été modifié, le fichier modifié écrasera le fichier d'origine.
si (numéro de ligne>0) {
System.out.println("==============================");
System.out.println("filePathStr:"+filePathStr);
System.out.println("Le fichier a été modifié à "+linenum+".");
System.out.println("==============================");
Chaîne cont = res.toString();
ReadWriteFile.write(suite, filePathStr);
}
}
/**
* Vérifiez les informations de la chaîne lue
* et mettre à jour les informations sur la chaîne
* @param chaîne
*/
chaîne statique privée updateStr (String str) {
// Détermine si la chaîne est une chaîne qui doit être mise à jour
booléen isok = filterStr(str);
int strNum = StringValidation.strNum(str, StringValidation.ch);
si(isok || strNum == 0) {
return str;
} autre {
Chaîne temp = "" ;
pour(int i=1;i<=strNum/2;i++) {
temp += " //$NON-NLS-"+i+"$" //Caractères à ajouter
}
str = str+temp;
}
return str;
}
//Filtrer les types de fichiers
FileFilter statique privé ff = new FileFilter() {
public boolean accept (chemin d'accès au fichier) {
Chemin de chaîne = chemin.getName().toLowerCase();
logger.info("Chemin du filtre ::::"+chemin);
// Ne correspond qu'aux fichiers se terminant par .java
if (pathname.isDirectory() || path.endsWith(".java")) {
renvoie vrai ;
}
renvoie faux ;
}
} ;
/**
* Filtrer les chaînes qui n'ont pas besoin d'être traitées
* @param chaîne
* @retour
*/
filtre booléen statique publicStr(String str) {
booléen isok = faux ;
//Filtrer la chaîne
isok = (str.indexOf("import ")>=0)
|| (str.indexOf("package")>=0)
|| (str.indexOf("classe")>=0)
|| (str.indexOf("//$NON-NLS")>=0)
|| (str.indexOf("//")==0)
|| (str.indexOf("/*")>=0)
|| (str.indexOf("*")>=0)
|| (str.trim().indexOf("@")==0)
|| (str.indexOf("/"")==-1)
|| ("".égal(str))
|| estCh(chaîne);
retour isok ;
}
/**
* Vérifiez si la chaîne contient des caractères chinois
* @param chaîne
* @retour
*/
public statique booléen isCh(String str) {
Modèle pa = Pattern.compile("[/u4E00-/u9FA0]");
Matcher m = pa.matcher(str);
isok booléen = m.find();
retour isok ;
}
Résumé : Lorsque nous recevons une demande des autres, ne vous précipitez pas pour la traiter d'abord, puis analysez-la, puis trouvez la solution optimale pour bien gérer le travail.