java 倒序读取文件(最后一行开始读取)

来源:互联网 发布:开淘宝店需要什么费用 编辑:程序博客网 时间:2024/06/02 19:42
Java代码 复制代码 收藏代码
  1. package cn.com.songjy.test.io;
  2. import java.io.FileNotFoundException;
  3. import java.io.IOException;
  4. import java.io.RandomAccessFile;
  5. /**
  6. * http://bbs.csdn.net/topics/190181198
  7. * 从最后一行开始读取
  8. */
  9. public class FromEndRF {
  10. /**
  11. *
  12. * @param filename 目标文件
  13. * @param charset 目标文件的编码格式
  14. */
  15. public static void read(String filename, String charset) {
  16. RandomAccessFile rf = null;
  17. try {
  18. rf = new RandomAccessFile(filename, "r");
  19. long len = rf.length();
  20. long start = rf.getFilePointer();
  21. long nextend = start + len - 1;
  22. String line;
  23. rf.seek(nextend);
  24. int c = -1;
  25. while (nextend > start) {
  26. c = rf.read();
  27. if (c == '\n' || c =='\r') {
  28. line = rf.readLine();
  29. if (line != null) {
  30. System.out.println(new String(line
  31. .getBytes("ISO-8859-1"), charset));
  32. } else {
  33. System.out.println(line);
  34. }
  35. nextend--;
  36. }
  37. nextend--;
  38. rf.seek(nextend);
  39. if (nextend == 0) {// 当文件指针退至文件开始处,输出第一行
  40. // System.out.println(rf.readLine());
  41. System.out.println(new String(rf.readLine().getBytes(
  42. "ISO-8859-1"), charset));
  43. }
  44. }
  45. } catch (FileNotFoundException e) {
  46. e.printStackTrace();
  47. } catch (IOException e) {
  48. e.printStackTrace();
  49. } finally {
  50. try {
  51. if (rf != null)
  52. rf.close();
  53. } catch (IOException e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. }
  58. public static void main(String args[]) {
  59. read("mynewfile.txt", "UTF-8");
  60. }
  61. }



原创粉丝点击