尚硅谷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();
}