问题:
现在有两个包含栅格数据的txt文件dem1.txt、dem2.txt,要实现对两个文件的读取,并且将两个文件中的数据对应相加,输出结果。文件格式如下:
步骤:
1.通过InputStream读取数据,用字节数组存贮,再将字节数组转为字符串;
2.字符串按换行符分割,再将每行按空格分割,分割后的数据转为整型存储到二维数组;
3.将两个二维数组相加并输出。
实现代码:
import java.io.*;
import java.util.ArrayList;
public class DemReader {
public static void main(String[] args){
System.out.println("读取栅格文件");
try {
InputStream dem1 = new FileInputStream(new File("D:/IdeaProjects/hello/src/data/dem1.txt"));
InputStream dem2 = new FileInputStream(new File("D:/IdeaProjects/hello/src/data/dem2.txt"));
String str1 = bytesToStr(dem1);
String str2 = bytesToStr(dem2);
dem1.close();
dem2.close();
int matrix1[][] = strToMatrix(str1);
int matrix2[][] = strToMatrix(str2);
int matrixSum[][] = new int[8][8];
for(int row=0;row<matrix1.length;row++){
for(int col=0;col<matrix1[0].length;col++){
matrixSum[row][col] = matrix1[row][col] + matrix2[row][col];
}
}
for (int i = 0; i < matrixSum.length; i++) {
for (int j = 0; j < matrixSum[0].length; j++) {
System.out.print(matrixSum[i][j]);
System.out.print(" ");
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
//输入流转字符串
public static String bytesToStr(InputStream is) throws IOException{
//先定义一个字节数组存放数据
byte[] bytes = new byte[1024];
int i = 0;
int index = 0;
while((i=is.read())!=-1){//把读取的数据放到i中
bytes[index]=(byte) i;
index++;
}
//把字节数组转成字符串
String str1 = new String(bytes);
return str1;
}
//字符串转矩阵(二维数组)
public static int[][] strToMatrix(String str){
String rowArr[] = str.split("\r\n");
int matrix[][] = new int[8][8];
int rowIndex = 0;
for (String row : rowArr) {
String valueArr[] = row.split("\\s+");
int colIndex = 0;
for (String item:valueArr) {
matrix[rowIndex][colIndex] = Integer.parseInt(item.trim());
colIndex++;
}
rowIndex++;
}
return matrix;
}
}
结果输出: