readLine()的问题?

opteva560 2010-10-11 02:50:07
读一个文本,第一次用readLine()之后,再用一次readLIne()读同样文本,它从第一次的行标记继续往下读,怎么让它从文件的第一行重新开始呀???
...全文
303 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hardycheng 2010-10-13
  • 打赏
  • 举报
回复
重新关闭流然后再打开就行了吧
kyousuke 2010-10-13
  • 打赏
  • 举报
回复
这是什么跟什么啊
Miracle1216 2010-10-13
  • 打赏
  • 举报
回复
不懂什么意思
amossavez 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 sdxazly 的回复:]

public class LineNumberReader
extends BufferedReader

跟踪行号的缓冲字符输入流。此类定义方法 void setLineNumber(int) 和 int getLineNumber(),它们可分别用于设置和获取当前行号。

默认情况下,行编号从 0 开始。该行号随数据读取递增,并可以通过调用 setLineNumber(int) 进……
[/Quote]
虽然改变了行号,但是不能改变流的位置
opteva560 2010-10-12
  • 打赏
  • 举报
回复
我正是不知道如何将标志 设到第一行呀
凉岑玉 2010-10-12
  • 打赏
  • 举报
回复
这个我没用过·但是竟然楼主说再次调用的时候可以从第一次读取的标志处开始读取··那为什么不每次调用的时候把标志设置到第一行去呢?
amossavez 2010-10-12
  • 打赏
  • 举报
回复

* 文件随机访问的方法
*
* void seek(long pos); 将文件指针移动到参数指定的位置。
* long getFilePointer(); 得到当前文件指针的位置。
* int skipBytes(int n); 将文件指针向前移动参数指定的n个字节。
* String readLine(); 从当前文件指定位置读取一行。
*
*/
public class RandomFile
{
public static void main(String[] args)
{
String tempStr;
int fileLines = 0;
long pointerLast = 0;
try
{
RandomAccessFile inObj = new RandomAccessFile("d:\\mydir\\secondFile.txt", "rw");
while (inObj.readLine() != null)
fileLines++;
for (int i =0; i < fileLines / 2; i++)
{
inObj.seek(2 * i);
tempStr = inObj.readLine();
System.out.println(tempStr);
}
pointerLast = inObj.getFilePointer();
}catch(IOException e)
{
e.printStackTrace();
}
try
{
RandomAccessFile fileObj = new RandomAccessFile("d:\\mydir\\secondFile.txt", "rw");
String writeStr = new String("Insert a string!");
fileObj.seek(pointerLast);
fileObj.writeChars(writeStr);
}catch(IOException e)
{
e.printStackTrace();
}
}
}
ETCentury 2010-10-12
  • 打赏
  • 举报
回复
setLineNumber(),getLineNumber()

学习了
sdxazly 2010-10-12
  • 打赏
  • 举报
回复
public class LineNumberReader
extends BufferedReader

跟踪行号的缓冲字符输入流。此类定义方法 void setLineNumber(int) 和 int getLineNumber(),它们可分别用于设置和获取当前行号。

默认情况下,行编号从 0 开始。该行号随数据读取递增,并可以通过调用 setLineNumber(int) 进行更改。
opteva560 2010-10-12
  • 打赏
  • 举报
回复
请教 ......
hack_ccsl 2010-10-11
  • 打赏
  • 举报
回复
简单的读一般如下,

while ( (var = xx.readLine()) != null )
{
sysout("var");
}


至于你的问题。。。。明确需求!—*( !·#¥%……
oO寒枫Oo 2010-10-11
  • 打赏
  • 举报
回复
全部读出来了再说
每一行保存为数组的一个元素

第一行就是数组的第一个元素 反复io读取效率低
小王来巡山 2010-10-11
  • 打赏
  • 举报
回复
这是什么跟什么啊
小王来巡山 2010-10-11
  • 打赏
  • 举报
回复
这是什么跟什么啊
小王来巡山 2010-10-11
  • 打赏
  • 举报
回复
这是什么跟什么啊
huanshayi987654318 2010-10-11
  • 打赏
  • 举报
回复
46554646456
BearKin 2010-10-11
  • 打赏
  • 举报
回复
对了 我没实验过 你自己实验吧 如果不行 留言
BearKin 2010-10-11
  • 打赏
  • 举报
回复
根据LZ的需求 你可以通过这个类来完成 运气真好 刚打开API 就找到了。。
BearKin 2010-10-11
  • 打赏
  • 举报
回复
java.io
类 LineNumberReader

java.lang.Object
继承者 java.io.Reader
继承者 java.io.BufferedReader
继承者 java.io.LineNumberReader

所有已实现的接口:
Closeable, Readable

public class LineNumberReader
extends BufferedReader

跟踪行号的缓冲字符输入流。此类定义方法 void setLineNumber(int) 和 int getLineNumber(),它们可分别用于设置和获取当前行号。

默认情况下,行编号从 0 开始。该行号随数据读取递增,并可以通过调用 setLineNumber(int) 进行更改。但要注意,setLineNumber(int) 不会实际更改流中的当前位置;它只更改将由 getLineNumber() 返回的值。

可认为行是由换行符('\n')、回车符('\r')或回车后面紧跟换行符中的任何一个终止的。

从以下版本开始:
JDK1.1

字段摘要

从类 java.io.Reader 继承的字段
lock

构造方法摘要
LineNumberReader(Reader in)
使用默认输入缓冲区的大小创建新的行编号 reader。
LineNumberReader(Reader in, int sz)
创建新的行编号 reader,将字符读入给定大小的缓冲区。

方法摘要
int getLineNumber()
获得当前行号。
void mark(int readAheadLimit)
标记该流中的当前位置。
int read()
读取单个字符。
int read(char[] cbuf, int off, int len)
将字符读入数组中的某一部分。
String readLine()
读取文本行。
void reset()
将该流重新设置为最新的标记。
void setLineNumber(int lineNumber)
设置当前行号。
long skip(long n)
跳过字符。

从类 java.io.BufferedReader 继承的方法
close, markSupported, ready

从类 java.io.Reader 继承的方法
read, read

从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait


构造方法详细信息
LineNumberReader

public LineNumberReader(Reader in)

使用默认输入缓冲区的大小创建新的行编号 reader。

参数:
in - 提供基础流的 Reader 对象。

LineNumberReader

public LineNumberReader(Reader in,
int sz)

创建新的行编号 reader,将字符读入给定大小的缓冲区。

参数:
in - 提供基础流的 Reader 对象。
sz - 指定缓冲区大小的 int。

方法详细信息
setLineNumber

public void setLineNumber(int lineNumber)

设置当前行号。

参数:
lineNumber - 指定行号的 int。
另请参见:
getLineNumber()

getLineNumber

public int getLineNumber()

获得当前行号。

返回:
当前行号。
另请参见:
setLineNumber(int)

read

public int read()
throws IOException

读取单个字符。行结束符被压缩为单一新行('\n')字符。

覆盖:
类 BufferedReader 中的 read

返回:
读取的字符,如果已到达流的末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误

read

public int read(char[] cbuf,
int off,
int len)
throws IOException

将字符读入数组中的某一部分。

覆盖:
类 BufferedReader 中的 read

参数:
cbuf - 目标缓冲区
off - 开始存储字符处的偏移量
len - 要读取的最多字符数
返回:
读取的字节数量,如果已到达流的末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误

readLine

public String readLine()
throws IOException

读取文本行。可认为行是由换行符('\n')、回车符('\r')或回车后面紧跟换行符中的任何一个终止的。

覆盖:
类 BufferedReader 中的 readLine

返回:
包含行的内容且不包括任何行结束符的字符串,如果已到达流的末尾,则返回 null
抛出:
IOException - 如果发生 I/O 错误

skip

public long skip(long n)
throws IOException

跳过字符。

覆盖:
类 BufferedReader 中的 skip

参数:
n - 要跳过的字符数
返回:
实际跳过的字符数
抛出:
IOException - 如果发生 I/O 错误
IllegalArgumentException - 如果 n 为负

mark

public void mark(int readAheadLimit)
throws IOException

标记该流中的当前位置。对 reset() 的后续调用将尝试重新将流定位到此点,还将相应地重新设置行号。

覆盖:
类 BufferedReader 中的 mark

参数:
readAheadLimit - 在仍保留该标记的情况下,对可读取字符数量的限制。在读取这样多的字符后,尝试重置流可能会失败。
抛出:
IOException - 如果发生 I/O 错误

reset

public void reset()
throws IOException

将该流重新设置为最新的标记。

覆盖:
类 BufferedReader 中的 reset

抛出:
IOException - 如果该流未标记,或者该标记已失效


tubage408 2010-10-11
  • 打赏
  • 举报
回复
肯定是调用一次往下读一次,不知道你要实现什么功能,要是说清楚了,大家可以谈论下

62,615

社区成员

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

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