跟踪了当然,初始为sfile {value=""},然后+ sfile {value="0 => AAAA
"}再然后+ sfile {value="0 => AAAA
11111111"}再然后输出的结果为:11111111A郁闷,还请高手指导一下啊!!!
"}再然后+ sfile {value="0 => AAAA
11111111"}再然后输出的结果为:11111111A郁闷,还请高手指导一下啊!!!
解决方案 »
- 不改变原数组排序
- Win7下无法安装JDK
- 求助~~!java:简单超市管理系统出错:java.sql.SQLException: Column not found
- 请教 一道题啊为作两节课没做出来
- 很急的问题
- 谁能帮我想想毕业设计的题目!
- 关于JNI(java native interface)的问题。。在线等。。高手请进
- JAVA反射,field.set(obj1,obj2)obj2类型的问题
- 关于实时监控
- 怎样监听JTableHeader的事件,比如希望判断点击某一列表头.
- 父子线程同用一个socket,父线程关闭了socket,子线程为什么还能保持socket连接?
- 如何在java中实现像c++的cin呀?
byte[] fileByte = null;
long fileLen = 0;
fileLen = raf.length();
fileByte = new byte[(int)fileLen];
raf.read(fileByte);
//while(raf.getFilePointer ()<raf.length ())
//{
// sfile=sfile.append(raf.readLine ());
//}
String ssfile = new String(fileByte);
System.out .println (ssfile);你要注意所有的stream类的readLine方法都是有损读法,你用这种方法来实现copy的文件都已经损坏了的(至少换行符),一定要用read方法来一个字节一个字节读
while(raf.getFilePointer ()<raf.length ())
{
sfile=sfile.append(raf.readLine ());
}
System.out .println (sfile.toString ());改为:while(raf.getFilePointer ()<raf.length ())
{
sfile=sfile.append(raf.readLine ());
System.out .println (sfile.toString ());
}
System.out .println (sfile.toString ());试下,看输出结果。另外问下你JDK的版本,我用jdk1。4测试StringBuffer很正常,
当然,我没有写你这样的程序,只是测试StringBuffer的append方法。
所以
0 => AAAA
11111111
的结果是由于回车了,所以后面的"111111"是从一行开头输出,但是换行符号丢了,
所以还是输出在0 => AAAA所在行。其实很显然的,只是一时没想到罢了。你的跟踪有问题啊,真是,刚是又看你说
的跟踪状况才想到的,因为最后sfile的值是正确的,只是在输出时效果不理想,所以
可以立刻证明是因为这个原因。
我知道你怎么回事了,
因为字符串丢失了换行符,只有回车符了。你的跟踪有问题,我刚从新看的时候才发现的,其实跟踪立刻就知道,sfile是在输出前还是看起来正确的,只是输出效果不对,所以可以知道原因。
(1)
while(raf.getFilePointer ()<raf.length ())
{
String ssf = raf.readLine ();
byte[] bb = ssf.getBytes();
sfile=sfile.append(ssf);
}
(2)
byte[] fileByte = null;
long fileLen = 0;
fileLen = raf.length();
fileByte = new byte[(int)fileLen];
raf.read(fileByte);你可以对比一下byte[] bb和byte[] fileByte有什么不同。
用readLine的方法读出来就少了byte 10,13(换行,回车)
你再用循环把byte豆大出来,说明跟踪也是有问题的