java.lang.NumberFormatException

java.lang.NumberFormatException

相关截图:

http://img1.sycdn.imooc.com//climg/6017e25f09fb35ce00000000.jpg

1
//问题描述:XmlDataSource.java第57行如下所示,XmlDataSource.java完整代码附加在其后<br>//painting.setCategory(Integer.parseInt(element.elementText("category")));<br><br>package com.imooc.mgallery.utils;<br><br>import java.io.FileOutputStream;<br>import java.io.IOException;<br>import java.io.OutputStreamWriter;<br>import java.io.UnsupportedEncodingException;<br>import java.io.Writer;<br>import java.net.URLDecoder;<br>import java.util.ArrayList;<br>import java.util.List;<br><br>import org.dom4j.Document;<br>import org.dom4j.DocumentException;<br>import org.dom4j.Element;<br>import org.dom4j.Node;<br>import org.dom4j.io.SAXReader;<br><br>import com.imooc.mgallery.entity.Painting;<br><br>/**<br> * <br> * 数据源类,用于将XML文件解析为Java对象<br> *<br> */<br>public class XmlDataSource {<br> // 通过static关键字来保证数据全局唯一<br> private static List<Painting> data = new ArrayList();<br> private static String dataFile;<br> static {<br>        // 得到painting.xml文件完整物理路径 <br>      // c:\new style\painting.xml<br>        // c:\new%20style\painting.xml<br>      dataFile = XmlDataSource.class.getResource("/painting.xml").getPath();<br>      reload();<br><br>   }<br><br>   private static void reload() {<br>      URLDecoder decoder = new URLDecoder();<br>      try {<br>           decoder.decode(dataFile, "UTF-8");<br>          System.out.println(dataFile);<br>           // 利用Dom4j对XML进行解析<br>          SAXReader reader = new SAXReader();<br>         // 1. 获取Document文档对象<br>            Document document = reader.read(dataFile);<br>          // 2.Xpath得到XML节点集合<br>         List<Node> nodes = document.selectNodes("/root/painting");<br>            data.clear();<br>           for (Node node : nodes) {<br>               Element element = (Element) node;<br>               String id = element.attributeValue("id");<br>               String pname = element.elementText("pname");<br>                Painting painting = new Painting();<br>             painting.setId(Integer.parseInt(id));<br>               painting.setPname(pname);<br>               painting.setCategory(Integer.parseInt(element.elementText("category")));<br>                painting.setPrice(Integer.parseInt(element.elementText("price")));<br>              painting.setPreview(element.elementText("preview"));<br>                painting.setDescription(element.elementText("description"));<br>                data.add(painting);<br>//               System.out.println(id+":" + pname);<br>         }<br><br>       } catch (Exception e) {<br>         // TODO Auto-generated catch block<br>          e.printStackTrace();<br>        }<br>   }<br><br>   /**<br>  * 获取所有Painting对象<br>    * @return Painting List<br>     */<br> public static List<Painting> getRawPainting() {<br>       return data;<br>    }<br>   public static void append(Painting painting) {<br>      //1.读取XML文档,得到document对象<br>        SAXReader reader = new SAXReader();<br>     Writer writer = null;<br>       try {<br>           Document document = reader.read(dataFile);<br>          //2.创建新的painting节点<br>           Element root = document.getRootElement();//<root><br>             Element p = root.addElement("painting");<br>           //3.创建painting节点的各个子节点<br>           p.addAttribute("id", String.valueOf(data.size()+1));<br>            p.addElement("pname").setText(painting.getPname());<br>             p.addElement("category").setText(painting.getCategory().toString());<br>            p.addElement("price").setText(painting.getPrice().toString());<br>          p.addElement("preview").setText(painting.getPreview());<br>             p.addElement("description").setText(painting.getDescription());<br>            //4.写入XML,完成追加操作<br>             writer = new OutputStreamWriter(new FileOutputStream(dataFile),"UTF-8");<br>            document.write(writer);<br>             System.out.println(dataFile);<br>      } catch (Exception e) {<br>         // TODO Auto-generated catch block<br>          e.printStackTrace();<br>        }finally {<br>          if(writer != null) {<br>                try {<br>                   writer.close();<br>             } catch (Exception e) {<br>                 // TODO Auto-generated catch block<br>                  e.printStackTrace();<br>                }<br>           }<br>           reload();//内存与文件数据一致<br>        }<br><br>   }<br><br>   public static void main(String[] argn) {<br>//      new XmlDataSource();<br>//      List<Painting> ps = XmlDataSource.getRawPainting();<br>//     System.out.println(ps);<br><br>     Painting p = new Painting();<br>        p.setPname("测试油画");<br>     p.setCategory(1);<br>       p.setPrice(12000);<br>      p.setPreview("/upload/10.jpg");<br>     p.setDescription("测试油画描述");<br>     XmlDataSource.append(p);<br>    }<br>}<br>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小尤 2021-02-02 10:18:08

同学你好,1、NumberFormatException异常是数字格式转换异常,当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出这个异常。

2、建议同学查看第57行左右的代码,应该是数据转换时,出现的问题。如:同学可查看element.attributeValue("category")是否可以获取到数据。或同学可以添加一个if判断,判断是否为空,如果为空,则跳出此次循环。

3、在添加时,应该是无法添加空值的,同学也可以在添加时进行判断。

注:建议同学查看xml文件中的数据,是否有的category值为空。

祝学习愉快!

  • 提问者 慕设计5260620 #1

    老师,第57行我已经在问题中指出来了,即

    1
    painting.setCategory(Integer.parseInt(element.elementText("category")));<br>


    2021-02-02 10:54:36
  • 好帮手慕小尤 回复 提问者 慕设计5260620 #2

    同学你好,刚是老师理解错误,同学可重新查看:

    1、关于element.elementText("category")和id值是一样的,同学可先查看category是否可以获取到数据。或同学可以添加一个if判断,判断category是否为空,如果为空,则跳出此次循环。如下图所示:

    http://img1.sycdn.imooc.com//climg/6018c61f096f401b09390205.jpg

    2、在添加时,应该是无法添加空值的,同学可查看添加时的数据。如下图所示:

    http://img1.sycdn.imooc.com//climg/6018c95c095d650811170545.jpg

    ​祝学习愉快!

    2021-02-02 11:41:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码