java 倒序讀取檔案(最後一行開始讀取)
阿新 • • 發佈:2019-01-08
Java程式碼
- package cn.com.songjy.test.io;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.RandomAccessFile;
- /**
- * http://bbs.csdn.net/topics/190181198
- * 從最後一行開始讀取
- */
- public class FromEndRF {
- /**
- *
- * @param filename 目標檔案
- * @param charset 目標檔案的編碼格式
- */
- public static void read(String filename, String charset) {
- RandomAccessFile rf = null;
- try {
- rf = new RandomAccessFile(filename, "r");
- long len = rf.length();
- long start = rf.getFilePointer();
- long nextend = start + len - 1;
- String line;
- rf.seek(nextend);
- int c = -1;
- while (nextend > start) {
- c = rf.read();
- if (c == '\n' || c == '\r') {
- line = rf.readLine();
- if (line != null) {
- System.out.println(new String(line
- .getBytes("ISO-8859-1"), charset));
- } else {
- System.out.println(line);
- }
- nextend--;
- }
- nextend--;
- rf.seek(nextend);
- if (nextend == 0) {// 當檔案指標退至檔案開始處,輸出第一行
- // System.out.println(rf.readLine());
- System.out.println(new String(rf.readLine().getBytes(
- "ISO-8859-1"
- }
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- if (rf != null)
- rf.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- public static void main(String args[]) {
- read("mynewfile.txt", "UTF-8");
- }
- }
package cn.com.songjy.test.io;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* http://bbs.csdn.net/topics/190181198
* 從最後一行開始讀取
*/
public class FromEndRF {
/**
*
* @param filename 目標檔案
* @param charset 目標檔案的編碼格式
*/
public static void read(String filename, String charset) {
RandomAccessFile rf = null;
try {
rf = new RandomAccessFile(filename, "r");
long len = rf.length();
long start = rf.getFilePointer();
long nextend = start + len - 1;
String line;
rf.seek(nextend);
int c = -1;
while (nextend > start) {
c = rf.read();
if (c == '\n' || c == '\r') {
line = rf.readLine();
if (line != null) {
System.out.println(new String(line
.getBytes("ISO-8859-1"), charset));
} else {
System.out.println(line);
}
nextend--;
}
nextend--;
rf.seek(nextend);
if (nextend == 0) {// 當檔案指標退至檔案開始處,輸出第一行
// System.out.println(rf.readLine());
System.out.println(new String(rf.readLine().getBytes(
"ISO-8859-1"), charset));
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (rf != null)
rf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String args[]) {
read("mynewfile.txt", "UTF-8");
}
}