有些项目中会要求代码解析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文件的更多相关文章

  1. java读取解析application.yml

    java读取解析application.yml 不用依赖spring容器,可单独使用. bug已修改... 第一步.首先要2个jar <!-- properties和yaml格式化 --> ...

  2. boost::property_tree读取解析.xml文件

    boost::property_tree读取解析.xml文件 1)read_xml 支持中文路径  boost::property_tree::wptree wpt;    std::locale:: ...

  3. boost::property_tree读取解析ini文件--推荐

    boost::property_tree读取解析ini文件 #include "stdafx.h" #include <iostream> #include <b ...

  4. JAVA简便解析json文件

    JAVA简便解析json文件 首先放上我要解析的json文件: { "resultcode":"200", "reason":"S ...

  5. java读取 500M 以上文件,java读取大文件

    java 读取txt,java读取大文件 设置缓存大小BUFFER_SIZE ,Config.tempdatafile是文件地址 来源博客http://yijianfengvip.blog.163.c ...

  6. Java jdom解析xml文件带冒号的属性

    Java jdom解析xml文件带冒号的属性 转载请标明出处: https://dujinyang.blog.csdn.net/article/details/99644824 本文出自:[奥特曼超人 ...

  7. java opencsv解析csv文件

    记一次使用opencsv解析csv文件时碰到的坑 最近在开发过程中需要解析csv文件,公司用的解析工具是opencsv,在根据opencsv的官方文档去解析时发现csv文件中含有繁体字,使用其自带的C ...

  8. Java读取批量Excel文件

    1.首先基础知识: 原文链接:https://blog.csdn.net/baidu_39298625/article/details/105842725 一 :简介 开发中经常会设计到excel的处 ...

  9. Java环境解析apk文件信息

    概述:Java解析apk文件,获取apk文件里的包名,版本号,图标文件等; 功能:可以提供给windows和linux平台使用; 原理:利用aapt.exe或者aapt这些anroid平台解析apk文 ...

  10. C++ 中使用boost::property_tree读取解析ini文件

    boost 官网 http://www.boost.org/ 下载页面 http://sourceforge.net/projects/boost/files/boost/1.53.0/ 我下载的是  ...

随机推荐

  1. 第二章 若依JFlow流程模型设计

    若依-JFlow框架如何拉取.配置并运行请查看这篇文章:<第一章 若依-JFlow的配置与启动> 上一节我们讲解了如何拉取若依-JFlow框架代码并配置运行,这一部分我们就以公司员工请假的 ...

  2. 渐进式web全栈:blazor web app

    前言 本文要说的这种开发模式,这种模式并不是只有blazor支持,js中有一样的方案next.js nuxt.js:blazor还有很多其它内容,本文近关注渐进式开发模式. 是的,前后端是主流,不过以 ...

  3. Selenium浏览器属性、提取数据

    浏览器属性 在使用selenium过程中,实例化driver对象后,driver对象有一些常用的属性和方法 driver.page_source 当前标签页浏览器渲染之后的网页源代码. driver. ...

  4. 【scikit-learn基础】--『监督学习』之 LASSO回归

    LASSO(Least Absolute Shrinkage and Selection Operator)回归模型一般都是用英文缩写表示,硬要翻译的话,可翻译为 最小绝对收缩和选择算子. 它是一种线 ...

  5. 整一个工具类【根据URL地址获取file文件对象】

    整一个工具类[根据URL地址获取file文件对象] 直接将网络url文件转换为file对象 import java.io.*; import java.net.URL; public class Im ...

  6. OpenEuler22.03安装PostgreSQL15.5并配置一主二从

    环境准备 序号 IP 标识(hostname) CPU/内存配置 系统盘 数据盘 1 192.168.8.190 pg01 8C+16G 80G 500G 2 192.168.8.191 pg02 8 ...

  7. Shell脚本实践总结

    对比大小 符号用法:(必须使用双括号) < 小于     (( "$a" < "$b" ))  <= 小于等于   (( "$a&q ...

  8. Oracle数据库运维场景下,智能运维如何落地生根?

    简介: 「智能运维大数据平台」是一款开箱即用的运维监控平台,通过特有的平台功能可以将企业的基础架构.应用程序.日志管理结合在一起,提供统一采集.统一存储.关联分析.统一监控企业业务保障能力,保障企业业 ...

  9. 当创建pvc后,kubernetes组件如何协作

    本文分享自华为云社区<当创建一个pvc后,kubernetes会发生什么?>,作者:可以交个朋友. 一.背景 外部存储接入 Kubernetes 的方式主要有两种:In-Tree 和 Ou ...

  10. K8S系列一:概念入门

    K8S系列一:概念入门 写在前面 本文组织方式: K8S的架构.作用和目的.需要首先对K8S整体有所了解. K8S是什么? 为什么是K8S? K8S怎么做? K8S的重要概念,即K8S的API对象.要 ...