java读取解析endnote文件
有些项目中会要求代码解析endnote文献资料获取一些标准的信息,例如XX在某著名期刊上发表了某篇文章,关于发表文章的这个事情的描述就会给坐着一个endnote文件来记录文章名称、作者、期刊名称、出版社等信息。
这些信息如果要记录在某个系统中,用户不愿意自己填写那些信息,他更愿意上传endnote文件让系统自己解析数据。网上找了一堆也没发现一个写的好的,找了一个自己改了改清晰多了,贡献给大家。
下面直接上代码看java如何解析endnote文件
一、依赖
pom文件:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency> <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency> <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency> <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.9</version>
</dependency> <dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency> <dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
二、相关的bean

package com.example.demo.endNote; import java.util.List;
/**
* 文献基本信息
*
*/
public class DocInfo { private String Author;//作者
private String Type;//文献类型
private String Title;//标题
private List<String> Authors;//作者
private String Journal;//文献来源/刊名
private String Volume;//卷号
private String Issue;//期号
private String PageScope;//页码范围
private String ISSN;//国际刊号
private String Year;//出版年份
private String Publisher;//出版单位 public String getAuthor() {
return Author;
} public void setAuthor(String author) {
Author = author;
} public String getType() {
return Type;
} public void setType(String type) {
Type = type;
} public String getTitle() {
return Title;
} public void setTitle(String title) {
Title = title;
} public List<String> getAuthors() {
return Authors;
} public void setAuthors(List<String> authors) {
Authors = authors;
} public String getJournal() {
return Journal;
} public void setJournal(String journal) {
Journal = journal;
} public String getVolume() {
return Volume;
} public void setVolume(String volume) {
Volume = volume;
} public String getIssue() {
return Issue;
} public void setIssue(String issue) {
Issue = issue;
} public String getPageScope() {
return PageScope;
} public void setPageScope(String pageScope) {
PageScope = pageScope;
} public String getISSN() {
return ISSN;
} public void setISSN(String ISSN) {
this.ISSN = ISSN;
} public String getYear() {
return Year;
} public void setYear(String year) {
Year = year;
} public String getPublisher() {
return Publisher;
} public void setPublisher(String publisher) {
Publisher = publisher;
} @Override
public String toString() {
return "DocInfo{" +
"Type='" + Type + '\'' +
", Title='" + Title + '\'' +
", Authors=" + Authors +
", Journal='" + Journal + '\'' +
", Volume='" + Volume + '\'' +
", Issue='" + Issue + '\'' +
", PageScope='" + PageScope + '\'' +
", ISSN='" + ISSN + '\'' +
", Year='" + Year + '\'' +
", Publisher='" + Publisher + '\'' +
'}';
}
}
三、实现方法和主类

package com.example.demo.endNote; import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List; public class EndNoteProcessor { //主类启动方法
public static void main(String[] args) {
EndNoteProcessor p= new EndNoteProcessor();
DocInfo d=p.process("E:\\test.enw");
System.out.println(d.toString());
} //读取endnote文件主要方法
public DocInfo process(String fileName) {
DocInfo d = new DocInfo(); try {
String encoding = "utf-8";
File file = new File(fileName);
if (file.isFile() && file.exists()) { // 判断文件是否存在
InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);// 考虑到编码格式
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null; List<String> Authors = new ArrayList<String>();
while ((lineTxt = bufferedReader.readLine()) != null) {
System.out.println(lineTxt); if (lineTxt != null && !lineTxt.equals("")) { //文献类型
if (lineTxt.startsWith("%0")) {
d.setType(lineTxt.substring("%0".length() + 1));
}
//题目
if (lineTxt.startsWith("%T")) {
d.setTitle(lineTxt.substring("%T".length() + 1));
}
//作者 可能有多个作者
if (lineTxt.startsWith("%A")) {
Authors.add(lineTxt.substring("%A".length() + 1));
}
//期刊名
if (lineTxt.startsWith("%J")) {
d.setJournal(lineTxt.substring("%J".length() + 1));
}
//卷号
if (lineTxt.startsWith("%V")) {
d.setVolume(lineTxt.substring("%V".length() + 1));
} //期号
if (lineTxt.startsWith("%N")) {
d.setIssue(lineTxt.substring("%N".length() + 1));
}
//页数
if (lineTxt.startsWith("%P")) {
d.setPageScope(lineTxt.substring("%P".length() + 1));
} //期刊号
if (lineTxt.startsWith("%@")) {
d.setISSN(lineTxt.substring("%@".length() + 1));
}
//发表时间
if (lineTxt.startsWith("%D")) {
d.setYear(lineTxt.substring("%D".length() + 1));
}
//出版社
if (lineTxt.startsWith("%I")) {
d.setPublisher(lineTxt.substring("%I".length() + 1));
}
}
//添加作者信息
d.setAuthors(Authors);
}
read.close();
} else {
System.out.println("找不到指定的文件");
}
} catch (Exception e) {
System.out.println("读取文件内容出错");
e.printStackTrace();
}
return d;
} }
四、代码中E:\\test.enw中的内容

%0 Journal Article
%T 题目测试
%A 王丽文
%A 李四
%J 江苏商论
%V 第一卷
%N 06
%P 87-89+103
%@ 1009-0061
%D 2021
%I 测试出版社

java读取解析endnote文件的更多相关文章
- java读取解析application.yml
java读取解析application.yml 不用依赖spring容器,可单独使用. bug已修改... 第一步.首先要2个jar <!-- properties和yaml格式化 --> ...
- boost::property_tree读取解析.xml文件
boost::property_tree读取解析.xml文件 1)read_xml 支持中文路径 boost::property_tree::wptree wpt; std::locale:: ...
- boost::property_tree读取解析ini文件--推荐
boost::property_tree读取解析ini文件 #include "stdafx.h" #include <iostream> #include <b ...
- JAVA简便解析json文件
JAVA简便解析json文件 首先放上我要解析的json文件: { "resultcode":"200", "reason":"S ...
- java读取 500M 以上文件,java读取大文件
java 读取txt,java读取大文件 设置缓存大小BUFFER_SIZE ,Config.tempdatafile是文件地址 来源博客http://yijianfengvip.blog.163.c ...
- Java jdom解析xml文件带冒号的属性
Java jdom解析xml文件带冒号的属性 转载请标明出处: https://dujinyang.blog.csdn.net/article/details/99644824 本文出自:[奥特曼超人 ...
- java opencsv解析csv文件
记一次使用opencsv解析csv文件时碰到的坑 最近在开发过程中需要解析csv文件,公司用的解析工具是opencsv,在根据opencsv的官方文档去解析时发现csv文件中含有繁体字,使用其自带的C ...
- Java读取批量Excel文件
1.首先基础知识: 原文链接:https://blog.csdn.net/baidu_39298625/article/details/105842725 一 :简介 开发中经常会设计到excel的处 ...
- Java环境解析apk文件信息
概述:Java解析apk文件,获取apk文件里的包名,版本号,图标文件等; 功能:可以提供给windows和linux平台使用; 原理:利用aapt.exe或者aapt这些anroid平台解析apk文 ...
- C++ 中使用boost::property_tree读取解析ini文件
boost 官网 http://www.boost.org/ 下载页面 http://sourceforge.net/projects/boost/files/boost/1.53.0/ 我下载的是 ...
随机推荐
- C#中的并行处理、并行查询的方法你用对了吗?
Parallel.ForEach Parallel.ForEach 是一个用于在集合上并行执行迭代操作的强大工具.它通过有效地利用多核处理器的能力来提高性能.Parallel.ForEach 不仅能够 ...
- vertx的学习总结4之异步数据和事件流
一.异步数据和事件流 1.为什么流是事件之上的一个有用的抽象? 2.什么是背压,为什么它是异步生产者和消费者的基础? 3.如何从流解析协议数据? 1. 答:因为它能够将连续的事件序列化并按照顺序进行 ...
- [NOI online2022提高B] 讨论
题目描述 有 \(n\) 个人正在打模拟赛,模拟赛有 \(n\) 道题目. 有两人都会的题目并且没有人会的题目包含另一个人时,两者之间才会讨论. (定义第 ii 个人会的题目的集合为 \(S_i\) ...
- net8获取泛微token以及访问api示例
工作中涉及到调用泛微的场景,官方的示例又臭又长,抽空用NET8简化了写法,为了简化http访问,用了Flurl.Http这个库.在座各位大佬,我们直接就看代码了 using System.Secu ...
- 【scikit-learn基础】--『预处理』之 分类编码
数据的预处理是数据分析,或者机器学习训练前的重要步骤.通过数据预处理,可以 提高数据质量,处理数据的缺失值.异常值和重复值等问题,增加数据的准确性和可靠性 整合不同数据,数据的来源和结构可能多种多样, ...
- 深入 K8s 网络原理(二)- Service iptables 模式分析
目录 1. 概述 2. 准备 Service 和 Pods 资源 3. K8s 里 Service 的实现原理 3.1 kube-proxy 组件 3.2 iptables 简介 3.3 iptabl ...
- idea2020.1.3汉化包报错问题
已解决:idea2020.1.3汉化包报错问题 问题描述:插件市场提供的版本不对.不兼容,所以需要手动下载安装 这里附上文件 https://wwsi.lanzouq.com/b03czdtwf 密码 ...
- windows server 2019 IIS网站属性上没有asp.net标签 ,aspnet_regiis -i 不能安装用命令解决
用如下命令安装: dism /online /enable-feature /featurename:IIS-ASPNET45 /all
- 降低node版本,怎么降低node版本
降低node版本,怎么降低node版本? 部分老旧项目需要使用低版本的node,网上很多是无效的,高版本无法直接安装低版本node,但是低版本nodejs可以安装部分高版本node,从而达到升级效果. ...
- AI与低代码解锁无限可能
前言 近年来,人工智能(AI)和低代码开发技术逐渐成为数字化转型的重要推动力.AI作为一项具有革命性潜力的技术,正在改变我们生活的方方面面.而低代码开发则提供了一种快速构建应用程序的方法,使得开发者无 ...