如题,想计算一个BufferedReader的长度,然后将Reader的数据存到char[]中,代码如下:
public static void main(String[] args) throws Exception
{
BufferedReader x = new BufferedReader(new FileReader(new File("c:\\work\\1.txt")));
int len = 0;
while( x.read() != -1 )
{
len++;
}
char[] c = new char[len];
x.read(c);
System.out.println(new String(c));
}后来测了一下发现可能是while循环中已经读到了末尾一位了,下面再调用read方法就返回-1了,
但是如何解决不明,望指教。
public static void main(String[] args) throws Exception
{
BufferedReader x = new BufferedReader(new FileReader(new File("c:\\work\\1.txt")));
int len = 0;
while( x.read() != -1 )
{
len++;
}
char[] c = new char[len];
x.read(c);
System.out.println(new String(c));
}后来测了一下发现可能是while循环中已经读到了末尾一位了,下面再调用read方法就返回-1了,
但是如何解决不明,望指教。
StringBuilder b = new StringBuilder();
String line;
while ((line = x.readLine()) != null) {
b.append(line);
b.append("\n");
}
String page = b.toString();已经读过了,不能再次读取了!
另外,readline方法好像是BufferedReader的方法,Reader里面没有这个方法的。我的问题其实是这样的:
void A(){
BufferedReader x = new BufferedReader(new FileReader(new File("c:\\work\\1.txt")));
B(x);
}void B(Reader x){
//此处计算x的长度并将内容存到char[]中;
}以上,B方法中如何实现?我看了一下Reader有个reset()方法,但是需要执行操作,但是具体如何
处理不明,望指教。
1楼说的对,你读过一次,光标已经跑到最后了!
void B(Reader x){
((BufferedReader)x).readline();//ok了!
}
这时强制类型转换就有问题了吧。
本来想先读一遍把Reader的长度算出来,然后使用的,但是不行。
BufferedReader没有关闭的后果,教训十分深刻!
read.(0); // xxxxxxx
while( x.read() != -1 ) {
len++;
}
x.reset(); // xxxxxxx
char[] c = new char[len];
x.read(c);
以上代码执行后报如下的错误:
Exception in thread "main" java.io.IOException: Mark invalid
at java.io.BufferedReader.reset(Unknown Source)
at test.main(test.java:26)
不知何故?
BufferedReader 好象问题不是很严重。 就浪费点资源。
如果是 BufferedWriter的话问题就大了。 因为你的东西根本不会
写到你的文件你去。就好象 你在记事本里写了东西没有保存一样。
StringBuilder b = new StringBuilder();
String line;
while ((line = x.readLine()) != null) {
b.append(line);
b.append("\n");
}
String page = b.toString();
然后reset()报错为何啊?
然后reset()报错为何啊?
然后reset()报错为何啊?
好象在得到文件的长度?是的话,直接用File.length() 不就可以了么/???
void A(){
BufferedReader x = new BufferedReader(new FileReader(new File("c:\\work\\1.txt")));
char[] = B(x);
} char[] B(Reader x){
//此处计算x的长度并将内容存到char[]中返回;
} 以上,B方法中如何实现? 主要是char[]数组的长度无法确定。问题就是B()方法传入的Reader对象的长度不知道,我就无法new一个char[]出来,存放Reader的内容。
本来想先读一遍把Reader的长度算出来,然后使用的,但是不行。
public class test { public static void main(String[] args) {
test t = new test();
t.A();
} public void A() {
try
{
char[] arr = B(new FileReader(new File("c:/a.txt")));
System.out.println("length:"+arr.length);
for (char c : arr)
{
System.out.print(c);
}
}
catch (Exception e)
{
e.printStackTrace();
} } public char[] B(Reader reader) {
try
{
CharArrayWriter output = new CharArrayWriter();
BufferedReader r = new BufferedReader(reader);
String str = r.readLine();
while (str != null)
{
str += "\r\n";
output.write(str,0,str.length());
str = r.readLine();
} r.close();
return output.toCharArray(); }
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
}
上面的流忘了关了。
import java.io.*;
public class test { public static void main(String[] args) {
test t = new test();
t.A();
} public void A() {
try
{
char[] arr = B(new FileReader(new File("c:/a.txt")));
System.out.println("length:"+arr.length);
for (char c : arr)
{
System.out.print(c);
}
}
catch (Exception e)
{
e.printStackTrace();
} } public char[] B(Reader reader) {
try
{
CharArrayWriter output = new CharArrayWriter();
BufferedReader r = new BufferedReader(reader);
String str = r.readLine();
while (str != null)
{
str += "\r\n";
output.write(str,0,str.length());
str = r.readLine();
} r.close();
char[] arr = output.toCharArray();
output.close();
return arr; }
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
}
try
{
CharArrayWriter output = new CharArrayWriter();
BufferedReader r = new BufferedReader(reader);
以上reader若不为BufferedReader时new是否会出错呢?
你只要传进来一个Reader 就可以。
然后包装成BufferedReader....
然后再转成char[]。
以上仅供你参考