问题是我正在使用FileOutputStream类的write方法。我读到的文档说这会输出一个字节到文件。我在FileOutputStream类中找不到读取方法。但是在InputStreamReader中有一个read方法。问题是,我读到的文档说这个类read函数返回一个char,通过将字节转换为char。这会改变数据吗?我该如何把数据读回。
保存文件并且似乎可以工作的代码
boolean Save()
{
String FILENAME = "hello_file";
String string = "hello world!";
cDate mAppoitments[];
try {
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE );
int i;
mAppoitments=cDates.GetUpperDates();
for(i=0;i<cDates.getMaxAmount();i++)
{
i=mAppoitments[i].getMonth();
fos.write( i );
i=mAppoitments[i].getDay();
fos.write( i );
i=mAppoitments[i].getYear()-1900;
fos.write( i );
}
mAppoitments=cDates.GetLowerDates();
for(i=0;i<cDates.getMaxAmount();i++)
{
i=mAppoitments[i].getMonth();
fos.write( i );
i=mAppoitments[i].getDay();
fos.write( i );
i=mAppoitments[i].getYear()-1900;
fos.write( i );
}
fos.close();
}
// just catch all exceptions and return false
catch (Throwable t) {
return false;
}
return true;
}
将文件作为流打开:
// open the file for reading
InputStream instream = openFileInput(FILENAME);
// prepare the file for reading
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader buffreader = new BufferedReader(inputreader);
你可以逐行阅读
我的规则是读写时使用相同类型的流。因此,如果您使用openFileOutput
打开文件用于写入,则使用openFileInput
打开输入流以进行读取。由于write(int)
方法写入一个字节到文件中,您可以安全地使用read()
方法读取每个字节并将其赋值给变量。
但是,在你的循环中有一个大问题-你在循环中修改i,与索引无关:
i=mAppoitments[i].getMonth(); // now i might be assigned with 12
fos.write( i ); // you write 12
i=mAppoitments[i].getDay(); // now you look for mAppoitments[12].getDay()
....
使用不同的变量将这些值写入文件,不要在循环中修改i。例如:
for(i=0;i<cDates.getMaxAmount();i++)
{
int j;
j=mAppoitments[i].getMonth();
fos.write( j );
j=mAppoitments[i].getDay();
fos.write( j );
j=mAppoitments[i].getYear()-1900;
fos.write( j );
}
如果您觉得更舒服的话,可以将输出流包装在prininterwriter中,而将输入蒸汽阅读器包装在BufferedReader中。然后,您可以写入和读取字符串。
我想你使用i
作为迭代器和变量来存储你写的东西会有一些问题。