Длинный конец, длинное число, файл файла, строковая кодировка
4 описания параметров
конец эквивалентен координате, хвост — это начальная точка вверх, num — количество прочитанных строк, а набор символов кодировки целевого файла по умолчанию равен UTF8.
Если end имеет значение null, это означает переход от конца файла вверх.
Map m=FileUtil.tail(null,10,file,null)//Читаем последние 10 строк файла, результат в m.get(FileUtil.ARR)
FileUtil.tail(m.get(FileUtil.POINT),3,file,null)//Прочитайте строки с 11 по 13 из последней строки файла. Фактически это означает чтение 10-й строки выше, а затем чтение 3 строк. вверх.
Скопируйте код кода следующим образом:
общественный класс FileUtil {
частный статический окончательный длинный шаг = 5000;
public static Final String ARR="arr";
public static Final String POINT="point";
общедоступный статический хвост карты (длинный конец, длинное число, файл файла, строковая кодировка) выдает исключение {
if(num<=0||(end!=null&&end<0)){
выбросить новое IllegalArgumentException();
}
Карта карта = новый HashMap();
RandomAccessFile акк = ноль;
пытаться {
акк = новый RandomAccessFile (файл, «р»);
long temp_end = (end == null ? acc.length(): end);
long my_point = temp_end > шаг? (temp_end-step): 0;
acc.seek(my_point);
Очередь LinkedList<Object[]> = новый LinkedList<Object[]>();
Стрингтемпер;
интервал n=0;
while((temp=acc.readLine())!=null){
if(++n==1&&my_point!=0){
продолжать;
}
Объект [] объекты = новый объект [2];
длинная точка = acc.getFilePointer();
if(point>=temp_end&&end!=null){break;}
объекты[0]=точка;
объекты [1] = новая строка (temp.getBytes («8859_1»), кодировка);
если(queue.size()==num){
очередь.опрос();
}
очередь.предложение(объекты);
}
if(queue.size()<num&&my_point>0){
longlast_num=num-queue.size();
Заголовок объекта [] = очередь.peek();
if(header==null){throw new RuntimeException("Шаг FileUtil:"+step+" недостаточно длинный");}
Карта m = хвост((Long)header[0],last_num,file,charset);
map.put(POINT,m.get(POINT));
map.put(ARR,ArrayUtils.addAll((Object[])m.get(ARR),queue.toArray()));
}else if(queue.size()>0){//Количества полученных строк недостаточно, и оно не достигло TOP
map.put(POINT,queue.peek()[0]);
map.put(ARR,queue.toArray());
}
}окончательно {
если(соотв!=ноль){
пытаться {
соотв.закрыть();
} catch (IOException e) {
е.printStackTrace();
}
}
}
карта возврата;
}
}