Fin longue, numéro long, fichier fichier, jeu de caractères de chaîne
4 descriptions de paramètres
end est équivalent à la coordonnée, tail est le point de départ vers le haut, num est le nombre de lignes lues et le jeu de caractères du jeu de caractères du fichier cible est par défaut UTF8
Si end est nul, cela signifie aller de la fin du fichier vers le haut.
Map m=FileUtil.tail(null,10,file,null)//Lire les 10 dernières lignes du fichier, le résultat est dans m.get(FileUtil.ARR)
FileUtil.tail(m.get(FileUtil.POINT),3,file,null)//Lire la 11ème à la 13ème ligne à partir de la dernière ligne du fichier En fait, cela signifie lire la 10ème ligne ci-dessus puis lire 3 lignes. vers le haut.
Copiez le code comme suit :
classe publique FileUtil {
étape longue finale statique privée = 5 000 ;
public static final String ARR="arr";
public static final String POINT="point";
La queue de la carte statique publique (extrémité longue, numéro long, fichier fichier, jeu de caractères de chaîne) lève une exception {
si(num<=0||(end!=null&&end<0)){
lancer une nouvelle IllegalArgumentException();
}
Carte map=new HashMap();
RandomAccessFile acc=null;
essayer {
acc = nouveau RandomAccessFile(fichier, "r");
long temp_end = (end == null ? acc.length() : end);
long mon_point = temp_end > step ? (temp_end-step) : 0;
acc.seek(mon_point);
LinkedList<Object[]> queue = new LinkedList<Object[]>();
Température de chaîne ;
entier n=0 ;
while((temp=acc.readLine())!=null){
si(++n==1&&mon_point!=0){
continuer;
}
Objet[] objets=nouveau Objet[2];
point long = acc.getFilePointer();
si(point>=temp_end&&end!=null){break;}
objets[0]=point ;
objets[1]=new String(temp.getBytes("8859_1"),charset);
if(queue.size()==num){
queue.poll();
}
queue.offer(objets);
}
if(queue.size()<num&&mon_point>0){
long last_num=num-queue.size();
Objet[] en-tête = queue.peek();
if(header==null){throw new RuntimeException("FileUtil step:"+step+" pas assez long");}
Carte m = tail((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){//Le nombre de lignes obtenues n'est pas suffisant et il n'a pas atteint TOP
map.put(POINT,queue.peek()[0]);
map.put(ARR,queue.toArray());
}
}enfin {
si(acc!=null){
essayer {
acc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
carte de retour ;
}
}