import java.io.*;
public class FileInputStreamDemo{
public static void main(String args[]){
try{
FileInputStreamDemo fd=new FileInputStreamDemo();
String fileName=fd.getClass().getResource("FileInputStreamDemo.java").getFile();
FileInputStream in=new FileInputStream(fileName);
//BufferedReader br=new BufferedReader(new InputStreamReader(in));
while(in.available()>0){
System.out.print((char)in.read());
}
//System.out.println(br.toString());
in.close();
}catch(Exception e){
e.toString();
}
}
}
这个程序的结果就是把文件内容输出在显示终端上,但是我想用这两句注释的语句来代替while循环语句,但结果却不一样。结果是:java.io.BufferedReader@765291.为什么?有高人能帮我解答下吗?
[此贴子已经被作者于2006-8-31 23:57:07编辑过]
----------------解决方案--------------------------------------------------------
是不是要写成br.close();
----------------解决方案--------------------------------------------------------
首先你得弄清楚直接输出对象名称代表的含义。我把程序改了一下,输出内容相同。
import java.io.*;
public class FileInputStreamDemo{
public static void main(String args[]){
try
{
FileInputStreamDemo fd=new FileInputStreamDemo();
String fileName=fd.getClass().getResource("FileInputStreamDemo.java").getFile();
FileInputStream in=new FileInputStream(fileName);
BufferedReader br=new BufferedReader(new InputStreamReader(in));
do
{
System.out.println(br.readLine());
}
while(br.read()!=-1);
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
[此贴子已经被作者于2006-9-1 10:31:13编辑过]
----------------解决方案--------------------------------------------------------
若使用RandomAccessFile,程序将更简单。
import java.io.*;
public class FileInputStreamDemo{
public static void main(String args[]){
try{
FileInputStreamDemo fd=new FileInputStreamDemo();
String fileName=fd.getClass().getResource("FileInputStreamDemo.java").getFile();
RandomAccessFile raf=new RandomAccessFile(fileName,"r");
do
{
System.out.println(raf.readLine());
}
while(raf.read()!=-1);
}catch(IOException e){
System.out.println(e.toString());
}
}
}
[此贴子已经被作者于2006-9-1 10:48:58编辑过]
----------------解决方案--------------------------------------------------------
谢谢楼上的~我懂了~
----------------解决方案--------------------------------------------------------
BufferedReader中的toString方法是继承于Object的,并没有重写
以下摘自API
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
所有注释的那两句不行
----------------解决方案--------------------------------------------------------
3楼4楼的程序是不是应该把打开的流关闭啊!!
----------------解决方案--------------------------------------------------------