请教怎样从文件读到的内容一行行分析

问题描述

如下代码:1、怎样把读到的内容(在BUFFER里)一行一行进行分析?也就是getline操作2、如下的读法,可以只读一部分文件的内容吗?也就是分批读取?谢谢importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.nio.ByteBuffer;importjava.nio.channels.FileChannel;publicclasstest{publicstaticvoidmain(String[]args)throwsIOException{FileInputStreamfileInputStream=newFileInputStream("tconfirmdetail.txt");FileChannelinChannel=fileInputStream.getChannel();ByteBufferbyteBuffer=ByteBuffer.allocateDirect(57972956);while(true){inteof=inChannel.read(byteBuffer);if(eof==-1)break;byteBuffer.flip();byteBuffer.clear();}inChannel.close();}}

解决方案

解决方案二:
需要读取一行时,设计到ascii码判断,所以建议不要使用NIO,使用io包里的BufferedReader中的readLine方法读取
解决方案三:
引用1楼gufengwyx1的回复:

需要读取一行时,设计到ascii码判断,所以建议不要使用NIO,使用io包里的BufferedReader中的readLine方法读取

NIO不能一行一行readline吗?
解决方案四:
这个是我目前测试的最快读取文本文件的方式了。不过没法看啊不像bufferreader那样,readline很方便
解决方案五:
AFileInputStreamobtainsinputbytesfromafileinafilesystem.Whatfilesareavailabledependsonthehostenvironment.FileInputStreamismeantforreadingstreamsofrawbytessuchasimagedata.Forreadingstreamsofcharacters,considerusingFileReader.publicvoidgetFile2(){try{Filefile=newFile("E:\a.txt");BufferedReaderbr=newBufferedReader(newFileReader(file));BufferedWriterbw=newBufferedWriter(newFileWriter(newFile("E:\b.txt")));Stringline="";while((line=br.readLine())!=null){System.out.println(line);bw.write(line);}}catch(Exceptione){e.printStackTrace();}}

解决方案六:
楼主用的方法不常用。不评论,发一种常用的方法,可以一行一行的读取。packagecom.briup.ch11;//第一个importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.nio.Buffer;publicclassFileInputOutputTest{publicstaticvoidmain(String[]args){//声明流,FileInputStreamfis=null;//包装流BufferedInputStreambis=null;FileOutputStreamfos=null;BufferedOutputStreambos=null;//初始化并且包装流try{//要存储的源文件fis=newFileInputStream("src/com/briup/ch11/FileInputOutputTest.java");bis=newBufferedInputStream(fis);//要保存的文件的位置fos=newFileOutputStream("src/com/briup/ch11/FileInputOutputTest.txt");bos=newBufferedOutputStream(fos);//输入流读取文件byte[]buff=newbyte[128];intlen=0;while((len=bis.read(buff))!=-1){System.out.println(newString(buff,0,len));bos.write(buff,0,len);}//输出流需要刷新缓冲区bos.flush();}catch(FileNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}finally{try{//关闭释放流if(bis!=null)bis.close();if(fis!=null)bis.close();if(bos!=null)bos.close();if(fos!=null)fos.close();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}}

解决方案七:
直接看java一下BufferedReader中的readLine方法源代码,自己分析一下,就OK了。
解决方案八:
另外FileInputStream这个流貌似不提供定位的功能。分批读取的意思是一次读取一部分,这样多线程读取大数据量的信息是么?如果那样的需要用到PipedInputStreamPipedOutputStream管道流,记得还有一个是可以定位读取的流,临时忘了,帮你查查API吧
解决方案九:
importjava.nio.file.Files;importjava.nio.file.Paths;importjava.nio.charset.Charset;List<String>lines=Files.readAllLines(Paths.get("D:/Temp","examples.txt"),Charset.defaultCharset());

解决方案十:
引用5楼AA5279AA的回复:

楼主用的方法不常用。不评论,发一种常用的方法,可以一行一行的读取。Javacode??1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859packagecom.briup.ch11;//第一个……

谢谢,第一种方法我测试过,读50M的文本文件大约1.2秒第二种没用过,更快?
解决方案十一:
引用8楼huntor的回复:

Javacode??12345importjava.nio.file.Files;importjava.nio.file.Paths;importjava.nio.charset.Charset;List<String>lines=Files.readAllLines(Paths.get("D:/Temp","examples.txt"),Cha……

谢谢,这个我看不懂的
解决方案十二:
引用7楼AA5279AA的回复:

另外FileInputStream这个流貌似不提供定位的功能。分批读取的意思是一次读取一部分,这样多线程读取大数据量的信息是么?如果那样的需要用到PipedInputStreamPipedOutputStream管道流,记得还有一个是可以定位读取的流,临时忘了,帮你查查API吧

是得,不过没打算多线程同时读一个文件,因为是单硬盘只想1个线程读文件,然后每读10万行,把这10万行内容分发给别的线程处理比如3个线程好了,一个线程负责读,另外两个线程负责处理
解决方案十三:
引用6楼caoniaozhilu的回复:

直接看java一下BufferedReader中的readLine方法源代码,自己分析一下,就OK了。

同意
解决方案十四:
引用6楼caoniaozhilu的回复:

直接看java一下BufferedReader中的readLine方法源代码,自己分析一下,就OK了。

怎么个OK了?
解决方案十五:
引用5楼AA5279AA的回复:

楼主用的方法不常用。不评论,发一种常用的方法,可以一行一行的读取。Javacode??1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859packagecom.briup.ch11;//第一个……

谢谢,测试了你的第二种方法,很慢,比bufferreader慢3.5倍
解决方案:
publicstaticvoidmain(String[]args)throwsIOException{RandomAccessFilefile=newRandomAccessFile("1.txt","r");FileChannelfileChannel=file.getChannel();ByteBufferbuffer=fileChannel.map(MapMode.READ_ONLY,0,fileChannel.size());CharBuffercharBuffer=Charset.forName("utf-8").decode(buffer);file.close();BufferedReaderbufferedReader=newBufferedReader(newStringReader(charBuffer.toString()));Stringstr=null;while((str=bufferedReader.readLine())!=null){System.out.println(str);}}

用BufferedReader包装一下就行了,不过文件大了受不了,你可以考虑每次读定长,然后再往后一直读到换行符为止
解决方案:
引用15楼wapigzhu的回复:

Javacode??12345678910111213publicstaticvoidmain(String[]args)throwsIOException{RandomAccessFilefile=newRandomAccessFile("1.txt","r");FileChannelfileChannel……

这样能比BUFFERRADER快吗?如果不能快,就没意思了文件有1.2G吧
解决方案:
引用15楼wapigzhu的回复:

Javacode??12345678910111213publicstaticvoidmain(String[]args)throwsIOException{RandomAccessFilefile=newRandomAccessFile("1.txt","r");FileChannelfileChannel……

谢谢,能不能把那个allocatedirect也就是directbuffer也包装进去?谢谢
解决方案:
什么叫做比BufferedReader慢,你说的慢是因为平时用的时候,它的底层数据是从FileInputStream里面来的,BufferedReader本身是跟Stream什么都没有关系的,它只负责操作你给它的数据,你给它数据的时候慢,当然它给你结果就慢你把一个内存里面的字符串直接让BufferedReader读,那还会觉得慢?
解决方案:
引用15楼wapigzhu的回复:

Javacode??12345678910111213publicstaticvoidmain(String[]args)throwsIOException{RandomAccessFilefile=newRandomAccessFile("1.txt","r");FileChannelfileChannel……

另外想再请教一下,readline后怎样以最快的方式判断这一行是否含有比如:“你”,“我”等字符串?特征是“你”“我”等字符串总是出现在行的比较靠右边的位置,比如"8457TRGDF","FSAFDFFDF","FSFKJDHFSF","哦你好啊","AA"
解决方案:
引用18楼wapigzhu的回复:

什么叫做比BufferedReader慢,你说的慢是因为平时用的时候,它的底层数据是从FileInputStream里面来的,BufferedReader本身是跟Stream什么都没有关系的,它只负责操作你给它的数据,你给它数据的时候慢,当然它给你结果就慢你把一个内存里面的字符串直接让BufferedReader读,那还会觉得慢?

谢谢,我的意思是和下面代码比,哪个更快?BufferedReaderreader=newBufferedReader(newFileReader("test.txt"));reader.readLine();Stringline=null;Stringitem[];for(Stringline=null;(line=reader.readLine())!=null;){}
解决方案:
引用17楼wannaspring的回复:

引用15楼wapigzhu的回复:Javacode??12345678910111213publicstaticvoidmain(String[]args)throwsIOException{RandomAccessFilefile=newRandomAccessFile("1.txt","r")……

publicstaticvoidmain(String[]args)throwsIOException{RandomAccessFilefile=newRandomAccessFile("1.txt","r");FileChannelfileChannel=file.getChannel();//这个地方要按文件大小来,如果实在要定长就只能按先前说的,继续往后读到换行符//或者把已经读过但是没有凑成正行的put回去,然后compact,再继续读ByteBufferbuffer=ByteBuffer.allocateDirect((int)fileChannel.size());fileChannel.read(buffer);buffer.flip();CharBuffercharBuffer=Charset.forName("utf-8").decode(buffer);file.close();BufferedReaderbufferedReader=newBufferedReader(newStringReader(charBuffer.toString()));Stringstr=null;while((str=bufferedReader.readLine())!=null){System.out.println(str);}}

你是要这样?
解决方案:
引用20楼wannaspring的回复:

引用18楼wapigzhu的回复:什么叫做比BufferedReader慢,你说的慢是因为平时用的时候,它的底层数据是从FileInputStream里面来的,BufferedReader本身是跟Stream什么都没有关系的,它只负责操作你给它的数据,你给它数据的时候慢,当然它给你结果就慢你把一个内存里面的字符串直接让BufferedReade……

当然用nio的更快咯,他是一整块内存直接读的newFileReader("test.txt"))这个是按stream读的底层操作会比nio的多很多
解决方案:
引用19楼wannaspring的回复:

引用15楼wapigzhu的回复:Javacode??12345678910111213publicstaticvoidmain(String[]args)throwsIOException{RandomAccessFilefile=newRandomAccessFile("1.txt","r")……

indexOf不能满足这个需求么?
解决方案:
引用22楼wapigzhu的回复:

引用20楼wannaspring的回复:引用18楼wapigzhu的回复:什么叫做比BufferedReader慢,你说的慢是因为平时用的时候,它的底层数据是从FileInputStream里面来的,BufferedReader本身是跟Stream什么都没有关系的,它只负责操作你给它的数据,你给它数据的时候慢,当然它给你结果就慢你把一个内存里面的字符串直接让……

我已经糊涂了,NIO,DIRECTBUFFER(ALLOCATEDIRET)CHANNEL简单说吧,如下代码是我目前知道的最快的方式了,是否有更快的?NIO结合channel我测试了,比下面的快13%,但是是读到buffer,然后从buffer解码,再读成一行一行,貌似反而更慢了BufferedReaderreader=newBufferedReader(newFileReader("test.txt"));reader.readLine();Stringline=null;Stringitem[];while((line=reader.readLine())!=null){}
解决方案:
引用23楼wapigzhu的回复:

引用19楼wannaspring的回复:引用15楼wapigzhu的回复:Javacode??12345678910111213publicstaticvoidmain(String[]args)throwsIOException{RandomAccessFilefile=newRandomAccessFile(……

不只是判断一个字符,有好几个,如果正则是很慢的,不考虑但是如果indexOfN次,就会遍历字符串N次,也慢
解决方案:
引用24楼wannaspring的回复:

引用22楼wapigzhu的回复:引用20楼wannaspring的回复:引用18楼wapigzhu的回复:什么叫做比BufferedReader慢,你说的慢是因为平时用的时候,它的底层数据是从FileInputStream里面来的,BufferedReader本身是跟Stream什么都没有关系的,它只负责操作你给它的数据,你给……

你是怎么测的?我刚试过了,一个11M的小说txt文件,读出来转码并存到ArrayList,用nio只用50ms左右用FileReader花了235ms代码在下面你可以试试看?nio的RandomAccessFilefile=newRandomAccessFile("b.txt","r");FileChannelfileChannel=file.getChannel();ByteBufferbuffer=ByteBuffer.allocateDirect((int)fileChannel.size());fileChannel.read(buffer);buffer.flip();CharBuffercharBuffer=Charset.forName("utf-8").decode(buffer);file.close();BufferedReaderbufferedReader=newBufferedReader(newStringReader(charBuffer.toString()));List<String>list=newArrayList<String>();longtime=System.currentTimeMillis();Stringstr=null;while((str=bufferedReader.readLine())!=null){list.add(str);}System.out.println(System.currentTimeMillis()-time);

FileReaderBufferedReaderbufferedReader=newBufferedReader(newFileReader("b.txt"));Stringstr=null;longtime=System.currentTimeMillis();List<String>list=newArrayList<String>();while((str=bufferedReader.readLine())!=null){list.add(str);}System.out.println(System.currentTimeMillis()-time);

解决方案:
NIO:是文件映射内存的方式,可以方便你处理大文件。不用担心由于文件过大一次读到内存中造成内存溢出BufferedReader,这个方式应该比没有缓冲区的读速度快。因为他是从文件中分批读取内容的。传统的没有缓冲区的文件读取速度最慢。如果是小文件很显然BufferedReader要更快,但是大文件我想目前只能用NIO去处理了。

时间: 2024-12-26 23:02:10

请教怎样从文件读到的内容一行行分析的相关文章

毕业设计-基于内容与链接分析的主题爬虫研究与开发

问题描述 基于内容与链接分析的主题爬虫研究与开发 毕业设计,研究网页排名算法,等等.如何实现?有哪个大神会,加我QQ774921781.帮帮忙,跪求程序.谢谢各位了................ 解决方案 http://wenku.baidu.com/link?url=RYx_EIqHBUszyPyecQkDfDdCPs64xeVqcGVFL7UFJOcxkEKDfOKp_R9J-rLZu_MKTdOlE4U_wMgqaIYEi5rCBlEEbwuzaDS6F4XlO1wr6uS

如何用R进行文本内容的情感分析

一.关于文本内容的情感分析 一篇文章反映了什么态度?褒义还是贬义?肯定还是否定?喜怒哀乐愁,反映的是哪种情绪特征?对这些内容的分析就是情感分析,或者叫情感倾向分析.情感倾向 可认为是主体对某一客体主观存在的内心喜恶,内在评价的一种倾向.当然,有正常阅读能力的人,在看了一篇文章后能够判断文章的情感和极性,但这是主观体 验,不是量化数据.在对文章进行分析的时候,通常需要进行量化的分析,显得更加直观.客观. 情感分析基本上有两种方法,一种是极性分析,一种是情感类别分析.前者分析文章的总体态度是肯定还是

从网站内容方向来分析网编与SEO的关系

摘要: 网编是做SEO的必经之路吗?身边多数seo朋友多说自己也是网编出身,自己也在某某公司做了多长的网编.对于SEO我有些迷惑,SEO到底是什么?多数人告seo就优化,也有直接告诉我做关键词 网编是做SEO的必经之路吗?身边多数seo朋友多说自己也是网编出身,自己也在某某公司做了多长的网编.对于SEO我有些迷惑,SEO到底是什么?多数人告seo就优化,也有直接告诉我做关键词排名,监控.那为什么说网编是SEO的必经之路呢?因为在日常的工作中都揉合着seo的重要因素,不知大家赞同不赞同"内容为王,

”苏州SEO“目标关键词内容页权重分析

目的:此篇文章的实际用途是分析苏州SEO这个关键词的竞争程度以及作为内容页发布所能取得的最大权重值. 声明:此篇文章通篇都将是围绕这个关键词展开,不排除可能出现的轻微阅读障碍,笔者尽量在不影响阅读的情况下去提高苏州SEO这个词的词频和总数.阅读者可以认真的观察笔者是如何通过安插关键词来获得较好的排名.   [文章内容影响排名的主要因素分析] 1,相关关键词的辅助,对于苏州SEO这个关键词来说,相关关键词包括:苏州网站优化.苏州网络推广.苏州搜索引擎优化.苏州网络营销等.因此在关键词的周围出现这些

音视图(泛内容)网站透视分析 DB设计 - 阿里云(RDS、HybridDB) for PostgreSQL最佳实践

标签 PostgreSQL , 用户透视 , 设备透视 , 圈人 , 标签 , 视频网站 , 优酷 , 土豆 , 喜马拉雅 背景 日常生活中,人们使用最多的除了社交类网站.购物网站,估计就是音频.视频.图文信息类内容网站了. 视频网站,已经渗透到各种终端,除了喜闻乐见的手机,还包括移动终端.电脑.盒子.电视.投影仪等.有设备属性.会员属性.渠道属性等. 内容运营是非常重要的环节,而透视则是运营的重要武器. 业务需求 1.生成设备.会员画像 ID.各个维度的标签.其中包括一些多值列标签(例如最近7

百度快照不更新内容不收录分析

1.网站改版:因为各种原因迫切需要改版. 搜索引擎会在爬蜘蛛的时候发现大量的网站架构进行改变,严重的情况可能导致网站被降权,收录也会变慢,甚至不再收录,本人的网站"遮天吧"在刚开始运营的时候(2010-12-1)也是过于着急上线,导致最后被迫改版,改版后百度很快就停止了快照和收录,几乎等到一个月后收录慢慢恢复正常,特别是对于百度,收录比较慢,google的相对要快很多.这部分是搜索引擎的问题,只能是等.站长门可以通过高权重的网站做外链,每天按照一定时间发布原创文章,文章内做瞄文本指向首

中央重点新闻网站:内容传播影响力分析报告

报告要点:中央13家重点新闻网站长期以来承担了传统优势媒体向互联网转型的排头兵重任,也是互联网传播环境中最新信息的权威发布者.重大新闻的来源方.在新的政策指导下,最有机会成长为具有公信力和影响力的新型媒体集团,那么在当前的传播环境下,中央重点新闻网站内容在互联网上的传播和影响如何?本报告试图通过分析13家中央重点新闻网站内容被互联网其他媒体的转载数据及在典型网站的用户浏览数据,来评估中央重点新闻网站在互联网上的传播力和影响力现状,帮助网站了解自身的优势及不足,以建立和提升更为强大的网络传播力和影

ASP.net在页面所有内容生成后、输出内容前对页面内容进行操作

asp.net|页面 以前曾说过用HttpModule来在Response前更改Cookie,今天遇到Asp.net自做主张,把我辛苦转换的汉字ꪻ这样的表现形式,又转成汉字,别说是Asp.net的Web控件,就是Html控件Ranat=server都会被它强行转换成汉字输出.如果把页面内容一行行用Response写出来,那样太累,而且容易出错.所以最好的办法是在Asp.net的生成动作完成之后,再进行一次转换,这样Asp.net就拿你没有办法了.Asp.net的所有生成动作在Render方法中完

关于bat调用class,请教大家

问题描述 关于bat调用class,请教大家 我的bat内容: @echo on @set CLASSPATH=%CLASSPATH%;.libPlatform.jar @set CLASSPATH=%CLASSPATH%;.class*.* @java bin.Password.jar 我的目录结构: C:javabin C:javaclass C:javalib C:javaPassword.jar 我想完成的效果就是点击bat,打开我的Password.jar(已完成的java程序,mye