我正在使用以下代码附加GPS获得的新位置数据,每次位置更改。
if (isExternalStorageWritable()) {
if (myFile.exists()) {
try {
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
myOutWriter.append(location.getLatitude()+", "+location.getLongitude()+", "+nodeCounter+"\n");
myOutWriter.close();
fOut.close();
nodeCounter++;
} catch (Exception e) {
}
} else {
try {
myFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}else
{
Log.i("logGPSData","Error");
}
问题是附加不起作用,因为每次插入新行时,前一行都会被覆盖,所以我的文件总是包含一行,即使我收集了很多gps数据。
答案 0 :(得分:4)
第二个参数表示文本是否应附加到现有文件,更改代码中的以下行:
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
为:
FileOutputStream fOut = new FileOutputStream(myFile,true);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut,true);
public FileOutputStream(String name,boolean append)
throws FileNotFoundException
创建文件输出流以写入具有指定名称的文件。如果第二个参数为true,则字节将写入文件的末尾而不是开头。创建一个新的FileDescriptor对象来表示此文件连接。 首先,如果有安全管理器,则调用其checkWrite方法,并将name作为其参数。
如果文件存在但是是目录而不是常规文件,不存在但无法创建,或者由于任何其他原因无法打开,则抛出FileNotFoundException。
1)name - 系统相关的文件名
2)append - 如果为true,那么字节将被写入文件的末尾而不是开头
1)FileNotFoundException - 如果文件存在但是是目录而不是常规文件,则不存在但无法创建,或者由于任何其他原因无法打开。
2)SecurityException - 如果存在安全管理器且其checkWrite方法拒绝对该文件的写访问。
JDK1.1