java如何實(shí)現(xiàn)從指定位置讀取文件到指定位置結(jié)束观蜗?
你大概想象的是有這么一個(gè)文件流對象,在使用它的時(shí)候可以給它設(shè)置一個(gè)起始位置和結(jié)束位置衣洁,然后開始一行一行讀出來墓捻,用幾行代碼就能搞定。我在網(wǎng)上查了好多資料坊夫,都沒有找到期望的對象砖第,于是我就先斷定java中是不存在這么一個(gè)對象的。
但是這并不代表不能完成一個(gè)這樣的操作环凿。
我所遇到的業(yè)務(wù)是這樣的:在某個(gè)頁面上點(diǎn)擊某個(gè)按鈕梧兼,需要能夠看到這臺服務(wù)器的運(yùn)行日志。
于是就需要將服務(wù)器的日志文件讀出然后返回給頁面智听,讓人看羽杰。
在考慮到頁面的緩存限制和賦值困難,一個(gè)幾十上百兆的文件內(nèi)容一次全返回到頁面會導(dǎo)致長達(dá)幾十秒的卡頓和頁面的崩潰到推,于是只能一次傳一點(diǎn)考赛,像分頁一樣把整個(gè)日志文件內(nèi)容傳完。
上代碼:
public static void main(String[] args) {
//用來存一行文件內(nèi)容的對象
String line = null;
//用來存很多行文件內(nèi)容的對象
StringBuilder text = new StringBuilder();
//用來計(jì)數(shù)
int tmpCount =0;
//開始行
int begin=50;
//結(jié)束行
int end=100;
//創(chuàng)建一個(gè)緩沖流對象莉测,后面的a/a.log是文件的路徑
try(BufferedReader sb = new BufferedReader(new FileReader("a/a.log"))){
//這里使用sb.readLine()將一行文件的內(nèi)容賦予line颜骤,注意:在出現(xiàn)sb.readLine()的時(shí)候不管你是用來做判斷還是賦值,這行內(nèi)容都已經(jīng)從流消失捣卤。
while ((line = sb.readLine()) != null){
//++=+1
tmpCount++;
//如果行數(shù)大于等于開始行并且小于等于結(jié)束行
if (tmpCount>=begin && tmpCount<=end){
//用詞對象將這行的內(nèi)容存起來忍抽,并加上換行符
text.append(line).append("\n");
}
}
//關(guān)閉流
sb.close();
} catch (IOException e) {
e.printStackTrace();
}
//使用
Map map = new HashMap();
map.put("text",text);
}
好了到這里就完成了從指定位置讀取文件到指定位置結(jié)束。
如果你知道有什么java內(nèi)置對象可以完成以上操作腌零,還請告訴我梯找。