我编写了一个Java程序,将数字数据输出到二进制.txt文件,并计划使用Matlab处理该数据文件。
在Java程序中,我使用DataOutputStream将浮点数写入data.txt文件并使用DataInputStream进行测试,以读取前面写的data.txt。我得到了正确的结果。
// write {1.0, 2.0, 3.0, 4.0, 5.0, 6.0}
private void writeFile(Float [] data) throws IOException {
FileOutputStream fos = new FileOutputStream(fileName);
DataOutputStream dos = new DataOutputStream(fis);
for (int i = 0; i < data.length; ++i) {
dos.writeFloat(data[i]);
}
dos.close();
}
//output is {1.0, 2.0, 3.0, 4.0, 5.0, 6.0}
private float[] readFile( String fileName, int size) throws IOException {
FileInputStream fis = new FileInputStream(fileName);
DataInputStream dis = new DataInputStream(fis);
float [] dataArray = new int[size];
for (int i = 0; i < dataArray.length; ++i) {
dataArray[i] = dis.reaFloat();
}
dis.close();
return dataArray;
}
但是,当我在matlab中使用data.txt文件时,我的编号错误。
fid = fopen('data.txt');
data = fread(fid, 'float');
fclose all;
我得到的是:
data =
1.0e-40 *
0.4601
0.0009
0.2305
0.4601
0.5749
0.6897
所以,我怀疑这可能是我在Matlab中从二进制转换为float的问题。任何建议都表示赞赏。
或者是否还有其他方法可以在Java中编写Java和原始数据? 谢谢。
答案 0 :(得分:0)
您可以将数据以CSV格式写入文件,然后将其导入Matlab。
如果您的输出文件是CSV文件
1.1, 1.2, 1.3
3.2, 3.3, 4.5
然后您可以使用 importdata 或 csvread 命令将数据导入matlab
your_data = importdata('test.txt', ',')
your_data = csvread('test.txt')
如果您的数据格式更复杂,请使用 textscan 。例如,您可以解析以下数据格式
"1.1", "1.2", "1.3", "3.2", "3.3", "4.5"
使用以下命令进入单元格数组。
buffer = fileread('/tmp/list.txt')
values = textscan(buffer, '"%f"', 'Delimiter', ',')