Javaは、指定された行でファイルを読み込む方法
最近の開発実戦では、このような技術シーンに遭遇しました.
log 4 jで生成されたログファイルをMySQLデータベースに定期的にブラシします.例えば、3時間に1回ブラシをかけると、データをブラシするたびに、前回のファイルの読み取りが終わった場所からファイルの読み取りを継続するように制御するにはどうすればいいですか.そして今回はファイルの最後に読み込みます.ネットでいろいろな質問を検索して、RandomAccessFileというものを見つけました. Javaクラスが問題を解決しました.
コードを先に入力:
log 4 jで生成されたログファイルをMySQLデータベースに定期的にブラシします.例えば、3時間に1回ブラシをかけると、データをブラシするたびに、前回のファイルの読み取りが終わった場所からファイルの読み取りを継続するように制御するにはどうすればいいですか.そして今回はファイルの最後に読み込みます.ネットでいろいろな質問を検索して、RandomAccessFileというものを見つけました. Javaクラスが問題を解決しました.
コードを先に入力:
static int size=1;// , ,
static long chars=0;//chars
/**
*
* @param fileName
*/
public Map readANDwrite(String fileName) {
// , sessionid , session list
Map<String,Map> bigMap = new HashMap();
// session
File file = new File(fileName);
//java ,
RandomAccessFile rf = null;
String tempString = null;
try {
// RandomAccessFile, , , Linux ,r ,w
rf = new RandomAccessFile(fileName, "rw");
// ,
rf.seek(chars);
//
int fileSize = getTotalLines(file);
for (int i = size-1; i < fileSize; i++) {//
//
tempString = rf.readLine();
//
tempString = tempString.replaceAll("%(?![0-9a-fA-F]{2})", "%25");
tempString = tempString.replaceAll("\\+", "%2B");
tempString = java.net.URLDecoder.decode(tempString, "GB2312");
// JSON JSON, key value
JSONObject json = JSONObject.fromObject(tempString);
String refPage = json.get("refPage").toString();
System.out.println(refPage);
Map tmap = new HashMap();
if (bigMap.containsKey(refPage))
tmap = (Map) bigMap.get(refPage);
else {
tmap = new HashMap();
}
//
String tCount = "count";
int pvCount = 1;
if (tmap.containsKey(tCount)) {
pvCount = (Integer) tmap.get(tCount);
}
pvCount++;
tmap.put(tCount, pvCount);
bigMap.put(refPage, tmap);
}
// 。
chars = rf.getFilePointer();
size=fileSize;
} catch (IOException e) {
e.printStackTrace();
}catch(JSONException j){
} finally {
if (rf != null) {
try {
rf.close();
} catch (IOException e1) {
}
}
}
return bigMap;
}
//
static int getTotalLines(File file) throws IOException {
FileReader in = new FileReader(file);
LineNumberReader reader = new LineNumberReader(in);
String s = reader.readLine();
int lines = 0;
while (s != null) {
lines++;
s = reader.readLine();
}
reader.close();
in.close();
return lines;
}