scanner读取数据出错
package baset639rainforecast.data;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.InputMismatchException;
import java.util.Scanner;
/**
*读取micaps第4类格式数据,单要素文件
* @author lfg
*/
public class Diamond4Reader {
private double startLon, startLat, endLon, endLat;
private double interLon, interLat;
private int numLon, numLat;
private double data[][];
private double lon[][], lat[][];
// private Point[][] points;
/**
* 构造函数
* @param fileName 文件名
*/
public Diamond4Reader(String fileName) throws FileNotFoundException {
File file = new File(fileName);
Scanner scanner = null;
try {
scanner = new Scanner(file);
//跳过一些不需要的信息,如果需要,可以再分解
for (int i = 0; i < 9; i++) {
scanner.next();
}
this.interLon = scanner.nextDouble();
this.interLat = scanner.nextDouble();
this.startLon = scanner.nextDouble();
this.endLon = scanner.nextDouble();
// System.err.println("endLon = "+ endLon);
this.startLat = scanner.nextDouble();
this.endLat = scanner.nextDouble();
this.numLon = scanner.nextInt();
this.numLat = scanner.nextInt();
data = new double[this.numLon][this.numLat];//初始化data变量
for (int i = 0; i < 5; i++) {
scanner.next();
}
while (scanner.hasNext()) {
for (int i = 0; i < this.numLat; i++) {
for (int j = 0; j < this.numLon; j++) {
data[j][i] = scanner.nextDouble();//j,x轴纬向
System.out.println(data[j][i]);
}
}
}
} catch (FileNotFoundException ex) {
// System.err.println("初始化出错!文件:" + fileName + " 不存在!");
// Logger.getLogger(Diamond4Reader.class.getName()).log(Level.SEVERE, "初始化出错!文件:" + fileName + " 不存在!", ex);
throw ex;
}catch(InputMismatchException ex2){
throw ex2;
}
finally {
if (scanner != null) {
scanner.close();
}
}
//初始话grib
lon = new double[numLon][numLat];
lat = new double[numLon][numLat];
for (int i = 0; i < numLat; i++) {
for (int j = 0; j < numLon; j++) {
lon[j][i] = startLon + interLon * j;
}
}
for (int i = 0; i < numLat; i++) {
for (int j = 0; j < numLon; j++) {
lat[j][i] = startLat + interLat * i;
}
}
}
/**
* 打印出文件信息
*/
public void printInfo() {
System.out.println("文件信息:");
System.out.println("startLon = " + this.startLon);
System.out.println("endLon = " + this.endLon);
System.out.println("startLat = " + this.startLat);
System.out.println("endLat" + " = " + this.endLat);
System.out.println("interLon" + " = " + this.interLon);
System.out.println("interLat" + " = " + this.interLat);
for (int i = 0; i < this.numLat; i++) {
for (int j = 0; j < this.numLon; j++) {
System.out.print(data[j][i]);
System.out.print(" ");
}
System.out.println("\r\n");
}
}
public static void main(String[] args) throws FileNotFoundException {
Diamond4Reader reader = new Diamond4Reader("I:\\micaps\\t639\\VOR_ADV_4\\500\\11061020.012");
}
}
出错信息:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextDouble(Scanner.java:2456)
at baset639rainforecast.data.Diamond4Reader.<init>(Diamond4Reader.java:50)
at baset639rainforecast.data.Diamond4Reader.main(Diamond4Reader.java:126)
我看了数据文件,数据内容是double,但是为什么还是出错呢?
[最优解释]
Scanner我都是接受键盘输入的,读取文件还没试过,我一般都是用BufferedReader的,
data[j][i] = scanner.nextDouble();//j,x轴纬向
类型不匹配,也许使用Reader的原因吧,一般Reader都是以字符的形式读取存入的。
所以我想知道Scanner怎么判断这个数据为Double类型的?
你发一下文件我看一下。
[其他解释]
文件太大发不了。
[其他解释]
读取数据的过程中发现某个数据的类型与要读取的不一致导致抛出异常
[其他解释]
Scanner我都是接受键盘输入的,读取文件还没试过,我一般都是用BufferedReader的,
data[j][i] = scanner.nextDouble();//j,x轴纬向
类型不匹配,也许使用Reader的原因吧,一般Reader都是以字符的形式读取存入的。
所以我想知道Scanner怎么判断这个数据为Double类型的?
你发一下文件我看一下。
[其他解释]
仔细看了数据文件,确实是楼上说的问题。问题已经解决。就此结题
