有些项目中会要求代码解析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. 京东面试:说说Cookie、Session和Token的区别?

    东子作为目前传统电商三巨头之一(其他还有阿里巴巴和拼多多),其面试题的难度也中规中矩,总体来说没有其他两家面试难度高,当然薪资也没有其他两家薪资高. 其中拼多多的薪资最为离谱,尤其是前几年,听说挖同行 ...

  2. [CF1364E] X-OR

    X-OR 题面翻译 题目描述 本题是交互题. 有一个固定的长度为 \(n\) 的排列 \(P\),其值域为 \([0,n-1]\),你可以进行不超过 \(4269\) 次询问,之后你需要输出这个排列 ...

  3. Head First Java学习:第七章-继承和多态

    第七章:继承和多态 1. 覆盖(override) 覆盖的意思是由子类重新定义继承下来的方法,以改变或延伸此方法的行为. 2. 继承(extends) 类的成员:实例变量+方法 实例变量无法覆盖是因为 ...

  4. create-vue和vue-cli创建项目的差异

    这里对比的是vue-cli和create-vue创建vue3项目的文件中的内容差异. 原来public中的index.html被移动到根目录:(原因见这里:) https://cn.vitejs.de ...

  5. JMeter变量和调试取样器

    变量 可以在测试计划中定义变量 可以通过${变量名}进行调用 调试取样器可以看到变量参数

  6. 由浅入深理解C#中的事件

    目录 本文较长,给大家提供了目录,可以直接看自己感兴趣的部分. 前言 有关事件的概念 示例 ​ 简单示例 ​ 标准 .NET 事件模式 ​ 使用泛型版本的标准 .NET 事件模式 ​ 补充 总结 参考 ...

  7. bazel test 编译失败:googletest、gtest 报错

    问题描述 bazel test 遇到很多奇怪的编译错误,报错位置位于"googletest"目录,而且没有修改过 googletest 源码: ERROR: /bazel_cach ...

  8. java中使用对象储存OSS

    首先获取 ACCESS_KEYSECRET  与  ACCESS_KEYID 获取  ENDPOINT 与 ALI_DOMAIN 与 BUCKET_NAME(存储空间名称) 依赖 <!-- 图片 ...

  9. 痞子衡嵌入式:原来i.MXRT1170内部RAM的ECC初始化工作可全部由ROM完成

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170内部RAM的ECC初始化工作可全部由ROM完成. 痞子衡之前写了三篇文章 <M7 FlexRAM ECC> ...

  10. AI开发实践丨客流分析之未佩戴口罩识别

    摘要:通过本教程,我们可以学习客流统计应用的扩展--过线客流统计+口罩佩戴识别,可用于商超.写字楼入口安检. 本文分享自华为云社区<客流分析之未佩戴口罩识别>,作者: HiLens_fei ...