读取.text文件中的双打到列表中

时间:2011-03-30 14:19:58

标签: java list double text-files

我正在尝试从.txt文件中读取双打并将它们全部放入列表中。

到目前为止,这是我的代码 - >

(我有一种方法可以请求文件并获取数据流,还有一种方法可以将双打放入列表中。)

    public InputFile () throws MyException {
    fileIn = null;
    dataIn = null;
    do {
        filename = JOptionPane.showInputDialog("What is the file called? ");
        try {
            fileIn = new FileInputStream((filename + ".txt"));
            dataIn = new DataInputStream(fileIn);

            return;
        }
            catch (FileNotFoundException e) {
            JOptionPane.showMessageDialog(null, "There is no "+filename + ".txt");
        }
   }
   while (   Question.answerIsYesTo("Do you want to retype the file name")   );
   throw new MyException("No input file was chosen");
}

那部分工作正常。

        public ProcessMain() {
        boolean EOF = false;

    List <Double> allNumbers = new ArrayList <Double> () ;

            try {

                InputFile inputFile = new InputFile();

                        while(EOF == false) {
                        try {
                          allNumbers.add(inputFile.dataIn.readDouble());
                            }
                        catch(EOFException e){ EOF = true; }
                        }

         // List manipulation here. I have no problems with this part.

    }
    catch (Exception e) {
        System.out.println(e);
    }

     System.out.println(allNumbers);

我得到以下内容 -

  

java.lang.IndexOutOfBoundsException:Index:0,Size:0

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

DataInputStream实际上是用于读取二进制数据,例如从插座。我认为您想要的只是简单FileReader,然后使用Double.parseDouble(String)Double.valueOf(String)进行解析 - 具体取决于您是要获取原始对象还是对象双精度。

如果您的输入文件包含新行中的每个号码,则可以使用BufferedReader.readLine。否则你需要一些简单的解析,例如找到空格或以逗号分隔的值。

例如,要读取包含新行上每个数字的文件,您可以执行以下操作:

import java.io.*;

public class DoubleReader {
  public static void main(String[] args) throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader(args[0]));
    String line = null;
    while((line = reader.readLine()) != null) {
        Double d = Double.valueOf(line);
        System.err.println(d);
    }
  }
}

但是如果您的文件以不同的方式分隔数字(例如空格或逗号),则在读取文件以提取(解析)您的值时,您需要做一些额外/不同的工作。

Parsing用于标记您的数据,以便您可以提取您感兴趣的位。

答案 1 :(得分:0)

可能是“EOF = false”行...将“假”分配给“EOF”并且始终为真。尝试将其更改为“EOF == false”。

答案 2 :(得分:0)

DataInputStream仅用于读取使用相应输出流编写的内容。对于文本文件,请在InputStreamReader周围创建FileInputStream(记住指定编码),然后创建BufferedReader以便您可以按行读取。然后使用Double类来解析字符串。