後來發現是有中文文獻的緣故。。。。乾脆寫了個小程序去除中文字符。
順帶去除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();
- }
- }