java 中的nio关于一行一行读文件,怎么读

javaDev1981 2007-09-11 04:10:24
这两天研究nio包,看的例子和说明,发现nio只能一个字节一个字节的读写没办法以行为单位进行读写,各位,有办法吗?
...全文
892 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
syflyhua 2011-12-07
  • 打赏
  • 举报
回复
还有分吗,
lvzi98 2011-07-14
  • 打赏
  • 举报
回复
一个2M的文件,差不多有6千条数据左右。。。

我现在也和楼主一样的问题啊。。。。不知道楼主当年是怎么解决的。。。
qiye2008 2009-03-12
  • 打赏
  • 举报
回复
学习了!
javaDev1981 2007-09-12
  • 打赏
  • 举报
回复
zephyr_cc() ( ) 信誉:100 说的方法,如果一个文件是几百M,那是不是全部读入内存??
javaDev1981 2007-09-12
  • 打赏
  • 举报
回复
谢谢zephyr_cc
javaDev1981 2007-09-12
  • 打赏
  • 举报
回复
看来如果想一行一行处理,只能用传统的I/O了
zephyr_cc 2007-09-12
  • 打赏
  • 举报
回复
要是需要一行一行处理的话还是用BufferedReader的readLine吧...
我试了试,用ByteBuffer的话,光处理分行问题就费不少时间.
zephyr_cc 2007-09-11
  • 打赏
  • 举报
回复
为什么要设1K缓存呢?
按下面这样,有什么判断'\n','\r'的在content数组里面进行不就行了?
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class Test16 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
FileInputStream fi = new FileInputStream("1.txt");
FileChannel fc = fi.getChannel();
int length = (int) fc.size();
System.out.println(length);
MappedByteBuffer buffer = fc.map(FileChannel.MapMode.READ_ONLY, 0, length);
byte[] content = new byte[length];
buffer.get(content, 0, length);
System.out.print(new String(content));
}
}
joejoe1991 2007-09-11
  • 打赏
  • 举报
回复
孙卫琴的<<java网络编程精解>>里讲的很清楚 不过我忘了。。
不好意思。。
javaDev1981 2007-09-11
  • 打赏
  • 举报
回复
用nio有没可能我定的缓存为1K,刚读入的文件数据中可能最后一行则只读了半行到内存,这样,如果根据/n/r来判断换行就会出问题??
javaDev1981 2007-09-11
  • 打赏
  • 举报
回复
用传统的I/O,不知刚才我说的需求能不能达到要求
javaDev1981 2007-09-11
  • 打赏
  • 举报
回复
主要是我要把文件中的内容一行一行的读出后进行解析,如果用nio,刚只能是按块进行读,这样,我就很难或者没办法得到一行及其一行里的内容了(我现在操作的文件一般都有2M,一次最少操作上百个文件,所以想找个能不占资源的I/O),不知各位有没好方法?谢谢。。。。。
zephyr_cc 2007-09-11
  • 打赏
  • 举报
回复
如果把readline()这样的方法看成是使用一个小缓冲区的话,
nio就是使用一个大缓冲区作为一个单位读写.

'行'是视觉上的概念,计算机不过是通过'\n','\r'区分的.
amazeur 2007-09-11
  • 打赏
  • 举报
回复
up
不能封装能别的吗

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧