二维数组存入文件并读取数据

今天,把一个棋盘压缩成稀疏矩阵存入文件的时候,十二个数据读出来只剩6个,纳闷了好半天,最终发现,数组是int 型的,带有数据类型的IO流应该使用数据流进行操作。

package Datastructure;

import java.io.DataInput;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

//数据流  数据再流动的时候带有数据类型。  
public class SparseArr2 {

	public static void main(String[] args) {
		// 创建一个原始的二维数组 11 * 11
				// 0: 表示没有棋子, 1 表示 黑子 2 表蓝子
				int chessArr1[][] = new int[11][11];
				chessArr1[1][2] = 1;
				chessArr1[2][3] = 2;
				chessArr1[4][5] = 2;
				chessArr1[2][4] = 1;
				// 输出原始的二维数组
				System.out.println("原始的二维数组~~");
				for (int[] row : chessArr1) {
					for (int data : row) {
						System.out.printf("%d\t", data);
					}
					System.out.println();
				}

				// 将二维数组 转 稀疏数组的思
				// 1. 先遍历二维数组 得到非0数据的个数
				int sum = 0;
				for (int i = 0; i < 11; i++) {
					for (int j = 0; j < 11; j++) {
						if (chessArr1[i][j] != 0) {
							sum++;
						}
					}
				}

				// 2. 创建对应的稀疏数组
				int sparseArr[][] = new int[sum + 1][3];
				// 给稀疏数组赋值
				sparseArr[0][0] = 11;
				sparseArr[0][1] = 11;
				sparseArr[0][2] = sum;
				
				// 遍历二维数组,将非0的值存放到 sparseArr中
				int count = 0; //count 用于记录是第几个非0数据
				for (int i = 0; i < 11; i++) {
					for (int j = 0; j < 11; j++) {
						if (chessArr1[i][j] != 0) {
							count++;
							sparseArr[count][0] = i;
							sparseArr[count][1] = j;
							sparseArr[count][2] = chessArr1[i][j];
						}
					}
				}
				//打印稀疏数组
				System.out.println("打印稀疏数组");
				for (int[] row : sparseArr) {
					for (int data : row) {
						System.out.printf("%d\t", data);
					}
					System.out.println();
				}
				
		System.out.println("文件读出");
		DataOutputStream out = null;
		DataInputStream in = null;
		try {
			out = new DataOutputStream(new FileOutputStream("./e.txt"));
			for (int[] row : sparseArr) {
				for (int data : row) {
					out.writeInt(data);
				}
			}
			//写出去的文件打开是乱码。jbc打开文本类型  所以乱码  数据流在流动的时候有明确的数据类型
			in  = new DataInputStream(new FileInputStream("./e.txt"));
			for (int i = 0;i 

参考了很多 网上的代码发现还可以使用缓冲流,进行数组的存取操作

	//写入文件
		File file = new File("./array.txt");  //存放数组数据的文件 
		FileWriter out = new FileWriter(file);  //文件写入流 
		   
	  //将数组中的数据写入到文件中。每行各数据之间TAB间隔 
	  for(int i=0;i

你可能感兴趣的:(学习总结)