我想从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的编码。

解决方案 »

  1.   

    Long.parseLong(list[0].trim()); 能将中文转型???
      

  2.   

    锘?23用这个来转换成Long 肯定出错了撒,可以try catch
      

  3.   

    你打印下list[0].trim(),应该是乱码了,
    关键检查下txt里的回车,全角空格什么的。
      

  4.   

    你可以试试先打印 数组看看你的下标为0的是不是数字, 这里抛出的异常肯定是有不是数字的String用来转化,不是乱码出现的问题
      

  5.   


    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
    901111 悟空传 90.0 90
    打印的是:
    锘?111
    鎮熺┖浼?90.0
    90第一个数字和中文的总是乱码,是怎么回事???
      

  6.   

    1111 wukongzhuan 90.0 90
    打印的是:
    锘?111
    wukongzhuan
    90.0
    901111 悟空传 90.0 90
    打印的是:
    锘?111
    鎮熺┖浼?90.0
    90第一个数字和中文的总是乱码,是怎么回事???我用的是半角,一行中也不可能有回车的
      

  7.   

    会不会是中文路径的问题造成的
     G:/我的程序/3.java/ 这边 你换个路径试试
      

  8.   

    把txt文件直接放到G盘下,也是同样的情况。
      

  9.   


    将字符流改为字节流中文乱码解决了,但还是有问题。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 reportmessage 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
      

  10.   

    Java读带有BOM的UTF-8文件乱码原因及解决方法 http://daimojingdeyu.iteye.com/blog/397661