高手请进,关于读文件的问题? JAVA读C++存储的文件?标记,学习 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如1楼的朋友所说使用DataInputStream.这样使用FileOutputStream fos=new FileOutputStream(”filename"));DataInputStream dis= new DataInputStream(fos);然后用dis.readInt();dis.readFloat();dis.readChar()这样就行了 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;} } }} char 是16位的2个字节。如果楼主说的是按4个字节存的,用readChar()读不出来。可以按readInt读后强行转换成char //以下为作图文件的描述 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; };这就是写文件的结构 class DrawStruct {}FileInputStream fis = new FileInputStream("xxx.data");ObjectInputStream ois = new ObjectInputStream(fis);DrawStruct today = (DrawStruct) ois.readObject();ois.close(); 这种方法我用过了,可是提示invalid stream header,要不我把那个文件发给您,您读读看 不能单纯的用读进一个int,char,float地方法,这些数据在java和c++中可能宽度不一致,搂住你要最好当成byte读进一个数组,然后自己分解。 但是float怎么分解啊,请指点 楼主,你的这个问题并不难,只是有点麻烦。人家一般没时间给你搞这些繁琐的事情。我告诉你步骤:第1步必须将TColor和TCursor这样的东西怎样存放的搞清楚。然后考虑java里怎么实现。你可以单独存一个这样的东西用UltraEdit打开看看多少字节。然后分析怎样取数据。第2步将其他基本类型与java的类型对应起来,做到心中有数。比如__int16肯定对应java的 short了第3步,分段测试。一步一步调试。 TColor是4个字节的,我用read(byte buffer[])读出来都可以分解出来,但是float分解不了,TCursor也是4个字节整形数值。我们主管说很容易就读出来了,因为原来有人做过这个项目,而我是个新手,还请高手赐教 如果这样处理的话,那我还不如写个dll文件用jni调用呢,可是我们主管规定我用java读啊,谢谢楼上兄弟啊 今天有点空,把你的数据文件发给我,并注明上面的struct里每种属性的字节长度。以及数据发送前的具体内容以便对照。我给你捣鼓一下。[email protected] usabcd(9号公路上的3名共军),你好,谢谢你,float数的转化问题已解决,现在的问题是读出的中文是乱码,还请指教 Java如何以最快的速度读写文件? RMI 中客户端程序能和服务端程序保持 长链接吗? 高分讨论~如何实现Table的递归查询~ 请问高手,java如何下载铃声到手机,有没有例子代码,谢谢啦 为什么float 能表示long的数? 把整型233转换成一个字符______在线等 有关system.in.read()的问题 提取英文字母的问题(哪位可以指点我一下如何提取字母,但是不受多少空格的影响) 原来可以这样! 一些小问题 [关于][JSP][与][APPLET][传值问题][adolfdi(牛肉火锅)有空过来看看.同一问题] [请教][想得到整个数据库里的信息..]
FileOutputStream fos=new FileOutputStream(”filename"));
DataInputStream dis= new DataInputStream(fos);
然后用
dis.readInt();
dis.readFloat();
dis.readChar()
这样就行了
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;}
}
}
}
可以按readInt读后强行转换成char
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;
};
这就是写文件的结构
ObjectInputStream ois = new ObjectInputStream(fis);DrawStruct today = (DrawStruct) ois.readObject();
ois.close();
我告诉你步骤:
第1步必须将TColor和TCursor这样的东西怎样存放的搞清楚。然后考虑java里怎么实现。
你可以单独存一个这样的东西用UltraEdit打开看看多少字节。然后分析怎样取数据。
第2步将其他基本类型与java的类型对应起来,做到心中有数。比如__int16肯定对应java的 short了
第3步,分段测试。一步一步调试。
我们主管说很容易就读出来了,因为原来有人做过这个项目,而我是个新手,还请高手赐教
以及数据发送前的具体内容以便对照。
我给你捣鼓一下。
[email protected]