【问题标题】:Parsing Ofx file with java用java解析Ofx文件
【发布时间】:2011-11-06 07:48:07
【问题描述】:

我目前正在尝试使用 java 读取一个 ofx 文件。 但我收到以下错误:Unhandled exception type FileNotFoundException(第二行)。我正在使用 OFx4j。你能给我一些关于那方面的建议吗?

这是我目前写的代码:

String filename=new String("C:\\file.ofx");
    FileInputStream file = new FileInputStream(filename);
    NanoXMLOFXReader nano = new NanoXMLOFXReader();

    try
    {
        nano.parse(stream);
        System.out.println("woooo It workssss!!!!");
    }
    catch (OFXParseException e)
    {
    }

感谢您的 cmets,我做了一些更改:

String FILE_TO_READ = "C:\\file.ofx";


    try
    {
        FileInputStream file = new FileInputStream(FILE_TO_READ);
        NanoXMLOFXReader nano = new NanoXMLOFXReader();


        nano.parse(file);
        System.out.println("woooo It workssss!!!!");
    }
    catch (OFXParseException e)
    {
        System.out.println("Message : "+e.getMessage());
    }
    catch (Exception e1)
    {
        System.out.println("Other Message : "+e1.getMessage());
    }

但现在我得到了这个:

线程“主”java.lang.NoClassDefFoundError 中的异常:net/n3/nanoxml/XMLParseException 在 OfxTest.afficherFichier(OfxTest.java:31) 在 OfxTest.main(OfxTest.java:20) 引起:java.lang.ClassNotFoundException:net.n3.nanoxml.XMLParseException 在 java.net.URLClassLoader$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) 在 sun.misc.Launcher$AppClassLoader.loadClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) ... 2 更多

我正试图弄清楚。我相信它找不到 XMLParseException。但我不确定。

【问题讨论】:

  • 您正在打开一个流但没有检查异常。
  • 不要写new String("C:\\file.ofx"),只写String filename = "C:\\file.ofx"; 没有理由从文字字符串显式创建一个新的String 对象。
  • 注意到@Jesper,在阅读了他/她的异常后,我直接跳转到输入流代码:)。

标签: java parsing ofx


【解决方案1】:

您遇到的第二个问题:“线程“主”java.lang.NoClassDefFoundError:net/n3/nanoxml/XMLParseException 中的异常”意味着您没有从此处包含 NanoXML 库:http://devkix.com/nanoxml.php

您还需要 Apache Commons Logging 库,因为 NanoXML 似乎依赖于此。可在此处获取:http://commons.apache.org/logging/download_logging.cgi

【讨论】:

    【解决方案2】:

    这意味着您没有捕捉到FileNotFoundException。此外,尽管这与您的错误消息无关,但作为最佳实践,您应该始终在 finally 块中关闭文件流,如下所示。也不需要对文件名执行 new String() 操作。

    为FileNotFoundException添加这个catch块:-

        String filename = "C:\\file.ofx";
        FileInputStream file = null;
        NanoXMLOFXReader nano = null;
        try
        {
             file = new FileInputStream(filename);
             nano = new NanoXMLOFXReader();
            nano.parse(stream);
            System.out.println("woooo It workssss!!!!");
        }
        catch (OFXParseException e)
        {
            e.printStackTrace();
            throw e;
        }catch (FileNotFoundException e){
            e.printStackTrace();
            throw e;
        }finally{
            if(file!=null){
               file.close();
            }
        }
    

    【讨论】:

    • 可以在 try{}catch{} 块之外打开流吗?因为在“FileInputStream file = new FileInputStream(filename);”时会发生 FileNotFoundException被称为,是吗?
    • @krio - 抱歉,我太着急了,写得太快了……我现在修复了代码 sn-p。现在就试试。这是一个简单的问题,他只是没有发现异常.. :)
    • 让 Bon_chan 试试吧!因为我也回答了!无论如何在阅读您的代码后感到困惑并且不想投反对票,因为我觉得这是一个诚实的错误;)干杯
    • @krio - 是的,感谢您的关注。我还在 finnaly 块中为 OP 添加了 close 文件,因为我注意到他的代码中没有 close 语句。
    • 查看问题的评论部分,Jesper 注意到了,哈哈!
    猜你喜欢
    • 2011-03-22
    • 2013-03-22
    • 2013-03-04
    • 2019-05-28
    • 2022-01-22
    • 2010-10-02
    • 2012-01-29
    • 2012-02-25
    • 2015-10-26
    相关资源
    最近更新 更多