JAVA读C++存储的文件?标记,学习

解决方案 »

  1.   

    如1楼的朋友所说使用DataInputStream.这样使用
    FileOutputStream fos=new  FileOutputStream(”filename"));
    DataInputStream dis= new DataInputStream(fos);
    然后用
    dis.readInt();
    dis.readFloat();
    dis.readChar()
    这样就行了
      

  2.   

    import java.io.*;
    public class Untitled3 {
      public Untitled3() {
      }
      public static void main(String[] args) throws IOException{
        DataInputStream in=new DataInputStream(new FileInputStream("in.txt"));
        while(true){
          try{
            int i=in.readInt();
            float f=in.readFloat();
            char c=in.readChar();
            }
          catch (EOFException exc){break;}
        
        }
      }
    }
      

  3.   

    char 是16位的2个字节。如果楼主说的是按4个字节存的,用readChar()读不出来。
    可以按readInt读后强行转换成char
      

  4.   

    //以下为作图文件的描述 
           struct MemoryDrawHead     //内存中头部结构
             {
                      int ScreenWidth,ScreenHeight; //屏幕宽度,高度
                      int Drawsumtotal;             //记录总数
                      TColor DrawBkColor;           //背景颜色
                      char mpyBkFileName[84];       //背景图片文件名
                      float ver;                    //版本号
                      char  verEx[24];              //版本号扩展
                      char filename[128];           //在目录中的文件名
                      int start,end;                //在内存中的开始位置的记录号
                      int IsPicture;                //是否有图形
              };
     struct DrawStruct         //2001.6-  文件体描述
              {
                  TColor BkColor;
                  TColor Color;
                  TCursor Drawcur;
                  float      mpybtstart,mpybtend,mpybtmiddle;
                  __int16      PenWidth;
                  __int16      FontSize;
                  TColor   FontColor;
                  char     FontName[16];
                  char     caption[32];
                  __int16   left,top,width,height;
                  __int16    mpyclas;
                  __int16    mykind;
                  __int16    canghao;
                  __int16    xuhao;
                  float  data;
                  char    filename[28];
                  __int16  DTranparent,beiyong;              char   DHint[12];
                  char   ChangMing[28],DianMing[28];
                  TColor Color1,Color2;
                  __int16 ClassType,yk1,yk2,yk3;
                  float data1;
                  __int16 SwitchClose;
                  __int16 LintInt1,LintInt2,LintInt3,LintInt4;
                  __int16 OnLine;
                  __int16 by,by1,by2;
                  char byStr[20];
                  char Title[20];
                  char FIsTitel[5];
                  char CheckMC1[10],CheckMC2[10],CheckMC3[10],CheckMC4[10];
                  char CheckMS1[31],CheckMS2[31],CheckMS3[31],CheckMS4[31];
                  char CheckA1[5],CheckA2[5],CheckA3[5],CheckA4[5],CheckA5[5],CheckA6[5];
                  char CheckB1[5],CheckB2[5],CheckB3[5],CheckB4[5],CheckB5[5],CheckB6[5];
                  BYTE by3;
                  __int16 by4;
              };
    这就是写文件的结构
      

  5.   

    class DrawStruct {}FileInputStream fis = new FileInputStream("xxx.data");
    ObjectInputStream ois = new ObjectInputStream(fis);DrawStruct today = (DrawStruct) ois.readObject();
    ois.close();
      

  6.   

    这种方法我用过了,可是提示invalid stream header,要不我把那个文件发给您,您读读看
      

  7.   

    不能单纯的用读进一个int,char,float地方法,这些数据在java和c++中可能宽度不一致,搂住你要最好当成byte读进一个数组,然后自己分解。
      

  8.   

    但是float怎么分解啊,请指点
      

  9.   

    楼主,你的这个问题并不难,只是有点麻烦。人家一般没时间给你搞这些繁琐的事情。
    我告诉你步骤:
    第1步必须将TColor和TCursor这样的东西怎样存放的搞清楚。然后考虑java里怎么实现。
    你可以单独存一个这样的东西用UltraEdit打开看看多少字节。然后分析怎样取数据。
    第2步将其他基本类型与java的类型对应起来,做到心中有数。比如__int16肯定对应java的 short了
    第3步,分段测试。一步一步调试。
      

  10.   

    TColor是4个字节的,我用read(byte buffer[])读出来都可以分解出来,但是float分解不了,TCursor也是4个字节整形数值。
    我们主管说很容易就读出来了,因为原来有人做过这个项目,而我是个新手,还请高手赐教
      

  11.   

    如果这样处理的话,那我还不如写个dll文件用jni调用呢,可是我们主管规定我用java读啊,谢谢楼上兄弟啊
      

  12.   

    今天有点空,把你的数据文件发给我,并注明上面的struct里每种属性的字节长度。
    以及数据发送前的具体内容以便对照。
    我给你捣鼓一下。
    [email protected]
      

  13.   

    usabcd(9号公路上的3名共军),你好,谢谢你,float数的转化问题已解决,现在的问题是读出的中文是乱码,还请指教