`
nannan408
  • 浏览: 1771200 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java按行读取文件,解决断电读大文件的问题。

 
阅读更多
1.前言。
    要保存当前读的记录,可以用java的类LineNumberReader.里面有getLineNumber()方法可以获得行数。
2.例子。
package com.redis;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;

public class Ex7 {
	public void dataReader(String nameFile, int start, int finish) {
		if (start > finish) {
			System.out.println("Error start or finish!");
			return;
		}
		InputStream inputStream = null;
		LineNumberReader reader = null;
		try {
			inputStream = new FileInputStream(new File(nameFile));
			reader = new LineNumberReader(
					new InputStreamReader(inputStream));
			int lines = getTotalLines(new File(nameFile));
			if (start < 0 || finish < 0 || finish > lines || start > lines) {
				System.out.println("Line not found!");
				return;
			}
			
			String line = reader.readLine();
	        lines = 0;
	        while (line != null) {
	            lines++;
	            if(lines >= start && lines <= finish){
	            	//处理你读到的内容
	            	System.out.println(line);
	            	//记录当前行数
		            System.out.println("读到第:"+reader.getLineNumber()+"行");
	            }
	            line = reader.readLine();
	        }
	        inputStream.close();
			reader.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			System.err.println("IO Error");
			System.exit(0);
		}

	}
	
	private int getTotalLines(File file) throws IOException{
		FileReader in = new FileReader(file);
        LineNumberReader reader = new LineNumberReader(in);
        String line = reader.readLine();
        int lines = 0;
        while (line != null) {
            lines++;
            line = reader.readLine();
        }
        reader.close();
        in.close();
        return lines;
	}

	public static void main(String[] args) {
		//读第二行和第四行的信息。
		new Ex7().dataReader("c:/data.txt", 2, 4);
		//new Ex7().dataReader("data.txt",3,8);
	}
}


3.后记.
  例子程序是在http://www.myexception.cn/j2se/267711.html和http://asialee.iteye.com/blog/368489的基础上修改得还,感谢这两位无私的小编和楼主。
分享到:
评论

相关推荐

    JAVA多线程断电续传下载程序

    本项目"JAVA多线程断电续传下载程序"就是这样一个实例,它利用Java的多线程特性来实现文件的下载,并具备断电续传功能,确保了下载过程的可靠性。下面将详细介绍相关知识点。 首先,我们来理解什么是多线程。在...

    读取PLC寄存器,读写XML文件

    通过MODBUS,我们可以读取和写入PLC的寄存器,包括输入寄存器(只读)和输出寄存器(读/写)。 2. **OPC UA**:这是一种更现代、更安全的通信标准,提供了一个统一的接口来访问不同厂商的自动化设备,包括PLC。使用...

    java 断点续传 上传

    这可以通过读取文件并使用`FileInputStream`和`BufferedInputStream`等流操作类,按照预定大小(如1MB)逐个读取和存储到内存或磁盘上。 - 每个切片都有一个唯一的标识符,通常是文件偏移量和长度,以便在上传时...

    Linux文件系统模拟---代码加文档

    Linux文件系统有严格的权限控制,分为读(r)、写(w)、执行(x)三个级别,针对所有者、组成员和其他用户。SUID、SGID和 Sticky 位是特殊的权限,提供额外的安全特性。 6. 硬链接与软链接: 硬链接允许多个文件名指向...

    AQZ File Parser for Java:简单的解析器,用于读取业余无线电问题数据格式的zip文件-开源

    Java的AQZ文件解析器是一个简单的jar文件。 因此,您可以使用此库来读取“压缩的业余无线电问题数据格式”(* .aqz)。 aqz文件包含火腿无线电检查的所有问题和图像。 此格式由Oliver Saal,DM1OLI和...

    ext3.x和2.x上传文件例子upolad

    总之,`ext3.x`和`2.x`文件系统在Linux环境下提供了文件存储的基础,而`commons-fileupload`库则为Java Web应用提供了一种优雅的多文件上传解决方案。理解这些知识点对于开发涉及文件上传功能的Web应用至关重要。

    扩展HTTP断点续传各类文件

    断点续传技术是文件下载领域的一项重要创新,它允许在下载过程中因网络不稳定或计算机断电等原因中断后,能够从断点处继续下载,而无需重新开始整个下载过程。这一技术极大提高了文件下载的效率和可靠性,特别是在...

    simplefilesystem:内存中的简单文件系统,用 Java 完成

    4. **I/O 操作**:文件系统需要支持读取和写入文件,这可以通过 Java 的 `InputStream` 和 `OutputStream` 类族来实现。对于内存中的文件系统,可以使用字节数组或字符串来存储文件内容。 5. **元数据(Metadata)*...

    详解Android开发数据持久化之文件存储(附源码)

    这样,当用户再次打开应用时,可以从文件读取并显示先前保存的数据。 文件存储虽然简单,但不适用于复杂的数据结构。对于更复杂的数据,如结构化的文本或对象,可能需要自定义文件格式或考虑使用SQLite数据库。此外...

    单线程断电续传实例

    8. **存储管理**:为了防止内存溢出,大文件下载时需要考虑分块读写。同时,确保在应用退出或设备休眠时,能正确保存下载状态,以便下次恢复。 在提供的`DownloadDemo`示例中,你可以看到这些概念的实际实现。通过...

    JAVA在SQLite_嵌入式数据库中的应用

    ### JAVA在SQLite嵌入式数据库中的应用:详细解析 #### 引言 在现代软件开发领域,数据库技术扮演着至关重要的角色,它不仅为数据的存储、检索提供了基础,还支持了复杂的数据处理和分析需求。传统的数据库管理...

    手机内存卡修复山寨平台游戏

    当内存卡出现问题,如损坏、无法读取或显示错误,用户可能会面临数据丢失的风险。针对这种情况,我们可以采取一些措施来尝试修复内存卡,特别是对于Java(J2ME)平台上的游戏,因为这些游戏通常存储在内存卡上。本文...

    NTFS 详细讲解

    4. **安全权限**:NTFS支持访问控制列表(ACL),允许对文件和目录设置精细的权限,如读取、写入、执行等。 5. **事务日志(Transaction Log)**:记录文件系统的更改,确保在系统崩溃或意外关机后能恢复数据一致性...

    matlab代码转java-StockProcessor:库存处理器

    #添加Mat文件完成标记,初始化切分任务,以防止断电宕机后再启动找不到数据入口#为防止资源不足,在代码挂掉的之前处理成功的那一个的标记文件中进行标记#下一次代码运行时,从头开始,但是会先判断标记,如果标记过...

    第1章计算机,编程和Python简介习题及答案--中文

    Python语法是区分大小写的,正确的打印多行字符串的方法是在每行末尾添加反斜杠(\)或使用三引号(""")包裹字符串。 总的来说,计算机科学涉及硬件、软件、编程语言、操作系统等多个方面。了解这些基本概念对于...

    你需要的资源

    这个压缩包文件看起来是为了解决一个特定的问题:\.gradle\caches\transforms-1\files-1.1路径下的错误。这个路径涉及到Gradle的缓存机制,Gradle是一个广泛使用的自动化构建工具,尤其在Java和Android项目中。 ...

    多线程下载程序

    【多线程下载程序】是一种优化下载速度的技术,它通过将大文件分割成多个小片段,然后使用多个线程(即并发任务)同时下载这些片段,以提高整体下载效率。这种技术尤其适用于处理大型文件,如电影、软件安装包等,...

    java将数据写入内存,磁盘的方法

    4. **文件通道和NIO**:Java NIO(New IO)提供了更高效的数据传输方式,如`FileChannel`,可以进行大块数据的传输,同时支持异步操作。 5. **文件操作库**:除了标准库,还有一些第三方库,如Apache Commons IO,...

    SE阶段知识梳理..................

    【SE阶段知识梳理】 在软件工程(SE)的阶段中,掌握特定的知识点至关重要,这包括但不限于编程语言、操作系统原理、文件系统以及输入/...同时,良好的异常处理能力可以帮助开发者及时发现和解决问题,避免程序崩溃。

Global site tag (gtag.js) - Google Analytics