2017-06-21 51 views
-1

为了索引我的推文集,我编写了这段代码,但出现一个错误,我不知道是什么,我应该初始化几件事情,谢谢。索引推文时出错

public static void main (String args []) throws IOException{ 
     String line; 
     Gson gson = new GsonBuilder().create(); 
     File f = new File(Constante.DATA); 
     BufferedReader reader; 
     Indexer indexer = new Indexer(Constante.INDEX); 
     int nbrtweet =0, i=0; 
       for(File file : f.listFiles()) 
     { 
       System.out.println(file.getName()); 
     reader = new BufferedReader(new FileReader(file)); 
     while((line = reader.readLine())!=null){ 
     Tweet tweet; 
       try{ 
      tweet = gson.fromJson(line, Tweet.class); 
      }catch(JsonSyntaxException e){ 
      i++; 
      continue; 
       } 
     nbrtweet++; 
     indexer.indexTweet(tweet); 
       } 

错误显示了在这条线:

for(File file : f.listFiles()) 

,并打印

Exception in thread "main" java.lang.NullPointerException 
    at ApprocheTwitter.src.Indexer.IndexationThematiqueTwits.main(IndexationThematiqueTwits.java:26) 
+0

对不起,但我不明白以前的解决方案 – celia

+0

@JonSkeet我不同意这是一个“简单”NPE错误的副本;如果你知道Java'File' API的缺点,你知道我的意思 – fge

+0

我不知道这就是为什么我问这个问题。谢谢 – celia

回答

0

您追溯到错误的一行字:

for(File file : f.listFiles()) 

的问题是因为你使用的是过时的File API,此处错误的原因可以是以下之一:

  • f不是目录;
  • f是一个目录,但您无法从中读取条目。

更重要的是,您为每个文件创建一个阅读器,但之后不要关闭它,这是一个错误;此外,你甚至没有指定编码。

现在,这个问题的解决方案取决于您使用的是Java 7还是Java 8.在Java 8中,它非常简单:使用Files.list()并使用每个文件内容;使用Java 7时,请使用Files.newDirectoryStream()

无论如何,早在2011年,File已经死亡;改用JSR 203。

+0

我使用java 8,并且我想指定我的集合包含json格式的文件 – celia

+0

您可以给我一个如何使用它的例子吗?谢谢 – celia

+0

在我这样做之前,你能分辨出存储在文件中的JSON是否真的在一行中,因为这是你现有的代码所提示的 - ? – fge