import java.io.*;
class reader{
public static void main(String args[])throws IOException{
FileReader f=new FileReader("a.txt");
BufferedReader br=new BufferedReader(f);
System.out.println(br.readLine());
br.(0);
br.reset();
System.out.println(br.readLine());
}
}
a.txt文件中的内容是hello world.
得到的结果是:
hello world.
null
Press any key to continue...
我想第二次通过readLine方法把a.txt里的内容再读一遍.但是就是出不来,结果仍是null.
在程序中我使用了和reset方法.但是没起作用,请问这两个方法怎么用呢?如何才能重复读取文件里的内容呢?
class reader{
public static void main(String args[])throws IOException{
FileReader f=new FileReader("a.txt");
BufferedReader br=new BufferedReader(f);
System.out.println(br.readLine());
br.(0);
br.reset();
System.out.println(br.readLine());
}
}
a.txt文件中的内容是hello world.
得到的结果是:
hello world.
null
Press any key to continue...
我想第二次通过readLine方法把a.txt里的内容再读一遍.但是就是出不来,结果仍是null.
在程序中我使用了和reset方法.但是没起作用,请问这两个方法怎么用呢?如何才能重复读取文件里的内容呢?
要重复读取,可以尝试使用过滤器PushbackReader,它是个允许将字符推回到流的字符流reader。
br.(0);把这两行换一下,另外的参数不应该是0,
它的含义是:保持标记不变时,读取的字符数的限制。在读取这么多字符之后试图reset时,有可能会失败。
1、读取之前先一下,否则回不去了
2、方法的参数是指失效之前最多能读取的字符数量,读取超过这个数量之后,前一个就失效了,详细介绍自己看api。import java.io.*;
class reader{
public static void main(String args[])throws IOException{
FileReader f=new FileReader("reader.java");
BufferedReader br=new BufferedReader(f);
br.(1024); // 先,再read,1024表示从这里开始读取超过1024个字符,该就失效了
System.out.println(br.readLine());
br.reset();
System.out.println(br.readLine());
}
}
System.out.println(br.readLine());
br.reset();
hello world.并且没有换行。如果的值少于字符的个数就会失败。例如
import java.io.*;
class reader{
public static void main(String args[])throws IOException{
FileReader f=new FileReader("a.txt");
BufferedReader br=new BufferedReader(f);
br.(5); //这里写成了5就会在第二个readLine当中出错.而写大一点例如写20就没事.
System.out.println(br.readLine());
br.reset();
System.out.println(br.readLine());
}
}
关于方法的参数,java的api上面说 "限制值大于输入缓冲区的大小将导致分配一个新缓冲区,其大小不小于该限制值。因此应该小心使用较大的值。"参数写多大合适呢?
File f=new File("a.txt");
BufferedReader br=new BufferedReader(f);
br.(f.length());
File f=new File("a.txt");
BufferedReader br=new BufferedReader(f);
br.(f.length()+1);限制值大于输入缓冲区的大小将导致分配一个新缓冲区,其大小不小于该限制值。因此应该小心使用较大的值
这句话的意思是,当的参数大于读入缓冲区的长度时,为了能让流重置(reset)到的位置,jvm必须开辟额外的缓冲区以存储读过的流的数据,也就是说会占用更多的内存,因此需要用户谨慎使用这个参数。所以如果流的数据量非常大时,要重新读取流的数据,不如重新打开一次,更加节省系统资源。
Hello World是11个字符
br.(11);运行就出错
br.(12);运行正确
为什么?
方法的参数是指失效之前最多能读取的字符数量,读取超过这个数量之后,前一个就失效
放11的时候刚好是读取了11个字符啊。刚好读完。为什么会出错?br.(f.length()+1);FileReader好像没有length()方法
br.(11);运行就出错
br.(12);运行正确
为什么?你用getline方法读取,总要有字符表示读取结束,否则程序怎么知道Hello World(11个字符)到这里就是一行了,这个字符不论是换行'\n'还是文件结束EOF都要占用一个长度,因此实际已经读取超过了11个字符,所以会失效。br.(f.length()+1);FileReader好像没有length()方法看清楚,
File f=new File("a.txt");
BufferedReader br=new BufferedReader(f);
br.(f.length()+1);
f是File不是FileReader!