linux每次取固定个数的文件,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

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值