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

文件读取中遇到的一个小问题(在线等!~)
一个data文件中存储了下面一列字符串:
Java code

[color=#FF0000]4gg/iaIwlXrhfN2FAPjYXhRqOAj3GHesbw1bniOu7Xo=[/color]


经过下面一段简短德文代码读取后,读到的字符串却少了一个字符'4',代码:
Java code

String key="";
try
  {
    FileReader  fer = new  FileReader("key.data");
    BufferedReader  ber = new  BufferedReader(fer);
    while(ber.read()!= -1)
      {
         key = ber.readLine();
      }
    ber.close();
    System.out.println(key);
   }


输出的结果却是:gg/iaIwlXrhfN2FAPjYXhRqOAj3GHesbw1bniOu7Xo=
我又改成下面的这样,读取的内容又正确了,这是为何?
Java code

String  key="";
try
  {
    FileReader  fer = new  FileReader(keyFile);
    BufferedReader  ber = new  BufferedReader(fer);
    while((key=ber.readLine())==null){break;}
    ber.close();
   }


这个问题和我以前做过的一个从数据库表中的数据读取时遇到的问题差不多,那个是表中的第一条记录读取不到,最后定下指针就好了。
可这个问题又是为何那?
我看了看BufferedReader类read()方法的API,原文如下:
public int read()throws IOException读取单个字符。
覆盖:
类 Reader 中的 read
返回:
作为一个整数(其范围从 0 到 65535 (0x00-0xffff))读入的字符,如果已到达流末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误
等待!~

------解决方案--------------------
ber.read()!= -1

这里已经读了一个字了
------解决方案--------------------
Java code
String key = "";
        try {
            FileReader fer = new FileReader("1.txt");
            BufferedReader ber = new BufferedReader(fer);
        
            do{
                key+=ber.readLine();
            }while(ber.read()!=-1);
            ber.close();
            System.out.println(key);
        } catch (Exception e) {
            e.printStackTrace();
        }

------解决方案--------------------
Java code
String key="";
try
{
FileReader fer = new FileReader("key.data");
BufferedReader ber = new BufferedReader(fer);
while(ber.read()!= -1)
{
key += ber.readLine();//这是一个自相加的
}
ber.close();
System.out.println(key);
}