概述
前段时间遇到一个Java读取mat文件的问题,查阅了一些资料、博客,特别是这篇Java读取mat文件-lz3018之后,自己手动实现了一下,对基本的double、int、char、字符串、浮点数组、结构体、矩阵集合等能够提取出来。本文采用jmatio库直接将mat文件读取到内存中,再按照数据类型分别解析出来。
ps:第一次写博客,如有错误,请多多批评指正,谢谢^-^
添加jar到工程
这里需要jmatio库所依赖的jar包,已经存到百度云盘-链接:http://pan.baidu.com/s/1mhCYyTy 密码:pqek
在创建的工程中添加jar包:
读取mat文件
读取mat文件,并存入Map<String,MLArray>中,其中key是变量名称,value是变量的值
public static Map<String, MLArray> readMatFile(String filepath) {
MatFileReader reader = null;
try {
reader = new MatFileReader(filepath);
} catch (FileNotFoundException e) {
System.out.println("文件未找到!");
e.printStackTrace();
} catch (IOException e) {
System.out.println("文件读取失败!");
e.printStackTrace();
}
return reader.getContent();
}
解析Map中内容
数据最终以Map<String,Object>形式返回,其中key形式为“变量名-变量类型”,value为变量的值
public static Map<String, Object> readMatContent(Map<String, MLArray> MatContent) {
Map<String, Object> matContentMap = new HashMap<String, Object>();
Map<String, Object> _struct = new HashMap<String, Object>();
for (String key : MatContent.keySet()) {
MLArray mc = MatContent.get(key);
switch (judgeType(mc)) {
case 1:
matContentMap.put(key + "-cell", content2cell(mc));
b