后来发现是有中文文献的缘故。。。。干脆写了个小程序去除中文字符。
顺带去除citeulike开头的行。
程序功能:
- 删除当前文件夹下的bib文件中以"citeulike" 开头(不含空格)的行
- 非ASCII字符的行。
- 原文件名称加.origin
- 生成的文件与原文件同名
编译好的Jar文件见附件
package lc.bibtex; import java.io.*; import javax.swing.JOptionPane; public class DealWithCiteulikeBibFile { //删除当前文件夹下的bib文件中以"citeulike" 开头(不含空格)的行,以及非ASCII字符的行。 //原文件名称加.origin;生成的文件与原文件同名 public static void main(String[] args) throws IOException { //找到.bib文件 File[] bibFiles = new File(".").listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return pathname.isFile() && pathname.getName().endsWith(".bib"); } }); String[] toDelete = { "citeulike" };//删除以 "citeulike" 开头的行 boolean deleteNotASCII = true;//删除含非ASCII字符的行,否则ctex读取错误。。。。 boolean deleteOriginFileIfNoChange = true;//如果生成的文件与原文件相同,则删除原文件 for (File f : bibFiles) { File bak = new File(f.getCanonicalPath() + ".origin"); if (bak.exists()) bak.delete(); boolean b = f.renameTo(bak);//现在备份文件为原文件了!! if (!b) { JOptionPane.showMessageDialog(null, "文件 " + f.getName() + " 或文件 " + bak.getName() + "可能正被其他程序访问!"); continue; } deleteLinesNotASCII_or_StartWith(bak, f, toDelete, deleteNotASCII, deleteOriginFileIfNoChange); } } /** * 删除除空格外以toDelete中字符串开头的单词(可选),以及含有非ASCII字符的行(可选) * * @param originFile * 原文件 * @param newFileName * 输出文件 * @param toDelete * 删除除空格外以toDelete中字符串开头的单词,toDelete可为null,视为不选该项 * @param deleteNotASCII * 是否删除含非ASCII字符的行 * @param deleteOriginFileIfNoChange * 当新文件和原文件相同时,是否删除原文件 * @throws IOException */ public static void deleteLinesNotASCII_or_StartWith(File originFile, File newFile, String[] toDelete, boolean deleteNotASCII, boolean deleteOriginFileIfNoChange) throws IOException { BufferedReader bf = new BufferedReader(new FileReader(originFile)); PrintWriter writer = new PrintWriter(newFile); boolean hasChanged = false; loop: while (bf.ready()) { String line = bf.readLine(); String lineTrim = line.trim(); if (toDelete != null) for (int i = 0; i < toDelete.length; i++) {//删除除空格外以toDelete中字符串开头的单词 if (lineTrim.startsWith(toDelete[i])) { hasChanged = true; continue loop; } } for (int i = 0; i < lineTrim.length(); i++) {//删除该行中含有非ASCII字符的行 if (lineTrim.charAt(i) > 127) { hasChanged = true; continue loop; } } writer.println(line); } bf.close(); writer.close(); if (!hasChanged && deleteOriginFileIfNoChange) originFile.delete(); } }