Java中Rectangle类如何实现并使用loadFileText加载功能
Point类loadFileText方法作用解析
这个方法是图形对象的反序列化方法,作用是把从文件里读取到的、用*做分隔符的单条图形文本数据,解析后赋值给当前Point实例的对应属性,把文本内容还原成内存里可使用的点对象。
逐行逻辑拆解:
String[] point = data.split("\\*");:将传入的整行文本按*字符拆分为字符串数组。这里写\\*是因为*是正则表达式的特殊字符,必须加转义符才能匹配字面意义的*。比如传入文本是Point*120*50*blue*true,拆分后得到的数组长度为5,索引从0开始计数。this.x=Integer.parseInt(point[1]);:取数组下标1的内容,转为整数后赋值给点的x坐标属性。注意数组下标0存的是对象类型标记(也就是Point字符串,用来标识这行数据对应的是点对象),实际属性值从下标1开始读取。this.y=Integer.parseInt(point[2]);:取数组下标2的内容转整数,赋值给点的y坐标属性。this.color=Main.translateColor(point[3]);:取数组下标3的颜色字符串,调用项目中Main类的translateColor方法,把文本形式的颜色值转成程序可识别的颜色对象,赋值给点的颜色属性。this.fill=Boolean.parseBoolean(point[4]);:取数组下标4的文本转布尔值,赋值给点的填充标记,用来标识绘制这个点的时候是否需要填充。
Rectangle类的loadFileText实现思路
矩形和点的公共属性包括坐标、颜色、填充标记,额外多了宽、高两个尺寸属性,对应的文件文本格式和Point保持规则一致即可:第一个字段是类型标记Rectangle,后面按固定顺序跟各个属性值,字段之间用*分隔。
常规实现代码如下,你可以根据自己Rectangle类定义的属性调整字段顺序:
@Override public void loadFileText(String data) { String[] rectData = data.split("\\*"); // 按字段顺序赋值,注意下标和保存时的写入顺序严格对应 this.x = Integer.parseInt(rectData[1]); this.y = Integer.parseInt(rectData[2]); this.width = Integer.parseInt(rectData[3]); this.height = Integer.parseInt(rectData[4]); this.color = Main.translateColor(rectData[5]); this.fill = Boolean.parseBoolean(rectData[6]); }
注意:一定要和你项目中保存文件时的属性写入顺序核对,确保拆分后每个下标对应的属性和写入时完全一致,否则会出现属性值错位、对象加载异常的问题。如果你的Rectangle类是用两个对角点坐标定义、而不是坐标+宽高的形式,只需要对应调整下标的取值逻辑即可,整体解析结构和Point类的参考实现保持一致就可以。
内容的提问来源于stack exchange,提问作者Kasker
相关产品推荐
相关产品推荐

