Fim longo, num longo, arquivo de arquivo, conjunto de caracteres de string
4 descrições de parâmetros
end é equivalente à coordenada, tail é o ponto inicial para cima, num é o número de linhas lidas e o conjunto de caracteres do conjunto de caracteres do arquivo de destino é padronizado como UTF8
Se end for nulo, significa ir do final do arquivo para cima.
Map m=FileUtil.tail(null,10,file,null)//Lê as últimas 10 linhas do arquivo, o resultado está em m.get(FileUtil.ARR)
FileUtil.tail(m.get(FileUtil.POINT),3,file,null)//Lê a 11ª a 13ª linha da última linha do arquivo. Na verdade, significa ler 3 linhas para cima após a 10ª linha acima.
Copie o código do código da seguinte forma:
classe pública ArquivoUtil {
passo longo final estático privado = 5000;
public static final String ARR="arr";
public static final String POINT="ponto";
cauda do mapa estático público (extremidade longa, número longo, arquivo de arquivo, conjunto de caracteres de string) lança exceção {
if(num<=0||(end!=null&&end<0)){
lançar new IllegalArgumentException();
}
Mapa mapa=new HashMap();
RandomAccessFile acc=null;
tentar {
acc = new RandomAccessFile(arquivo, "r");
longo temp_end = (end == null ? acc.length() : end);
longo my_point = temp_end > etapa? (temp_end-step): 0;
acc.seek(meu_ponto);
LinkedList<Object[]> fila = new LinkedList<Object[]>();
Stringtemp;
intn=0;
while((temp=acc.readLine())!=null){
if(++n==1&&meu_ponto!=0){
continuar;
}
Objeto[] objetos=novo Objeto[2];
ponto longo = acc.getFilePointer();
if(ponto>=temp_end&&end!=null){quebra;}
objetos[0]=ponto;
objetos[1]=new String(temp.getBytes("8859_1"),charset);
if(queue.size()==num){
fila.poll();
}
fila.offer(objetos);
}
if(queue.size()<num&&meu_ponto>0){
longo last_num=num-queue.size();
Object[] cabeçalho = queue.peek();
if(header==null){throw new RuntimeException("FileUtil step:"+step+" não é longo o suficiente");}
Mapa m = tail((Long)header[0], last_num, file,charset);
map.put(PONTO,m.get(PONTO));
map.put(ARR,ArrayUtils.addAll((Object[])m.get(ARR),queue.toArray()));
}else if(queue.size()>0){//O número de linhas obtidas não é suficiente e não atingiu TOP
map.put(POINT,queue.peek()[0]);
map.put(ARR,queue.toArray());
}
}finalmente {
if(acc!=null){
tentar {
acc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
mapa de retorno;
}
}