为什么我有98行而不是99行?

时间:2017-01-26 12:56:05

标签: java

我有一个名为json的目录,其中包含99个json文件。

文件命名为:sentiment_i.json,其中i是从1开始的增量整数。

我编写了一些代码来读取每个文件中的一些内容,并将这些内容写入txt文件中,每个json文件只有一行。

    public static void main(String[] args) throws Exception, IOException, ParseException {

        String type ="";
        ArrayList<String> sentiment = new ArrayList<String>();

        int i= 1;
        double score = 0;

        File dir = new File("json");
        File[] directoryListing = dir.listFiles();
        JSONObject jsonObject;

        if (directoryListing != null) {
            for (File child : directoryListing) {
                JSONParser parser = new JSONParser();

                try {
                    jsonObject  = (JSONObject) parser.parse(new FileReader("json/sentiment_"+i+".json"));
                } catch (FileNotFoundException e) {
                    i++;
                    continue;
                }

                JSONObject doc = (JSONObject) jsonObject.get("docSentiment"); // get the nested object first
                type = (String)doc.get("type"); // get a string from the nested object

                // CODICE PER PRENDERE ANCHE LO SCORE
                if (!(type.equals("neutral"))){
                    score = (double) doc.get("score");
                } else score = 0;

                sentiment.add(type+";"+score);
                i++;
            }
        }

        PrintWriter out = new PrintWriter("sentiment.txt");
        for(String value: sentiment)
            out.println(value);
        out.close();
    }
}

问题是我的txt文件中有98行,即使目录中有99个json文件。

我现在一直试图找到这个小虫一小时但是我疯了!

希望你能帮助我,谢谢。

编辑:哇哇哇哇:(

无论如何,也许我不清楚。这一点从来没有捕捉和处理丢失的文件!

另外

jsonObject  = (JSONObject) parser.parse(new FileReader(child)) 

在我的案例中根本没用,让我解释原因。

在json文件夹中,如上所述,json文件的名称如下:&#34; sentiment_1&#34;,&#34; sentiment_2&#34;等等。

在文件夹中,让我们说1000个,但不是每个从1到1000的数字都在那里。

如果依赖FileReader(子),在for循环中,文件的读取顺序不正确(1,2,3,4 ......)!

这是因为对于文件夹中的排序顺序,例如10比2更早,因为顺序是1,10,2,3,4 ....

所以,显然这些挫败者根本不理解,问题似乎并不那么容易。

这不是一个简单的循环问题大声笑。

2 个答案:

答案 0 :(得分:1)

由于这段代码:

try {
    jsonObject  = (JSONObject) parser.parse(new FileReader("json/sentiment_"+i+".json"));
} catch (FileNotFoundException e) {
    i++;
    continue;
}

哪个省略了你的错误,请改用:

try {
    jsonObject  = (JSONObject) parser.parse(new FileReader("json/sentiment_"+i+".json"));
} catch (FileNotFoundException e) {
    throw new RuntimeException(e);
} 

答案 1 :(得分:1)

我相信你有一个格式错误的json文件名:

try {
    jsonObject = (JSONObject) parser.parse(new FileReader("json/sentiment_"+i+".json"));
} catch (FileNotFoundException e) {
    i++;
    continue;
}

这段代码告诉我,如果找不到文件,只会在没有任何控制台反馈的情况下忽略它。

替换为:

try {
    jsonObject  = (JSONObject) parser.parse(new FileReader("json/sentiment_"+i+".json"));
} catch (FileNotFoundException e) {
    System.out.println("Missing json file: " +  e.getMessage());
    i++;
    continue;
}

您将了解正在发生的事情。

更好的解决方案

目前,您正在循环浏览文件,但您从未使用当前迭代,而是使用i变量。可以使用FileReader而不是文件路径将File实例化为字符串:

try {
    jsonObject  = (JSONObject) parser.parse(new FileReader(child));
} catch (FileNotFoundException e) {
    System.out.println("Missing json file: " +  e.getMessage());
    i++;
    continue;
}