有些项目中会要求代码解析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. java制作游戏,如何使用libgdx,入门级别教学

    第一步,进入libgdx的官网.点击get started 进入这个页面,点击setup a project 进入这个页面直接点击,Generate a project. 点击下载,下载创建工具 它会 ...

  2. 微调baichuan2-7b遇到的显存坑

    问题描述: 微调baichuan2-7b模型,验证一轮后继续训练第一个iteration显存大幅增加 项目链接: https://github.com/wp931120/baichuan_sft_lo ...

  3. lottie 动画在 vue 中的使用

    前言 最近我所负责的项目中,我采用了动画效果,并开始使用 gif 来实现.然而,在实践过程中,我发现 gif 格式的动画在 git 中出现了明显的锯齿感,这让我非常困扰.为了追求更完美的表现效果,我最 ...

  4. uniapp的app苹果应用商店上架最简教程

    除了测试版本之外,uniapp打包好的ipa文件是无法直接安装在普通用户的手机上面,这是苹果的证书和描述文件的机制的原因. 因此我们需要将打包好的ipa文件上架到苹果应用商店,也就是app store ...

  5. sed 命令进阶

    sed 是面向行处理的,但是有时可能希望针对多行作为一个单位进行处理,在 sed 中这也是可行的,本文将介绍如何使用 sed 来同时处理多行文本 理论基础 模式空间(Pattern Space):是一 ...

  6. ASCII编码:计算机文本通信的基石

    ASCII(美国信息交换标准代码)编码是一种将字符与数字相互映射的编码系统,它为现代计算机文本通信奠定了基础.本文将从多个方面介绍ASCII编码的原理.发展历程.应用及其在现实场景中的优势,帮助您深入 ...

  7. C++ 惯用法之 RAII

    RAII(Resource Acquisition Is Initialization)资源获取即初始化,是 C++ 中最基本.应用最广范的惯用法(idiom)之一. RAII 的基本思想是通过构造/ ...

  8. 2023-08-26:请用go语言编写。开心一下的智力题: 有一个村庄,一共250人, 每一个村民要么一定说谎,要么只说真话, 村里有A、B、C、D四个球队,且每个村民只会喜欢其中的一支球队, 但是说

    2023-08-26:请用go语言编写.开心一下的智力题: 有一个村庄,一共250人, 每一个村民要么一定说谎,要么只说真话, 村里有A.B.C.D四个球队,且每个村民只会喜欢其中的一支球队, 但是说 ...

  9. 10、弹性布局(Flex Expanded)

    自定义的IconContainer class IconContainer extends StatelessWidget { Color color; IconData icon; // IconC ...

  10. LeetCode 贪心篇(455、55)

    455. 分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干.对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸:并且每块饼干 ...