以下是代码:
----------------------------------------------
import java.io.*;
public class DataIOTTTT {
    public static void main(String[] args) throws IOException {
        DataOutputStream dosout = new DataOutputStream(new FileOutputStream("d:/sos/DataIOTTTT.txt"));        double[] prices =  {56.49,45.32,398.32,76.75,565.87};
        int[] units = {1,2,3,4,5};
        String[] msgs = {"this","is","my","name","OK?"};        for(int i=0; i<prices.length; i++) {
            dosout.writeDouble(prices[i]);
            dosout.writeChar('\t');
            dosout.writeInt(units[i]);
            dosout.writeChar('\t');
            dosout.writeChars(msgs[i]);
            dosout.writeChar('\n');
        }
        dosout.close();        //读入文件
        DataInputStream disin = new DataInputStream(new FileInputStream("d:/sos/DataIOTTTT.txt"));
        double price;
        int unit;
        StringBuffer msg;        try{
            while(true) {
                price = disin.readDouble();
                disin.readChar();
                unit = disin.readInt();
                disin.readInt();
                disin.readChar();                msg = new StringBuffer(20);
                char t;
                char linesep = System.getProperty("line.separator").charAt(0);
                while((t = disin.readChar()) != linesep) {
                    msg.append(t);
                }
                System.out.println(unit +"  "+price+"  "+msg);
            }
        }catch(EOFException e){
            System.out.println("Error!");
        }
        finally{
            System.out.println("close file!");
            disin.close();
        }
    }
}
----------------------------------------------
问什么在读入文件后显示的是 
Error!
close file!
而不是文件内容,请指教!

解决方案 »

  1.   

    catch(EOFException e){
     System.out.println(e.getMessage);
     System.out.println("Error!");
     }
    把异常信息打出来看,会比较有帮助
      

  2.   

    哇,楼主这个练习做的有意思.主要问题在你那块"行分割器"line.separator,你把这里注释掉应该就可以吧!还有就是你的文件名应该是两个\\吧,转义符号,还有就是DataOutputStream里好象没有读取字符串的方法啊.在就是写入和读取的顺序要一样(这个类我第一次用,不知道对不对),由于你写入了字符串,所以读取的时候恐怕会和写如的不一样;程序简单的我改了一下,有些地方也没搞明白,期待传说中的高手出现:
    import java.io.*;
    public class DataIOTTTT {
        public static void main(String[] args) throws IOException {
            DataOutputStream dosout = new DataOutputStream(new FileOutputStream("d:\\DataIOTTTT.txt"));        double[] prices =  {56.49,45.32,398.32,76.75,565.87};
            int[] units = {1,2,3,4,5};
            String[] msgs = {"thi","ise","mye","nam","OK?"};        for(int i=0; i<prices.length; i++) {
                dosout.writeDouble(prices[i]);
                dosout.writeChar('\t');
                dosout.writeInt(units[i]);
                dosout.writeChar('\t');
                dosout.writeChars(msgs[i]);
                dosout.writeChar('\n');
                
            }
            dosout.close();        //读入文件
            DataInputStream disin = new DataInputStream(new FileInputStream("d:\\DataIOTTTT.txt"));//hear repaired;
            double price;
            int unit;
            char charRead1,charRead2,charRead3;
                 //**********read char that that is "\t","\t","\n";**********
            StringBuffer msg;
            int intRead;
            String str = null;        try{
                while(true) {
                
                    price = disin.readDouble();
                    charRead1 = disin.readChar();
                    unit = disin.readInt();
                    charRead2 = disin.readChar();
                    //disin.readInt();
                   // str = disin.readLine();
                   
                   /*******************read string-----three chars***********/
                    disin.readChar();
                    disin.readChar();
                    disin.readChars();
                    charRead3 = disin.readChar();
          /***************  This is a Question?????****************
                    msg = new StringBuffer();
                    char t;
                    char linesep = System.getProperty("line.separator").charAt(0);
                    while((t = disin.readChar()) != linesep) {
                     System.out.println(t);
                        msg.append(t);
                    }*/
                   
                    System.out.println("result:" + unit + charRead1 
                                          + price + charRead2 + charRead3);
                }
            }catch(IOException e){
                System.out.println("Error: " + e.getMessage());
            }
            finally{
                System.out.println("close file!");
                disin.close();
            }
        }
    }
      

  3.   

    修改2处就ok了!
    第一处,刚刚进入while循环后,几条连续的读取语句:
    price = disin.readDouble();
    disin.readChar();
    unit = disin.readInt();
    disin.readInt();      //这一行去掉
    disin.readChar();第二处:
    char linesep = System.getProperty("line.separator").charAt(0);   //最后的charAt(0)改为charAt(1);
      

  4.   

    andycpp(幻瞳) 我按照你的修改了,可以运行。谢谢!
    zhang_angran(黑蓝红黄白)的做法报错。
    请各位多多指教:
    char linesep = System.getProperty("line.separator").charAt(0); //最后的charAt(0)改为charAt(1);
    为何是charAt(1),而不是charAt(0),在此先谢过了。
      

  5.   

    用调试器看一下就知道了,System.getProperty("line.separator")得到的字符串是“\r\n”,而程序中的分隔符应该是“\n”,所以是charAt(1)。