有些项目中会要求代码解析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. C语言所有运算符及优先级、结合性

    C 语言所有运算符及优先级.结合性 参考:<C Primer Plus 第六版> Tip:有关优先级.结合性的表格在最后面. [1]算数运算符 '+'("加号")(二元 ...

  2. [scrapy]一个简单的scrapy爬虫demo

    一个简单的scrapy爬虫demo 爬取豆瓣top250的电影名称+电影口号 使用到持久化流程: 爬虫文件爬取到数据后,需要将数据封装到items对象中. 使用yield关键字将items对象提交给p ...

  3. .NET微信网页开发之网页授权获取用户基本信息

    开发背景 当用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑.我们一般通过用户网页授权来无感实现用户登录,并获取用户的微信信息. 注意:用户管理类 ...

  4. 关于C#接口的用法详细解答,附上案例说明!

    接口 C#中的接口是一种定义了一组方法.属性和事件的类型.它只包含成员的声明,而不包含任何实现.接口可以被类通过实现的方式使用,从而使类能够具有接口定义的行为. 接口在C#中被定义为使用interfa ...

  5. 2 与HTTP相关的各种概念

    目录 1 与HTTP相关的各种应用 1 网络世界 2 浏览器 3 Web服务器 4 CDN 5 爬虫 2 与HTTP相关的各种协议 1 HTML 2 编程语言 3 WebService 4 WAF 1 ...

  6. 'parent.relativePath' of POM com.qbb:log_record_elegant:1.0-SNAPSHOT points at com.qbb:qiu_code instead of org.springframework.boot:spring-boot-starter-parent

    完整的错误: 'parent.relativePath' of POM com.qbb:log_record_elegant:1.0-SNAPSHOT (F:\QbbCode\qiu_code\log ...

  7. CompletableFuture异步编程

    1.创建 /** * public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier ...

  8. 【scikit-learn基础】--『预处理』之 正则化

    数据的预处理是数据分析,或者机器学习训练前的重要步骤.通过数据预处理,可以 提高数据质量,处理数据的缺失值.异常值和重复值等问题,增加数据的准确性和可靠性 整合不同数据,数据的来源和结构可能多种多样, ...

  9. JXNU acm选拔赛 壮壮的数组

    壮壮的数组 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submiss ...

  10. 华为防火墙1day?

    背景信息 缺省情况下,FW通过8887端口提供内置的本地Portal认证页面,用户可以主动访问或HTTP重定向至认证页面(https://接口IP地址:8887)进行本地Portal认证. 当企业部署 ...