Extremo largo, número largo, archivo de archivo, conjunto de caracteres de cadena
4 descripciones de parámetros
end es equivalente a la coordenada, tail es el punto de inicio hacia arriba, num es el número de líneas leídas y el conjunto de caracteres del juego de caracteres del archivo de destino tiene por defecto UTF8.
Si end es nulo, significa llegar desde el final del archivo hacia arriba.
Map m=FileUtil.tail(null,10,file,null)//Lee las últimas 10 líneas del archivo, el resultado está en m.get(FileUtil.ARR)
FileUtil.tail(m.get(FileUtil.POINT),3,file,null)//Lea las líneas 11 a 13 desde la última línea del archivo. De hecho, significa leer 3 líneas hacia arriba después de la 10ª línea anterior.
Copie el código de código de la siguiente manera:
clase pública FileUtil {
paso largo final estático privado = 5000;
cadena final estática pública ARR="arr";
cadena final estática pública PUNTO="punto";
Cola de mapa estática pública (extremo largo, número largo, archivo de archivo, conjunto de caracteres de cadena) lanza una excepción {
if(num<=0||(end!=null&&end<0)){
lanzar nueva IllegalArgumentException();
}
Mapa mapa=nuevo HashMap();
RandomAccessFile acc=null;
intentar {
acc = nuevo RandomAccessFile(archivo, "r");
long temp_end = (fin == nulo? acc.length(): fin);
long my_point = temp_end > paso? (temp_end-paso): 0;
acc.seek(mi_punto);
cola LinkedList<Object[]> = nueva LinkedList<Object[]>();
temperatura de cadena;
entero n=0;
while((temp=acc.readLine())!=null){
if(++n==1&&mi_punto!=0){
continuar;
}
Objeto[] objetos=nuevo Objeto[2];
punto largo = acc.getFilePointer();
if(punto>=temp_end&&end!=null){break;}
objetos[0]=punto;
objetos[1]=new String(temp.getBytes("8859_1"),charset);
if(cola.tamaño()==num){
cola.encuesta();
}
cola.oferta(objetos);
}
if(queue.size()<núm&&mi_punto>0){
long last_num=num-queue.size();
Objeto[] encabezado = cola.peek();
if(header==null){throw new RuntimeException("Paso de FileUtil:"+paso+" no es lo suficientemente largo");}
Mapa m = tail((Long)header[0], last_num, file,charset);
map.put(PUNTO,m.get(PUNTO));
map.put(ARR,ArrayUtils.addAll((Object[])m.get(ARR),queue.toArray()));
}else if(queue.size()>0){//El número de filas obtenidas no es suficiente y no ha llegado al TOP
map.put(PUNTO,queue.peek()[0]);
map.put(ARR,queue.toArray());
}
}finalmente {
si(acc!=null){
intentar {
acc.close();
} captura (IOException e) {
e.printStackTrace();
}
}
}
mapa de regreso;
}
}