日期:2014-05-20  浏览次数:20654 次

FileReader与FileWriter读写"*.txt"的问题
我编写了一个程序,目的是用FileWriter将一些整型数写入一个txt(fun.txt)文件,整型数的范围从0~2000左右。当我把值超过128的整型数写入文件中的,由于txt无法显示(128已经超出ASCII的表示范围),就自动将这些数变成 "? ",当我从刚写入的txt中读出数据时,那些值超过128的全都变 "? "代替,读出的值都变成63( "? "的ASCII值)。
我也度过将大于128的数拆成低8位与高8位,用FileOutputStream分别写入txt中,如129就变成0000000100000001即把1   1写入,但是由于ASCII值为1的也不能显示,txt就干脆把它丢掉,没有写入到文件中。
现在的问题是txt把我的数据都改了,根本读不出来,有哪会兄弟有办法帮帮我啊,有没有一些文件是直接存储二进制的,那样就不用那么麻烦了!
谢谢!

------解决方案--------------------
你是要将整数写入txt还是将ascii码按顺序写入txt啊

如果是整数写入根本不存在ascii大于128的问题
for(int i = 0; i < 2000; i++)
writer.write(Integer.toString(i) + "\n ");

如果是ascii的话有部分字符显示不出来当然是正常的,因为它根本不是可见字符
------解决方案--------------------
这是将整数转换成二进制的代码,你参考以下
public class bit {
public static void main(String[] args) {
int di = Integer.parseInt(args[0]);
if (di < 0)
di = (~Math.abs(di)) + 1;
System.out.println( "Bits: " + Integer.toBinaryString(di));
}
}

------解决方案--------------------
import java.io.*;
public class Test
{
public static void main(String args[])
{
try
{
DataOutputStream dout = new DataOutputStream(new FileOutputStream( "fun.txt "));
for(int i= 0;i <= 2000;i++)
{
dout.writeInt(i);
dout.flush();
}
dout.close();
DataInputStream din = new DataInputStream(new FileInputStream( "fun.txt "));
for(int j = 0;j <=2000;j++)
{
if(j%10 ==0)
System.out.println( " " +din.readInt());
System.out.print( " " +din.readInt() + '\t ');
}
din.close();
}catch(Exception e){}
}
}

参考下