java.lang.NumberFormatException: For input string: "锘?23"如何解决?!

unknown-null 2012-08-24 04:48:41

我想从txt文件中读取信息,封装成对象,但总是出现异常,求解决方法。

控制台输出的内容如下:
八月 24, 2012 4:29:07 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [ImportGoodsServlet] in context with path [/WarehouseManagementSystem] threw exception
java.lang.NumberFormatException: For input string: "锘?23"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:441)
at java.lang.Long.parseLong(Long.java:483)
at com.zhanghan.controller.ImportGoodsServlet.doPost(ImportGoodsServlet.java:54)
at com.zhanghan.controller.ImportGoodsServlet.doGet(ImportGoodsServlet.java:30)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1770)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

以下是相关的函数或文件:


public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

GoodsBeanDao existedGBDao = new GoodsBeanDao();
BufferedReader reader = new BufferedReader(new FileReader("G:/我的程序/3.java/2.Myeclipse for j2ee/WarehouseManagementSystem/GoodsInfo.txt"));
String line = null;
while((line=reader.readLine())!=null)
{
String[] list = line.split(" ");
long goodsId = Long.parseLong(list[0].trim());//////这个地方出现的异常
String goodsName = list[1];
double goodsPrice = Double.parseDouble(list[2].trim());
long goodsNum = Long.parseLong(list[3].trim());

GoodsBean gb = new GoodsBean(goodsId, goodsName, goodsPrice, goodsNum);
existedGBDao.addGoods(gb);
}
request.getSession().setAttribute("existedGoods", existedGBDao);
request.getRequestDispatcher("find.jsp").forward(request, response);
}

读取的txt文件中前几行内容如下:
223 悟空传 23.0 100
1002 穆斯林的葬礼 20.0 45
1003 平凡的世界 25.0 89

还有,我保存txt时,编码为UTF-8,用Myeclipse看txt的属性时也是UTF-8的编码。
...全文
980 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
安特矮油 2012-09-20
  • 打赏
  • 举报
回复
估计是有中文空格什么的!!
romotc 2012-09-20
  • 打赏
  • 举报
回复
Java读带有BOM的UTF-8文件乱码原因及解决方法 http://daimojingdeyu.iteye.com/blog/397661
riyunzhu 2012-08-25
  • 打赏
  • 举报
回复
类型不正确啊!!仔细检查你的输入以及输出两者的类型是否一致啊,从出错的提示看,一个是数值类型一个是字符串类型的!!好好检查下
unknown-null 2012-08-25
  • 打赏
  • 举报
回复
有没有高手在啊?求解决,求解觉!
unknown-null 2012-08-24
  • 打赏
  • 举报
回复

将字符流改为字节流中文乱码解决了,但还是有问题。

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

GoodsBeanDao existedGBDao = new GoodsBeanDao();
//下面这行修改过,将字符流改为了字节流
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("G:/GoodsInfo.txt"),"UTF-8"));
String line = null;
while((line=reader.readLine())!=null)
{
String[] list = line.split(" ");
//////////////
for(int i =0;i<list.length;i++)
{
System.out.println(list[i]);
}
//////////
long goodsId = Long.parseLong(list[0].trim());
String goodsName = list[1];
double goodsPrice = Double.parseDouble(list[2].trim());
long goodsNum = Long.parseLong(list[3].trim());

GoodsBean gb = new GoodsBean(goodsId, goodsName, goodsPrice, goodsNum);
existedGBDao.addGoods(gb);
}
request.getSession().setAttribute("existedGoods", existedGBDao);
request.getRequestDispatcher("find.jsp").forward(request, response);
}

控制台输出如下:
八月 24, 2012 6:37:41 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [ImportGoodsServlet] in context with path [/WarehouseManagementSystem] threw exception
java.lang.NumberFormatException: For input string: "?1111"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:441)
at java.lang.Long.parseLong(Long.java:483)
at com.zhanghan.controller.ImportGoodsServlet.doPost(ImportGoodsServlet.java:63)
at com.zhanghan.controller.ImportGoodsServlet.doGet(ImportGoodsServlet.java:32)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1770)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

?1111
悟空传
90.0
90

读取的文件内容如下:
1111 悟空传 90.0 90

不知怎么的1111前多了个问号。而且Myeclipse内浏览器页面报错也不同于控制台。

浏览器报错内容如下:
HTTP Status 500 - For input string: "1111"

--------------------------------------------------------------------------------

type Exception report

message For input string: "1111"

description The server encountered an internal error (For input string: "1111") that prevented it from fulfilling this request.

exception

java.lang.NumberFormatException: For input string: "1111"
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
java.lang.Long.parseLong(Long.java:441)
java.lang.Long.parseLong(Long.java:483)
com.zhanghan.controller.ImportGoodsServlet.doPost(ImportGoodsServlet.java:63)
com.zhanghan.controller.ImportGoodsServlet.doGet(ImportGoodsServlet.java:32)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


note The full stack trace of the root cause is available in the Apache Tomcat/7.0.29 logs.


--------------------------------------------------------------------------------

Apache Tomcat/7.0.29
unknown-null 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
会不会是中文路径的问题造成的
G:/我的程序/3.java/ 这边 你换个路径试试
[/Quote]
把txt文件直接放到G盘下,也是同样的情况。
一起学IT技能 2012-08-24
  • 打赏
  • 举报
回复
会不会是中文路径的问题造成的
G:/我的程序/3.java/ 这边 你换个路径试试
unknown-null 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
你打印下list[0].trim(),应该是乱码了,
关键检查下txt里的回车,全角空格什么的。
[/Quote]
1111 wukongzhuan 90.0 90
打印的是:
锘?111
wukongzhuan
90.0
90

1111 悟空传 90.0 90
打印的是:
锘?111
鎮熺┖浼?90.0
90

第一个数字和中文的总是乱码,是怎么回事???我用的是半角,一行中也不可能有回车的
unknown-null 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
你可以试试先打印 数组看看你的下标为0的是不是数字, 这里抛出的异常肯定是有不是数字的String用来转化,不是乱码出现的问题
[/Quote]

String[] list = line.split(" ");
//////////////
for(int i =0;i<list.length;i++)
{
System.out.println(list[i]);
}
//////////
long goodsId = Long.parseLong(list[0].trim());
String goodsName = list[1];
double goodsPrice = Double.parseDouble(list[2].trim());
long goodsNum = Long.parseLong(list[3].trim());

1111 wukongzhuan 90.0 90
打印的是:
锘?111
wukongzhuan
90.0
90

1111 悟空传 90.0 90
打印的是:
锘?111
鎮熺┖浼?90.0
90

第一个数字和中文的总是乱码,是怎么回事???
huage 2012-08-24
  • 打赏
  • 举报
回复
你可以试试先打印 数组看看你的下标为0的是不是数字, 这里抛出的异常肯定是有不是数字的String用来转化,不是乱码出现的问题
unknown-null 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
Long.parseLong(list[0].trim()); 能将中文转型???
[/Quote]
我在文件中第一行存的是:223 悟空传
223不是中文
但是控制台的输出抛出的中文显示为乱码。
  • 打赏
  • 举报
回复
你中文怎么是long型?
菖蒲老先生 2012-08-24
  • 打赏
  • 举报
回复
你打印下list[0].trim(),应该是乱码了,
关键检查下txt里的回车,全角空格什么的。
huage 2012-08-24
  • 打赏
  • 举报
回复
锘?23用这个来转换成Long 肯定出错了撒,可以try catch
libei_march 2012-08-24
  • 打赏
  • 举报
回复
Long.parseLong(list[0].trim()); 能将中文转型???

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧