Не пойму почему конец файла не определяется?
Задание такое:
Необходимо разработать приложение - парсинг логов веб-сервера. Необходимо использовать Java SE(любую версию) и ANTLR v4.
Лог имеет вид:
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
127.0.0.1 - это адрес клиента GET - метод запроса 200 - код возврата Подробнее - https://httpd.apache.org/docs/2.4/logs.html#accesslog
Во время парсинга для каждой записи следует задавать отдельный java-объект, у которого дата представлена в виде java.util.Date, тип запроса - enum, код возврата - int, IP - java.lang.String.
На выходе требуется вывести топ-10 самых активных IP-адресов с указанием количества обращений, которые получали код возврата 500.
Файл грамматики:
grammar LogRead;
proc: IP Whitespace unaryOperator Whitespace USER Whitespace LSQUARE date RSQUARE Whitespace STRING Whitespace IP Whitespace IP (Whitespace | EOF)
;
date: DATE Whitespace DATE
;
IP: [0-9.]+;
USER: [a-zA-Z]+;
DATE: [a-zA-Z:0-9/-]+;
STRING
: '"' ( Enum | ~('\\'|'"') )* '"'
;
Enum : 'GET' | 'POST';
unaryOperator
: '&' | '*' | '+' | '-' | '~' | '!'
;
LSQUARE : '[' ;
RSQUARE : ']' ;
Whitespace : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ /*-> skip */;
Файл парсера:
public class ParserNew {
private Map<String, Integer> hasMap = new HashMap<>();
public void parseMethod(String string) throws IOException {
try {
LogReadLexer lexer = new LogReadLexer(new ANTLRFileStream(string));
CommonTokenStream tokens = new CommonTokenStream(lexer);
LogReadParser parser = new LogReadParser(tokens);
while (true) {
ParseTree tree = parser.proc();
if (Integer.parseInt(String.valueOf(tree.getChild(12))) == 500) {
String temp = String.valueOf(tree.getChild(0));
if (hasMap.containsKey(String.valueOf(tree.getChild(0)))) {
hasMap.put(temp, hasMap.get(temp) + 1);
} else hasMap.put(temp, 1);
}
}
}
catch (NumberFormatException e) {
System.out.println("Лог закончился");
}
catch (FileNotFoundException e) {
System.out.println("Файл не найден");
}
parseSort(hasMap);
}
public void parseSort(Map<String, Integer> hashMap) {
Map<String, Integer> result = new LinkedHashMap<>();
hashMap.entrySet().stream()
.sorted(Map.Entry.<String, Integer>comparingByValue().reversed()).limit(2)
.forEach(s->System.out.println(s.getKey() + s.getValue()));
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Начал изучать JavaFX, и писать некоторые маленькие GUI приложенияВроде все хорошо, но когда перехожу на что-то сложное в коде всегда какой-то бардак...
Для реализации задачи, мне необходим Service который запускается при старте приложения и останавливается при закрытии
Пытался запретить выбор файлов (можно выбирать только файлы) путем функции JFileChooserDIRECTORIES_ONLY:
Проблема такая, на версиях андройд меньше 60 все отлично работает, но на 6