我想运行此代码:
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
答案 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();