我有一个由我制作的日志,我希望我的程序可以按月搜索日志。 这是我的file.txt格式:
[31 02/08/13 21:55:47] Name_Surname 0A49G 21
第一个数字是一年中的一周(我设法得到那个,我可以按周搜索,虽然这个月会相同,但似乎我错了),以及接下来的3个数字是日/月/年。 问题是我无法拆分数组(因为netBeans说“线程中的异常”AWT-EventQueue-0“java.lang.ArrayIndexOutOfBoundsException:1”)。我标记了netBeans所说的问题。我想要的是得到月份的数量,以便我可以进行搜索。
以下是代码:
textoMostrado.setText("");
FileReader fr = null;
try {
File file = new File("Registro.txt");
fr = new FileReader(file);
if (file.exists()) {
String line;
BufferedReader in = new BufferedReader(fr);
try {
int mes = Calendar.getInstance().get(Calendar.MONTH);
mes++;
int año = Calendar.getInstance().get(Calendar.YEAR);
año %= 100;
while ((line = in.readLine()) != null) {
String[] lista = line.split(" ");
String [] aux = lista[1].split("/"); //the problem is here
int numMes = Integer.parseInt(aux[1]);
int numAño = Integer.parseInt(aux[2]);
if ((numMes==mes)&&(numAño==año)) {
textoMostrado.append(line+"\n");
}
}
} catch (IOException ex) {
Logger.getLogger(MostrarRegistros.class.getName()).log(Level.SEVERE, null, ex);
}
}
} catch (FileNotFoundException ex) {
Logger.getLogger(MostrarRegistros.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
fr.close();
} catch (IOException ex) {
Logger.getLogger(MostrarRegistros.class.getName()).log(Level.SEVERE, null, ex);
}
}
对不起我的英语,不是我的母语,我希望有人能帮助我。
答案 0 :(得分:5)
这一行:
String[] lista = line.split(" ");
String [] aux = lista[1].split("/"); //the problem is here
只要行没有空格, ...就会失败,因为在这种情况下lista
只会有一个元素。你可以防范:
if (lista.length > 1) {
String[] aux = lista[1].split("/");
...
} else {
// Whatever you want to do with a line which doesn't include a space.
}
我的猜测是,您的日志中包含不是的行,如示例所示 - 只需在上面的else
子句中添加一些日志记录即可轻松诊断出来。顺便说一句,你可能会发现它是一个空字符串......