Langes Ende, lange Nummer, Dateidatei, String-Zeichensatz
4 Parameterbeschreibungen
end entspricht der Koordinate, tail ist der Startpunkt nach oben, num ist die Anzahl der gelesenen Zeilen und der Zeichensatz der Dateizieldatei ist standardmäßig UTF8
Wenn end null ist, bedeutet dies, dass vom Ende der Datei aufwärts begonnen wird.
Map m=FileUtil.tail(null,10,file,null)//Lesen Sie die letzten 10 Zeilen der Datei, das Ergebnis ist in m.get(FileUtil.ARR)
FileUtil.tail(m.get(FileUtil.POINT),3,file,null)//Lesen Sie die 11. bis 13. Zeile ab der letzten Zeile der Datei. Tatsächlich bedeutet dies, dass nach der 10. Zeile oben 3 Zeilen nach oben gelesen werden.
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse FileUtil {
privater statischer letzter langer Schritt=5000;
öffentlicher statischer finaler String ARR="arr";
öffentlicher statischer finaler String POINT="point";
öffentliches statisches Map-Ende (langes Ende, lange Zahl, Dateidatei, Zeichenfolgenzeichensatz) löst eine Ausnahme aus{
if(num<=0||(end!=null&&end<0)){
throw new IllegalArgumentException();
}
Karte map=new HashMap();
RandomAccessFile acc=null;
versuchen {
acc = new RandomAccessFile(file, "r");
long temp_end = (end == null ? acc.length() : end);
long my_point = temp_end > step ? (temp_end-step) : 0;
acc.seek(my_point);
LinkedList<Object[]> queue = new LinkedList<Object[]>();
Stringtemp;
int n=0;
while((temp=acc.readLine())!=null){
if(++n==1&&my_point!=0){
weitermachen;
}
Objekt[] Objekte=neues Objekt[2];
long point = acc.getFilePointer();
if(point>=temp_end&&end!=null){break;}
Objekte[0]=Punkt;
Objekte[1]=new String(temp.getBytes("8859_1"),charset);
if(queue.size()==num){
queue.poll();
}
queue.offer(objects);
}
if(queue.size()<num&&my_point>0){
long last_num=num-queue.size();
Object[] header = queue.peek();
if(header==null){throw new RuntimeException("FileUtil-Schritt:"+Schritt+" nicht lang genug");}
Map 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){//Die Anzahl der erhaltenen Zeilen reicht nicht aus und hat TOP nicht erreicht
map.put(POINT,queue.peek()[0]);
map.put(ARR,queue.toArray());
}
}Endlich {
if(acc!=null){
versuchen {
acc.close();
} Catch (IOException e) {
e.printStackTrace();
}
}
}
Rückkehrkarte;
}
}