尚硅谷Java数据结构和java算法,韩顺平数据结构和算法课后作业第一题

要求:
1)在前面的基础上,将稀疏数组保存到磁盘上,比如map.data
2) 恢复原来的数组时,读取map.data进行恢复

就是利用了IO流

我们先写将数据写入到文件

File file = new File("d:/Spart.data");//文件对象
try {
            if (file.exists() == false) {//是否有指定文件,没有的话创建一个
                file.getParentFile().mkdir();
            }
            FileWriter fs = new FileWriter(file);
            for (int i = 0; i < Spartarray.length; i++) {
                for (int j = 0; j < 3; j++) {
                    fs.write(Spartarray[i][j] + "\t");
                }
                fs.write("\r");
            }
            fs.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

自己进行测试是可以成功的。
2.进行将文件的内容读进来
分析:虽然我们将数据存进去的时候是按行存进去的,假设我们这个时候另建立一个测试类,我们不知道文件当中有多少行,所以不知道创建多大的数组,那我们就先获得多少有多少行吧。

BufferedReader in = new BufferedReader(new FileReader(file));
 String line;
 String line1;
int row0 = 0;//我的方法比较笨可能有更好的方法
while ((line = in.readLine()) != null) {
            String[] temp = line.split("\t");
            row0++;
        }

接下来我们可以创建数组并且将文件的内容读入数组中

/*为什么不用上次的in要自己新定义一个in1呢?
我之前这块用的上次的in,但是最后怎么都得不出值,因为此时的in是null,
因为in的作用就是判断当前行是否为空,
再上一个while的in的readline()已经是null了,所以要自己新定义一个。
如果需要加try可以在方法上抛出异常,这样就不用考虑局部变量不可用的问题*/
 int row1 = 0;
 String line1;
int Spartarray2[][] = new int[row0][3];
        BufferedReader in1 = new BufferedReader(new FileReader(file));
        while ((line1 = in1.readLine()) != null) {
            String[] temp = line1.split("\t");
            for (int m = 0; m < temp.length; m++) {
                Spartarray2[row1][m] = Integer.parseInt(temp[m]);
            }
            row1++;
        }
        in.close();
        for (int i = 0; i < row1; i++) {
            System.out.printf("%d\t%d\t%d\t\n", Spartarray2[i][0], Spartarray2[i][1], Spartarray2[i][2]);
        }
//然后可以将稀疏数组转换成二维数组
        int array2[][] = new int[Spartarray2[0][0]][Spartarray2[0][1]];
        for (int i = 1; i <= row1 - 1; i++) {
            array2[Spartarray2[i][0]][Spartarray2[i][1]] = Spartarray2[i][2];
        }
        for (int[] roww : array2) {
            for (int data : roww) {
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }