删除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. }  

你可能感兴趣的:(的,中,origin)