黑马程序员技术交流社区
标题:
IO小问题
[打印本页]
作者:
黄杨
时间:
2013-1-30 02:56
标题:
IO小问题
本帖最后由 张向辉 于 2013-1-30 11:32 编辑
public static void main(String[] args) throws IOException {
// 创建引用
FileReader fr=null;
try {
//初始化流对象
fr=new FileReader("buf.txt");
//读数据
int num1=fr.read();
char str1=(char) num1;
int num2=fr.read();
char str2=(char) num2;
int num3=fr.read();
char str3=(char) num3;
//打印
System.out.println(str1+str2+str3);
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.toString());
}finally{
try {
//关闭流
if(fr!=null)
fr.close();
} catch (Exception e2) {
// TODO: handle exception
System.out.println(e2.toString());
}
}
记事本里面的数据是haha,但是打印出来的是305,找了好久没找出问题,求教!
作者:
黑马张英涛
时间:
2013-1-30 08:30
本帖最后由 黑马张英涛 于 2013-1-30 09:55 编辑
System.out.println(str1+str2+str3);
问题出在这句代码上。
字符之间没有 “+” 操作符,所以jvm会将char提升为int后再运算,
所以这里实际是3个字符的asc码在相加,最后打印的是3个char的
asc码的和。
你可以用Character.toString(str1)方法把他们都变成字符串再相加就得出正确结果了。
作者:
唐长智
时间:
2013-1-30 10:31
你的目的是在控制台输出文本框里前3的字符,也可以创建一个输出流来完成。
import java.io.*;
class Test{
public static void main(String[] args) throws IOException {
// 创建引用
FileReader fr=null;
OutputStreamWriter opsw = null;
try {
//初始化流对象
opsw = new OutputStreamWriter(System.out);
fr=new FileReader("buf.txt");
//读数据
int num1=fr.read();
opsw.write(num1);
char str1=(char) num1;
int num2=fr.read();
opsw.write(num2);
char str2=(char) num2;
int num3=fr.read();
opsw.write(num3);
char str3=(char) num3;
//打印
//System.out.println(str1+str2+str3);
System.out.println(Character.toString(str1) +Character.toString(str2) +Character.toString(str3) );
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.toString());
}finally{
try {
opsw.close();
//关闭流
if(fr!=null)
fr.close();
} catch (Exception e2) {
// TODO: handle exception
System.out.println(e2.toString());
}
}
}
}
复制代码
这样也能达到目的。
作者:
梁永奇
时间:
2013-1-30 10:32
System.out.println(str1+str2+str3);
你的这句话出错了,所以被当做int来运算了,
你把这句话改一下,就行
System.out.println(str1+""+str2+""+str3);
作者:
逍林游
时间:
2013-1-30 11:00
你这部分:/* //读数据
int num1=fr.read();
char str1=(char) num1;
int num2=fr.read();
char str2=(char) num2;
int num3=fr.read();
char str3=(char) num3;
*/
不是在读数据!
你看看jdk的帮助文档,FileReader类中的read()方法返回的是:是否达流的末尾(-1表示读取结束),如果你真想第一个字符字符的读取的话可以这样改:
char str
while(fr.read(str)!=-1) System.out.print(str);
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2