java.lang.NumberFormatException
相关截图:
//问题描述:XmlDataSource.java第57行如下所示,XmlDataSource.java完整代码附加在其后
//painting.setCategory(Integer.parseInt(element.elementText("category")));
package com.imooc.mgallery.utils;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import com.imooc.mgallery.entity.Painting;
/**
*
* 数据源类,用于将XML文件解析为Java对象
*
*/
public class XmlDataSource {
// 通过static关键字来保证数据全局唯一
private static List<Painting> data = new ArrayList();
private static String dataFile;
static {
// 得到painting.xml文件完整物理路径
// c:\new style\painting.xml
// c:\new%20style\painting.xml
dataFile = XmlDataSource.class.getResource("/painting.xml").getPath();
reload();
}
private static void reload() {
URLDecoder decoder = new URLDecoder();
try {
decoder.decode(dataFile, "UTF-8");
System.out.println(dataFile);
// 利用Dom4j对XML进行解析
SAXReader reader = new SAXReader();
// 1. 获取Document文档对象
Document document = reader.read(dataFile);
// 2.Xpath得到XML节点集合
List<Node> nodes = document.selectNodes("/root/painting");
data.clear();
for (Node node : nodes) {
Element element = (Element) node;
String id = element.attributeValue("id");
String pname = element.elementText("pname");
Painting painting = new Painting();
painting.setId(Integer.parseInt(id));
painting.setPname(pname);
painting.setCategory(Integer.parseInt(element.elementText("category")));
painting.setPrice(Integer.parseInt(element.elementText("price")));
painting.setPreview(element.elementText("preview"));
painting.setDescription(element.elementText("description"));
data.add(painting);
// System.out.println(id+":" + pname);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取所有Painting对象
* @return Painting List
*/
public static List<Painting> getRawPainting() {
return data;
}
public static void append(Painting painting) {
//1.读取XML文档,得到document对象
SAXReader reader = new SAXReader();
Writer writer = null;
try {
Document document = reader.read(dataFile);
//2.创建新的painting节点
Element root = document.getRootElement();//<root>
Element p = root.addElement("painting");
//3.创建painting节点的各个子节点
p.addAttribute("id", String.valueOf(data.size()+1));
p.addElement("pname").setText(painting.getPname());
p.addElement("category").setText(painting.getCategory().toString());
p.addElement("price").setText(painting.getPrice().toString());
p.addElement("preview").setText(painting.getPreview());
p.addElement("description").setText(painting.getDescription());
//4.写入XML,完成追加操作
writer = new OutputStreamWriter(new FileOutputStream(dataFile),"UTF-8");
document.write(writer);
System.out.println(dataFile);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(writer != null) {
try {
writer.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
reload();//内存与文件数据一致
}
}
public static void main(String[] argn) {
// new XmlDataSource();
// List<Painting> ps = XmlDataSource.getRawPainting();
// System.out.println(ps);
Painting p = new Painting();
p.setPname("测试油画");
p.setCategory(1);
p.setPrice(12000);
p.setPreview("/upload/10.jpg");
p.setDescription("测试油画描述");
XmlDataSource.append(p);
}
}
15
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕小尤
2021-02-02 10:18:08
同学你好,1、NumberFormatException异常是数字格式转换异常,当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出这个异常。
2、建议同学查看第57行左右的代码,应该是数据转换时,出现的问题。如:同学可查看element.attributeValue("category")是否可以获取到数据。或同学可以添加一个if判断,判断是否为空,如果为空,则跳出此次循环。
3、在添加时,应该是无法添加空值的,同学也可以在添加时进行判断。
注:建议同学查看xml文件中的数据,是否有的category值为空。
祝学习愉快!
java工程师2020版
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星