`
mozhenghua
  • 浏览: 318552 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

读文件最后一行java

阅读更多

写了一个读文件最后一行的算法,主要思想是利用RandomAccessFile 这个类一开始先将文件的游标移动到文件最后一个字符,然后逐渐向文件头推进,一旦找到'/r'或者‘/n’的时候就将当前的游标记录下来,这个游标的位置就是文件最后一行的起始位置。

 

 这个方法的优点是在处理大文件的时候,效率会高一些。

 

 

/**
	 * 打印文件的最后n行内容
	 * @param monitorFile
	 * @param n
	 * @param lineProcess
	 */
	private void readLastNLine(File monitorFile, int n, IProcessLine lineProcess) {
		RandomAccessFile randomAccess = null;
		try {
			randomAccess = new RandomAccessFile(monitorFile, "r");

			// boolean eol = false;
			// int c = -1;
			long fileLength = randomAccess.length();
			long size = 1;
			boolean hasEncountReturn = false;

			ww: while (true) {
				long offset = fileLength - (size++);
				if (offset < 0) {
					break ww;
				}
				randomAccess.seek(offset);
				switch (// c =
				randomAccess.read()) {
				case '\n':
				case '\r':
					if (!hasEncountReturn && (n--) <= 0) {
						randomAccess.seek(offset + 1);
						break ww;
					}
					hasEncountReturn = true;
					continue;
				default:
					hasEncountReturn = false;
				}
			}
			String line = null;
			while ((line = randomAccess.readLine()) != null) {
				// listener.handle(line);
				lineProcess.print(line);
			}

		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {
			IOUtils.closeQuietly(randomAccess);
		}
	}

	private interface IProcessLine {
		void print(String line);
	}

 

分享到:
评论

相关推荐

    倒叙读文本文件

    实现倒叙以行读文本,只读取最后一行使用的是RandomAccessFile 类

    使用Java实现一个简单的文件管理系统.txt

    然后通过FileReader和BufferedReader类来读取文件的内容,并使用System.out.println()方法将每一行的内容输出到控制台。最后关闭了打开的文件流。这个简单的示例代码展示了如何使用Java I/O来实现一个文件管理系统,...

    Java读取json文件并对json数据进行读取、添加、删除与修改操作

    开发过程中经常会遇到json数据的处理,而单独对json数据进行增删改并不方便,尤其是Geojson文件的处理,通过对网络资料的整理总结,下面介绍Java语言方法对json数据进行读取、添加、删除与修改操作。

    读取文件数字并排序最后输出另一个文件

    读取一个文件中的整数,并将它们从小到大排序,最后输出排序后到另一个文件中

    java实现删除excel内容之间空行

    java实现删除excel内容之间空行,需要导入皮包。

    从文件读取一个文件块

    最后一个 TLRL 是文件结束行标志 约束条件 a) 处理掉文件不存在、文件打开或读取失败等异常 b) 忽略掉空行 c) 每个文本行前四个字符必须由【 三个大写英文字母加 1 个大写英文字母或 1 个数字组成】,要求使用正则...

    Java的输入输出流系统中除光盘外的最后一个系统盘中的文件夹显示

    3.编写应用程序,在指定目录下创建一个文件随机读写流,在第11题的文件1.dat的后面写入逻辑值true、写入字符’a’、 写入字符串“程序设计”,然后读取文件中写入这些数据并在屏幕上输出。 4.编写应用程序,把某个...

    Java开发技术大全(500个源代码).

    FileList.java 自己实现的一个文件名称枚举类 MyDataIO.java 数据输入输出示例 MyFileOutput.java 将键盘读入的文字保存到文件 MyPipedIO.java 管道流示例 MySequenceIn.java 顺序输入流示例 ObjectFileTest....

    将文本文件a.txt中的单词排序后写入b.txt

    有文本文件a.txt,每行一个英文单词。编制Java程序,读取该文件中的所有单词,然后按照单词长度降序排列;对于长度相等的单词,按照字典顺序降序排列。最后将排序后的单词按每个一行写入另一个文件b.txt。

    java读取txt数据求和

    java读取txt数据求和 按照以下步骤进行操作: 1. 使用Java的File类或Path类指定要读取的文件路径。 2.创建一个Scanner对象,并...3. 使用循环遍历文件中的每一行数据,将其转换为数值并求和。 4. 最后关闭Scanner对象。

    java 分析英文文章,并统计每个字母出现的次数

    java 分析英文文章,统计每个字母出现的次数,按自己设定的格式输出到文件件里,方便分析与转换,带数据样例。

    微软翻译api的java实现.rar

    之前软件做国际化,配置文件英文版需要翻译成中文版,总共快两万行了,但是翻译软件总会有字符限制,例如百度翻译5000个字符限制,bing翻译,最多的是...代码如下,一个文件一行一行读出来,翻译,写进另一个文件里。

    java 面试题 总结

    例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    对Java语言的每个语法都提供了一个或多个例程讲解 大量使用流程图表示程序的执行过程,使用结构图表示程序的内部状态 每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    对Java语言的每个语法都提供了一个或多个例程讲解 大量使用流程图表示程序的执行过程,使用结构图表示程序的内部状态 每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 ...

    Java面试宝典-经典

    21、写clone()方法时,通常都有一行代码,是什么? 15 22、面向对象的特征有哪些方面 15 23、java中实现多态的机制是什么? 17 24、abstract class和interface有什么区别? 17 25、abstract的method是否可同时是...

    Java面试宝典2010版

    21、写clone()方法时,通常都有一行代码,是什么? 15 22、面向对象的特征有哪些方面 15 23、java中实现多态的机制是什么? 17 24、abstract class和interface有什么区别? 17 25、abstract的method是否可同时是...

    合工大Java 实验二 货物进销管理系统

    2.文件Inventory.txt和NewInventory.txt的每行包含一个存货记录,没条记录包含下面一些字段息,这些字段之间用一个tab分开(见后面的文件格式): 字段 格式和含义 Item number 字符串型,货物编号 Quantity 整型,...

    java面试题大全(2012版)

    21、写clone()方法时,通常都有一行代码,是什么? 15 22、面向对象的特征有哪些方面 15 23、java中实现多态的机制是什么? 17 24、abstract class和interface有什么区别? 17 25、abstract的method是否可同时是...

    java面试宝典

    35、写clone()方法时,通常都有一行代码,是什么? 11 36、GC 是什么? 为什么要有GC? 11 37、垃圾回收的优点和原理。并考虑2 种回收机制。 11 38、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有...

Global site tag (gtag.js) - Google Analytics