`

java实现文件的按照每次读取固定行数读取一个 文件 ,计算文件总行数和通过LINUX 命令读取固定行数文件内容,计算文件总行数

 
阅读更多

1 ) java实现文件的按照每次读取固定行数读取一个文件

 

/**
	 * 
	 * @param fileRowCount 文件的总行数
	 * @param firstReadRowNum 第一次读取文件的行数
	 * @param lastReadRowNum 下一次要读取文件的行数
	 * @param fileName 文件的名称
	 */
	public void readFile(int fileRowCount, int firstReadRowNum, String fileName) {
		// readFileName
		LineNumberReader lineReader = null ;
		try {
			lastReadRowNum = firstReadRowNum;
			while (lastReadRowNum < fileRowCount) {
				if (Common.dataList.size() >= listSize) {
					logger.info("队列超过最大值:" + Common.dataList.size());
					try {
						Thread.currentThread().sleep(5000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				} else {
					lastReadRowNum = firstReadRowNum + readRowCount;
					if (lastReadRowNum > fileRowCount) {
						lastReadRowNum = fileRowCount;
					}
//					fileContent = sendMand(firstReadRowNum, lastReadRowNum,
//							lastReadRowNum, fileName);
					
					String dataStr = null ; //需要处理的字符串
					StringBuffer rtnBuf = new StringBuffer();
					int lineNum =0 ;
					int count = 0 ;
					String path="";
					path = Common.homePath+File.separator+fileName;
					File file = new File(path); 
					logger.info("构建文件对象成功,文件对象名是:"+path);
					lineReader = new LineNumberReader(new FileReader(file)); 
					logger.info("开始从定位到到需要读取的起始行是:"+firstReadRowNum);
					
					while((dataStr=lineReader.readLine())!=null){
						lineNum = lineReader.getLineNumber() ;
						/**
						 * 在起始行号和最后行号之间
						 */
						if(lineNum >=firstReadRowNum && lineNum<lastReadRowNum ){
							if(lineNum == firstReadRowNum ){
								logger.info("定位到需要读取的行号是:"+firstReadRowNum+",读取到的行号是:"+lastReadRowNum);
							}
							rtnBuf.append(dataStr+"\n");
						}
						if(lineNum==lastReadRowNum) {
							count++ ;
							logger.info("循环读取文件:"+count+"次,每次读取"+readRowCount+"行成功,起始行数是:"+firstReadRowNum+"终止行数是:"+lastReadRowNum);
							
							fileContent=rtnBuf.toString() ;
							
							dbTelnetFile = new DbTelnetFile();
							dbTelnetFile.setSFileName(readFileName);
							dbTelnetFile.setEmsName(emsName);
							dbTelnetFile.setILastLine(lastReadRowNum);
							dbTelnetFile.setStartRow(firstReadRowNum);
							dbTelnetFile.setEndRow(lastReadRowNum);
							dbTelnetFile.setContent(fileContent);
							
							/**
							 * 检查队列的大小是否已经超过最大值
							 */
							while(Common.dataList.size() >= listSize) {
								logger.info("队列超过最大值:" + Common.dataList.size());
								try {
									Thread.currentThread().sleep(5000);
								} catch (InterruptedException e) {
									e.printStackTrace();
								}
							}
							// 放入到队列中…………
							Common.dataList.offer(dbTelnetFile);
//							Common.dataList.add(dbTelnetFile);
							logger.info("将对象TelnetFile成功放入到队列中,iLastLine:"+dbTelnetFile.getILastLine()+",");
							firstReadRowNum = lastReadRowNum;
							lastReadRowNum = firstReadRowNum + readRowCount;
							if (lastReadRowNum > fileRowCount) {
								lastReadRowNum = fileRowCount;
							}
							/**
							 * 用最后一次读取的值,构建StringBuffer对象
							 */
							rtnBuf = new StringBuffer(dataStr+"\n");
							dbTelnetFile = null ;
						}
					}
					
				}
			}

			logger.info("读取文件" + readFileName + "成功");
		} catch (Exception e) {
			e.printStackTrace() ;
			logger.error("读取文件错误"+e.getMessage());
		}finally{
			/**
			 * 关闭文件流对象
			 */
			if(lineReader !=null){
				try {
					lineReader.close() ;
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
 

 

2)java实现计算文件总行数(计算一个9百万行的文件需要的时间效率大约是13S)

 

 

/**
	 *通过java 程序获取文件的行数
	 * @return
	 */
	public int getFileRowCountBy(String fileName){
		logger.info("统计文件行数开始:") ;
		long temp = +System.currentTimeMillis() ;
		int num = 0;
		LineNumberReader  lineReader = null ;
		try{
		
			String path="";
			path = Common.homePath+File.separator+fileName;
			File file = new File(path); 
			logger.info("构建文件对象成功,文件对象名是:"+path);
			lineReader = new LineNumberReader(new FileReader(file)); 
			while((lineReader.readLine())!=null){
				num++ ;
			}
			logger.info("统计文件行数结束,用的时间是:"+(System.currentTimeMillis()-temp)/1000+"s") ;
			logger.info("文件的一共有: "+num+" 行");
		}catch(Exception e){
			logger.error("获取文件总行数异常:"+e.getMessage());
			e.printStackTrace() ;
		}finally{
			if(lineReader != null){
				try{
					lineReader.close() ;
				}catch(Exception e){
					logger.error("关闭文件异常");
					e.printStackTrace() ;
				}
				
			}
		}
		
		return num ;
	}
 

3) 通过LINUX 命令读取固定行数文件内容,由java调用

 

 

	public String sendMand(int beginRow,int endRow,int readRowCount,String fileName) throws Exception{
		if(beginRow ==0){
			beginRow =1 ;
		}
		String returnResult = "" ;
		String cmd = "sed -n '"+beginRow+","+endRow+"p;"+endRow+"q' "+fileName;
		logger.info("需要发送:"+cmd+"开始");
		telnetManager.sendCommandAutoLine(cmd) ;
		returnResult = telnetManager.waitForStringReturn(telnetManager.getOsTag2(), 20000);
		logger.info("成功发送:"+cmd+"命令");
		logger.info(returnResult);
		return returnResult ;
	}
 

 

4)通过LINUX 命令计算文件总行数,由java调用

 

 

/**
	 * 通过linux 命令获取文件行数
	 * @param fileName
	 * @return
	 */
	public String getFileRowCount(String fileName) {
		String fileRowCountStr="";
		String sub="" ;
		try{
			String cmdValue = "cat "+fileName+" | wc -l" ;
			telnetManager.sendCommandAutoLine(cmdValue);
			fileRowCountStr = telnetManager.waitForStringReturn(telnetManager.getOsTag2(), 20000);
			int index1 = fileRowCountStr.indexOf("\r\n");
			int index2 = fileRowCountStr.lastIndexOf("\r\n");
			if(index1 !=-1&& index2 !=-1){
				sub = fileRowCountStr.substring(index1, index2) ;
				if(sub != null &&!"".equals(sub)){
					sub = sub.replaceAll("\r\n","");
				}
				if("".equals(sub)){
					sub = fileRowCountStr.substring(0, index2) ;
				}
			}
			else {
				 index1 = fileRowCountStr.indexOf("\n");
				 index2 = fileRowCountStr.lastIndexOf("\n");
				 if(index1 != -1&& index2 != -1){
					 sub = fileRowCountStr.substring(index1, index2) ;
					 sub = sub.replaceAll("\n","");
				 }
				 if("".equals(sub)){
						sub = fileRowCountStr.substring(0, index2) ;
					}
			}
		}catch(Exception e){
			
		}
		
		fileRowCountStr = sub.trim();
		return fileRowCountStr;
	}
 

 

 

 

分享到:
评论

相关推荐

    c统计c文件里的总行数,空行数,有效行数,注释行数

    本文通过分析提供的代码片段,详细介绍了如何实现一个C语言程序来统计C文件中的总行数、空行数、有效行数及注释行数。通过对各个部分的详细解释,不仅帮助读者理解了整个程序的工作原理,还提供了一些具体的实现思路...

    详解Java无需解压直接读取Zip文件和文件内容

    Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...

    JAVA实现远程文件读取

    JAVA实现远程文件读取 JAVA是一种广泛应用于软件开发的编程语言,随着网络技术的发展,JAVA也提供了许多支持...JAVA实现远程文件读取技术可以广泛应用于各种文件共享和文件传输场景,提高了文件处理的效率和灵活性。

    java代码计算行数

    6. **返回结果**:最后,工具类应提供一个方法,返回统计到的总行数、代码行数和注释行数。 以下是一个简单的示例代码片段,展示了如何开始这个过程: ```java import java.io.*; public class CodeCounter { ...

    java读取文件方法大全

    在Java中,读取文件是一项基本且重要的操作,它可以通过多种方式实现,如字节流、字符流和基于行的读取。下面将详细介绍这些方法: #### 字节级读取:`readFileByBytes()` 此方法采用字节流的方式读取文件,适用于...

    计算代码行数的(包含lua)

    对于支持Lua代码行数的计算,这可能是通过识别文件扩展名为.lua或者内部解析Lua语法来实现的。 在进行代码行数统计时,通常会区分注释行、空行和有效代码行。有效代码行指的是实际执行的语句,不包括注释和空白。...

    java 按顺序读取文件

    如果文件内容较多,使用缓冲可以显著提高读取速度,因为数据会一次性读入内存,而不是每次读取一个字符。 除了`BufferedReader`,还有其他方式可以按顺序读取文件,比如使用`Scanner`类。`Scanner`提供了更丰富的...

    C#计算txt文件的行数

    在C#编程环境中,计算一个TXT文件的行数是一项常见的任务,特别是在处理大量文本数据时。这个过程涉及到读取文件内容并逐行处理。以下是一个详细的步骤解释和示例代码,帮助你理解如何实现这个功能。 1. **打开文件...

    易语言大文本文件随机读取一行内容

    由于我们不知道具体行的长度,可以先设定一个合理的缓冲区大小,如果读取的内容中包含行结束符,则表示已经读取完一行。 5. **处理读取内容**: 将读取到的字符串进行处理,去除行结束符,然后返回给调用者。 6. ...

    fastreport打印固定行数报表实例

    总结,这个"fastreport打印固定行数报表实例"是一个实际操作示例,演示了如何在Delphi 7环境中利用FastReport创建并打印具有固定行数的报表,这对于财务报告和其他需要规范化数据展示的应用场景非常有价值。通过学习...

    从数据库中读取指定行数记录

    例如,我们可能希望从一个表中读取从第三条记录开始的若干条数据。这种需求常见于分页显示、数据分批处理等场景。本文将详细介绍如何通过SQL语句实现这一功能。 #### 一、基本概念 在开始之前,我们需要了解几个...

    java 读取FTP服务器文件

    在Java编程环境中,读取FTP(File Transfer Protocol)服务器上的文件是一项常见的任务,尤其是在Web服务器和Linux系统环境下。FTP提供了一种可靠的方式来传输文件,使得应用程序可以远程访问和操作存储在FTP服务器...

    14-Java操作Linux命令分割合并文本文件1

    标题中的“14-Java操作Linux命令分割合并文本文件1”指的是使用Java编程语言来执行Linux命令,以实现对文本文件的分割和合并操作。在处理大文件时,由于内存限制,不能一次性将整个文件读入,因此需要采用分块处理的...

    python批量读取txt文件(读取指定行内容/统计关键词数量/读取指定关键词之间的内容/创建空白txt/统计行数和字符串数量)

    # 6.2创建界面控件:5个单选按钮,4个标签和单行编辑框,1个执行按钮 # 6.3单选按钮和执行链接对应函数 关于功能5修改编码格式——写该功能主要因为,经常遇到一些文本文件由于编码格式不一致的问题,导致无法用写...

    java nio 包读取超大数据文件

    ### Java NIO 处理超大数据文件的知识点详解 ...综上所述,使用Java NIO处理超大数据文件时,关键是利用好内存映射文件技术和合理的数据读取策略,通过适当的分块和数据解析方法,可以有效地提升读取速度和处理能力。

    Java读取大文件的处理

    Java读取大文件的处理是Java编程中的一项重要技术,特别是在处理大文件时需要注意性能和响应速度。下面我们将对Java读取大文件的处理技术进行详细的介绍。 标题解释 Java读取大文件的处理是指使用Java语言来读取大...

    java按行读取大文件并解析入库

    为了高效地处理这类问题,我们可以利用Java的`java.nio`包中的BufferedReader和FileChannel等类,实现按行读取大文件,并将其内容解析后存储到数据库中。本文将详细讲解这一过程。 首先,我们需要了解`java.nio`包...

    java读取shp文件代码

    一个完整的Shapefile由多个文件组成,包括.shp、.shx和.dbf等。其中,.shp文件存储几何信息,而.dbf文件则存储属性信息。本文将基于提供的代码片段,详细介绍如何使用Java语言来读取Shapefile文件中的几何信息以及...

    java读取*.mdb文件数据

    在提供的压缩包中,有一个名为"ucanaccess-2.0.9.2.jar"的文件,这是UCanAccess驱动,它是一个开源的Java库,允许Java应用程序直接操作.MDB和.ACCDB格式的Access数据库,而无需安装任何Microsoft软件。要使用这个...

    Java实现按行分割大文件

    Java实现按行分割大文件是指将一个大的文本文件按行分割成几个小文件的过程。这个过程可以使用Java语言来实现,本文将详细介绍Java实现按行分割大文件的方法。 知识点1: Java中读取大文件的方法 Java中有多种方法...

Global site tag (gtag.js) - Google Analytics