我有一个名为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 ....
所以,显然这些挫败者根本不理解,问题似乎并不那么容易。
这不是一个简单的循环问题大声笑。
答案 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;
}