文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>从文本文件中读入矩阵数据源JAVA版

从文本文件中读入矩阵数据源JAVA版

时间:2010-05-20  来源:klkvuhs

很多程序中都会用到矩阵数据源,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;
   }

}

 

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

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载