JenaParser代码中的错误

时间:2013-12-30 11:55:34

标签: java rdf jena

我想运行此代码:

public class JenaParser {

public static void main(String[] args){
    String pathFolder="E:/swetodblp_april_2008.rdf"; 
    File folder=new File(pathFolder);
    File[] files=folder.listFiles();
    for(File file:files){
        try {
            System.out.println("*** File: name="+file.getName()+" path="+file.getPath());

            InputStream in=null;
            in = new FileInputStream(file.getPath());

            OutputStream output=null;
            output = new FileOutputStream(pathFolder+"/"+ file.getName() +".nt");

            Model model = ModelFactory.createDefaultModel();
            RDFDataMgr.read(model, in, org.apache.jena.riot.Lang.RDFXML);
            RDFDataMgr.write(output, model, org.apache.jena.riot.RDFFormat.NTRIPLES_ASCII) ;

            //Extratct URIs
            ArrayList outgoingUrls = new ArrayList();
            for (StmtIterator i = model.listStatements(); i.hasNext(); ) {
                Statement s = (Statement) i.next();
                if (!s.getSubject().isAnon()) {
                    outgoingUrls.add( s.getSubject().getURI());
                }
                outgoingUrls.add( s.getPredicate().getURI() );
                if (s.getObject().isResource() && !s.getResource().isAnon()) {
                    outgoingUrls.add( s.getResource().getURI() );
                }
            }
        } catch (FileNotFoundException ex) {
          Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
        }

}
}}   

运行时显示此错误:

Exception in thread "main" java.lang.NullPointerException
    at jenaparser.JenaParser.main(JenaParser.java:32)
Java Result: 1

1 个答案:

答案 0 :(得分:1)

我希望E:/swetodblp_april_2008.rdf是单个文件的路径,而不是目录。请注意,如果文件不是目录,listFiles将返回null

  

listFiles

public File[] listFiles()
     

返回一个抽象路径名数组,表示此抽象路径名表示的目录中的文件。 ...

     

返回

     

表示文件和目录的抽象路径名数组   此抽象路径名表示的目录。阵列将是   如果目录为空则为空。如果此抽象返回null   pathname不表示目录,或者发生I / O错误。

我期待发生的事情是:

String pathFolder="E:/swetodblp_april_2008.rdf";

pathFolder是一个字符串,它是RDF文档的路径名(但不是目录的路径名)。

File folder=new File(pathFolder);

文件folder已成功创建,但它表示常规文件,而不是目录。

File[] files=folder.listFiles();

调用folder.listFiles()返回而不抛出异常,但由于该文件不是目录,因此返回null。这意味着当您尝试迭代数组(因为没有数组)时会得到空指针异常

for( File file : files ) {
  …
}

如果您尝试迭代E:/swetodblp_april_2008.rdf所在目录中的所有文件,那么您可以执行以下操作:

String pathFolder="E:/swetodblp_april_2008.rdf"; 
File folder=new File(pathFolder);
File[] files=folder.getParentFile().listFiles(); // note getParentFile()

如果您只是试图迭代E:/中的文件,那么您可以这样做:

String pathFolder="E:/"; 
File folder=new File(pathFolder);
File[] files=folder.listFiles();