java读取txt矩阵文件中_从文本文件中读入矩阵数据源JAVA版

本文介绍了一种使用Java通过字节输入流从txt文件读取矩阵数据的方法,涉及将字符串转换为double类型。程序示例中展示了如何读取并存储二维矩阵数据,并指出未进行列对齐检查的弱点。
摘要由CSDN通过智能技术生成

很多程序中都会用到矩阵数据源,Java采用输入流的方式从文本文件中读入。输入流分为字符流和字节流,字符流用于读入字符,字节流可读入多种数据类型,如double,int,float等。

一个普通的文本文件里若储存的是人工输入的数字,采用字节输入流读入的实际是其ascii码,而不是单个数据,尤其是小数类型的数据。例如,文本文件中的3.18,读入的实际是“3.18”的字符串的ascii码。将一个以小数为元素的矩阵数据从文本文件中读入,思路为首先将单个数据以字符串的形式读入,然后转化为double型。通常在Java语言中,浮点数常量默认为double型,除非明确指定为float类型,如3.18F。

输出流中将一个数字存入文本文件中,在文本文件中显示出来的将是以该数字为ascii码的字符,这时候打开文本文件看到的一般是乱码。所以字节输入流多用于读取这种情况下存入的数据,此时不需要数据类型的变换即可。

下面详细介绍一下读入数据的类,我不是一个专业的程序员,这个程序是自己写的,可能存在很多不合理的地方,欢迎给出意见。

我的文本文件中的数据是这样的:

# 2.5  2.3  5.6  8.9  4.1

# 2.6  5.9  6.9  5.2  6.9

# 5.6  5.6  8.0  5.4  8.4

……

程序如下:

import java.io.*;

import java.util.*;

public class read_source

{

final int EOF=-1;

private double[][] source;//数据源矩阵

File f;

public read_source(String data_txt)

{

f=new File(data_txt);

}

public double[][] get_source() throws IOException

{

String a=new String();

String b=new String();

Vector v=new Vector();

int row=0;//数据源矩阵的行

int col=0;//列

FileReader in=new FileReader(f);

BufferedReader inTxt=new BufferedReader(in);

inTxt.mark((int)f.length()+1);//在文档开头设mark

/求二维数据的行和列//

while(inTxt.read()!=EOF)

{

row++;

inTxt.readLine();//readLine()是一个很有用的方法

}

inTxt.reset();//回到文档开头mark

a=inTxt.readLine();

StringTokenizer wordString=new StringTokenizer(a);

while(wordString.hasMoreTokens())

{

v.add(wordString.nextToken());//StringTokenizer类的nextToken()方法可以读入单个字符串,是个很有用

//的方法

}

col=v.size()-1;//去掉#

将文本文件中的数组读入存于double数组source///

source=new double[row][col];//定义读入数据存放的数组

inTxt.reset();//回到文档开头mark

int i,j;

for(i=0;inTxt.read()!=EOF;i++)

{

a=inTxt.readLine();

StringTokenizer wordSS=new StringTokenizer(a);

for(j=0;wordSS.hasMoreTokens();j++)

{

b=wordSS.nextToken();

source[i][j]=Double.valueOf(b).doubleValue();//该方法将String类型的小数b转化double型(很关键)

//另一个可以用于该功能的是方法new Float(b).doubleValue()

}

}

in.close();

return source;

}

}

这个程序的弱点是没有检查矩阵是不是列对齐的,可以自行加上。希望对大家有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值