[size=large]在使用Citeulike[url]http://citeulike.org/[/url]导出bib文件时,发现导出的文件在WinEdt中无法被识别。。。也就是\cite{}后不弹出提示
后来发现是有中文文献的缘故。。。。干脆写了个小程序去除中文字符。
顺带去除citeulike开头的行。[/size]
[color=blue][size=x-large]程序功能:[/size][/color]
[list]
[*]删除当前文件夹下的bib文件中以"citeulike" 开头(不含空格)的行
[*]非ASCII字符的行。
[*]原文件名称加.origin
[*]生成的文件与原文件同名
[/list]
[color=red][size=large]编译好的Jar文件见附件[/size][/color]
后来发现是有中文文献的缘故。。。。干脆写了个小程序去除中文字符。
顺带去除citeulike开头的行。[/size]
[color=blue][size=x-large]程序功能:[/size][/color]
[list]
[*]删除当前文件夹下的bib文件中以"citeulike" 开头(不含空格)的行
[*]非ASCII字符的行。
[*]原文件名称加.origin
[*]生成的文件与原文件同名
[/list]
[color=red][size=large]编译好的Jar文件见附件[/size][/color]
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();
}
}