نهاية طويلة، أرقام طويلة، ملف ملف، مجموعة محارف سلسلة
4 أوصاف المعلمات
النهاية تعادل الإحداثيات، والذيل هو نقطة البداية الصاعدة، والرقم هو عدد الأسطر المقروءة، ومجموعة أحرف الملف الهدف الافتراضية هي UTF8
إذا كانت النهاية فارغة، فهذا يعني الانتقال من نهاية الملف إلى أعلى.
Map m=FileUtil.tail(null,10,file,null)// اقرأ آخر 10 أسطر من الملف، والنتيجة هي m.get(FileUtil.ARR)
FileUtil.tail(m.get(FileUtil.POINT),3,file,null)// اقرأ السطر الحادي عشر إلى الثالث عشر من السطر الأخير من الملف. في الواقع، هذا يعني قراءة 3 أسطر لأعلى بعد السطر العاشر أعلاه.
انسخ رمز الكود كما يلي:
فئة عامة FileUtil {
خطوة طويلة نهائية ثابتة خاصة = 5000؛
السلسلة النهائية العامة الثابتة ARR = "arr"؛
السلسلة النهائية العامة الثابتة POINT = "نقطة"؛
ذيل الخريطة الثابتة العامة (نهاية طويلة، رقم طويل، ملف ملف، مجموعة أحرف سلسلة) يطرح استثناء {
إذا(num<=0||(end!=null&&end<0)){
رمي IllegalArgumentException () الجديد ؛
}
خريطة الخريطة=new HashMap();
RandomAccessFile acc=null;
يحاول {
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;
كثافة العمليات ن = 0؛
بينما((temp=acc.readLine())!=null){
إذا(++n==1&&my_point!=0){
يكمل؛
}
Object[] object=new Object[2];
نقطة طويلة = acc.getFilePointer();
إذا (نقطة>=temp_end&&end!=null){break;}
الكائنات[0]=نقطة;
object[1]=new String(temp.getBytes("8859_1"),charset);
إذا(queue.size()==num){
queue.poll();
}
queue.offer(objects);
}
إذا(queue.size()<num&&my_point>0){
long last_num=num-queue.size();
Object[] header = queue.peek();
if(header==null){throw new RuntimeException("FileUtil step:"+step+" ليست طويلة بما يكفي");}
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){// عدد الصفوف التي تم الحصول عليها غير كاف، ولم يصل إلى TOP
Map.put(POINT,queue.peek()[0]);
Map.put(ARR,queue.toArray());
}
}أخيراً {
إذا (القس!=فارغة){
يحاول {
acc.Close();
} قبض (IOException ه) {
printStackTrace();
}
}
}
خريطة العودة؛
}
}