刪除citeulike導出的bib文件中的中文字符,使之能在WinEdt中讀取

在使用Citeulikehttp://citeulike.org/導出bib文件時,發現導出的文件在WinEdt中無法被識別。。。也就是\cite{}後不彈出提示
後來發現是有中文文獻的緣故。。。。乾脆寫了個小程序去除中文字符。
順帶去除citeulike開頭的行。


程序功能:
  • 刪除當前文件夾下的bib文件中以"citeulike" 開頭(不含空格)的行
  • 非ASCII字符的行。
  • 原文件名稱加.origin
  • 生成的文件與原文件同名

編譯好的Jar文件見附件

Java代碼 複製代碼 收藏代碼
  1. package lc.bibtex;
  2. import java.io.*;
  3. import javax.swing.JOptionPane;
  4. public class DealWithCiteulikeBibFile {
  5. //刪除當前文件夾下的bib文件中以"citeulike" 開頭(不含空格)的行,以及非ASCII字符的行。
  6. //原文件名稱加.origin;生成的文件與原文件同名
  7. public static void main(String[] args) throws IOException {
  8. //找到.bib文件
  9. File[] bibFiles = new File(".").listFiles(new FileFilter() {
  10. @Override
  11. public boolean accept(File pathname) {
  12. return pathname.isFile() && pathname.getName().endsWith(".bib");
  13. }
  14. });
  15. String[] toDelete = { "citeulike" };//刪除以 "citeulike" 開頭的行
  16. boolean deleteNotASCII = true;//刪除含非ASCII字符的行,否則ctex讀取錯誤。。。。
  17. boolean deleteOriginFileIfNoChange = true;//如果生成的文件與原文件相同,則刪除原文件
  18. for (File f : bibFiles) {
  19. File bak = new File(f.getCanonicalPath() + ".origin");
  20. if (bak.exists())
  21. bak.delete();
  22. boolean b = f.renameTo(bak);//現在備份文件爲原文件了!!
  23. if (!b) {
  24. JOptionPane.showMessageDialog(null, "文件 " + f.getName()
  25. + " 或文件 " + bak.getName() + "可能正被其他程序訪問!");
  26. continue;
  27. }
  28. deleteLinesNotASCII_or_StartWith(bak, f, toDelete, deleteNotASCII,
  29. deleteOriginFileIfNoChange);
  30. }
  31. }
  32. /**
  33. * 刪除除空格外以toDelete中字符串開頭的單詞(可選),以及含有非ASCII字符的行(可選)
  34. *
  35. * @param originFile
  36. * 原文件
  37. * @param newFileName
  38. * 輸出文件
  39. * @param toDelete
  40. * 刪除除空格外以toDelete中字符串開頭的單詞,toDelete可爲null,視爲不選該項
  41. * @param deleteNotASCII
  42. * 是否刪除含非ASCII字符的行
  43. * @param deleteOriginFileIfNoChange
  44. * 當新文件和原文件相同時,是否刪除原文件
  45. * @throws IOException
  46. */
  47. public static void deleteLinesNotASCII_or_StartWith(File originFile,
  48. File newFile, String[] toDelete, boolean deleteNotASCII,
  49. boolean deleteOriginFileIfNoChange) throws IOException {
  50. BufferedReader bf = new BufferedReader(new FileReader(originFile));
  51. PrintWriter writer = new PrintWriter(newFile);
  52. boolean hasChanged = false;
  53. loop: while (bf.ready()) {
  54. String line = bf.readLine();
  55. String lineTrim = line.trim();
  56. if (toDelete != null)
  57. for (int i = 0; i < toDelete.length; i++) {//刪除除空格外以toDelete中字符串開頭的單詞
  58. if (lineTrim.startsWith(toDelete[i])) {
  59. hasChanged = true;
  60. continue loop;
  61. }
  62. }
  63. for (int i = 0; i < lineTrim.length(); i++) {//刪除該行中含有非ASCII字符的行
  64. if (lineTrim.charAt(i) > 127) {
  65. hasChanged = true;
  66. continue loop;
  67. }
  68. }
  69. writer.println(line);
  70. }
  71. bf.close();
  72. writer.close();
  73. if (!hasChanged && deleteOriginFileIfNoChange)
  74. originFile.delete();
  75. }
  76. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章