本教程仅做个人工作笔记,可能不适用于他人的工作/学习
图书系统,需要导入文件来生成图书数据,其中除了Excel、Word,还有一种Marc文件(不懂的时候觉得这东西特恶心,稍微懂了之后觉得这玩意很不错,nice)
先给一份大致的Marc文件代号的对应释义,来自百度文库 marc
另外附上三位前辈的博客,可以对marc有一个大概的了解
以下附上个人的业务代码,注释已经很详细,其中Metadata.class是我项目中的实体类
package com.interlib.rc.util;
import com.interlib.rc.model.entity.Metadata;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* marc.iso文件处理
*
* @author chengs
* @date 2019-12-02
*/
@Component
public class MarcUtil {
/**
* 分行读取marc.iso文件返回List<String>类型数据
*
* @param file marc.iso
* @return
* @throws IOException
*/
public static List<String> handleMarcFile(MultipartFile file) {
Reader reader = null;
try {
reader = new InputStreamReader(file.getInputStream(), "GBK");
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader bufferedReader = new BufferedReader(reader);
List<String> marcStrList = new ArrayList<>();
String str = null;
while (true) {
try {
str = bufferedReader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
if (str != null) {
if (str.contains("-")) {
String[] split = str.split("\\-");
int splitLength = split.length;
int length = split[0].getBytes().length;
//判断是否为有效marc格式
if (length == 24 && splitLength > 1) {
marcStrList.add(str);
}
}
} else {
break;
}
}
return marcStrList;
}
public static List<Map<String, Object>> dealMarc(List<String> marcList) {
List<Map<String, Object>> resultMapList = new ArrayList<>();
for (String marcStr : marcLi