【发布时间】:2013-05-28 09:40:31
【问题描述】:
我需要在文件中存储三对浮点数(三点坐标),然后读取它们并进行比较。 我试过这样:
public Path loadPath()
{
Path path = new Path();
float x, y;
try
{
FileInputStream fis = new FileInputStream(filePath);
DataInputStream dis = new DataInputStream(fis);
for(int i = 0; i < 3; i++)
{
x = dis.readFloat();
y = dis.readFloat();
path.addCircle(x, y, rad, Path.Direction.CW);
}
dis.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return path;
}
public void savePath(Path cPath)
{
PathMeasure pm = new PathMeasure(cPath, false);
float coords[] = {0f, 0f};
try
{
FileOutputStream fos = new FileOutputStream(filePath);
DataOutputStream dos = new DataOutputStream(fos);
do
{
pm.getPosTan(pm.getLength() * 0.5f, coords, null);
dos.writeFloat(coords[0]);
dos.writeFloat(coords[1]);
}
while(pm.nextContour());
dos.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
但是DataOutputStream 以二进制格式写入,我在我的文件中得到了这个:
BК CF BК CF BК CF
因此,当DataInputStream 尝试阅读此内容时,会发现一些奇怪的东西。
我也尝试用FileWriter 写,文件内容看起来不错,但我无法正确读取那里的浮点数。
我需要用什么来写/读 floats 属性?
【问题讨论】:
-
SharedPreferences 不够好?
-
DataOutputStream 用于将数据序列化为流(在您的情况下为文件)。无论您传递给它什么,无论是 writeUTF()、writeShort() 还是 writeFloat(),它都会转换为字节流。您是否要求提供具有 1.23、1.01、234.9989 等内容的人类可读文件?
-
@shoe rat,不,SharedPreferences 不接近,因为我以后会用更多的积分
-
@britzl,没关系,以后可以通过任何方式阅读它们
-
您现在所做的应该可以工作。使用 DataOutputStream 写入并使用 DataInputStream 读取。当你说你得到“BK CF BK CF”等时,你是什么意思?您是在记事本中打开文件吗?
标签: android fileinputstream fileoutputstream datainputstream dataoutputstream