我正在尝试从.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
有什么想法吗?
答案 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类来解析字符串。