`

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从读取本地文件的指定行数

    ### Java从读取本地文件的指定行数 ...通过上述步骤,我们可以有效地实现从Java中读取本地文件的指定行数的需求。这种能力对于处理大量文本数据非常有用,特别是在分析日志文件或处理文本数据时。

    java代码计算行数

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

    java读取文件方法大全

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

    CSV表格拆分,可以把一个CSV文件按固定行数拆分成多个文件

    在处理大数据时,一个大型CSV文件可能会变得难以管理,这时就需要将它拆分成多个小文件。本教程将详细解释如何通过特定工具或编程方式实现CSV表格的拆分。 ### CSV文件的特点 1. **易读性**:由于CSV是纯文本格式,...

    java 读取文件 文件读取操作

    这段代码每次读取一个字节,并将其写入控制台,直到文件结束(返回值为-1)。 2. **按字符读取文件内容** 当处理包含文本数据的文件时,通常使用`java.io.InputStreamReader`和`java.io.Reader`类按字符读取。...

    C#计算txt文件行数

    在C#编程中,计算一个TXT文件的行数是一项常见的任务,特别是在处理大量文本数据时。这个任务可以通过读取文件并逐行处理来实现。以下是一个详细的步骤和知识点讲解: 1. **文件流(FileStream)**:在C#中,我们...

    java 按顺序读取文件

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

    C#计算txt文件的行数

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

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

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

    fastreport打印固定行数报表实例

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

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

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

    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读取shp文件代码

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

    java读取*.mdb文件数据

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

    Python实现Java代码行数读取及单元测试

    标题 "Python实现Java代码行数读取及单元测试" 提示了我们主要涉及两个技术领域:Python编程和Java代码分析。这个项目的核心是利用Python来读取和分析Java源代码,计算其中的代码行数,同时对这个过程进行单元测试以...

    java 读取PDF文件中的内容

    在Java编程环境中,读取PDF文件中的内容是一个常见的任务,特别是在处理文档自动化或者数据分析时。PDF(Portable Document Format)是一种跨平台的文件格式,用于精确地保留文档的格式和内容。下面将详细介绍如何...

Global site tag (gtag.js) - Google Analytics