我已经实现了一种缓存,当app没有连接到互联网时,我会将数据写入文件,但是一旦它上网并将所有数据发送到服务器,我想从文件中删除所有内容。我在附加模式下打开该文件,似乎它没有从文件中删除内容。这是我的代码......
if (!(isNetworkAvailable())) {
try {
firstConnect = true;
outputStream = ctx.openFileOutput("cache.txt", Context.MODE_APPEND);
outputStream.write(new String().getBytes());
outputStream.write(data.getBytes());
outputStream.write("new_data".getBytes());
outputStream.flush();
outputStream.close();
Log.d(TAG, "OCIUFNF");
} catch (IOException exception) {
exception.printStackTrace();
}
每次收集数据时都会执行此代码,并且没有连接。
这是我的广播接收器,它会在连接更改时触发
class NetworkReceiver extends BroadcastReceiver {
public void onReceive(Context c, Intent intent) {
String action = intent.getAction();
connectionManager = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo net = connectionManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if(action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
sendFileData();
}
}
}
protected void sendFileData() {
StringBuilder total = new StringBuilder();
if(firstConnect) {
try {
FileInputStream inputStream = service.openFileInput("cache.txt");
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = r.readLine()) != null) {
total.append(line);
}
r.close();
inputStream.close();
} catch (IOException exception) {
exception.printStackTrace();
}
String[] parts = total.toString().split("new_data");
for (int i = 1; i < parts.length; i++) {
if(!(parts[i].toString().equals(parts[i-1]))) {
Intent cacheIntent = new Intent(ctx, serviceRequest.class);
cacheIntent.putExtra("Data", parts[i]);
ctx.startService(cacheIntent);
}
}
try {
FileOutputStream writer = new FileOutputStream("cache.txt");
writer.write(new String().getBytes());
writer.close();
Log.d(TAG, "ddjdbdjhd");
//outputStream.write(new String().getBytes());
}catch (IOException exception){
exception.printStackTrace();
}
firstConnect = false;
}
}
但它不起作用,任何想法我做错了或好的解决方案谢谢
答案 0 :(得分:1)
成功上传文件内容后,您可以删除整个文件。您可以按如下方式删除文件。
文件文件=新文件(selectedFilePath); boolean deleted = file.delete();
有关详细信息,请参阅此主题。
How to delete a file from SD card?
如果要删除文件内容而不删除实际文件,可以执行以下操作:
new RandomAccessFile(fileName).setLength(0);
OR
FileWriter (path, false);
false会告诉编写者截断文件而不是附加到文件中。
答案 1 :(得分:1)
您已使用FileOutputStream和当前上下文创建了该文件。因此,您可以使用相同的方法删除创建的文件。例如在你的情况下,它应该是这样的
String[] parts = total.toString().split("new_data");
for (int i = 1; i < parts.length; i++) {
if(!(parts[i].toString().equals(parts[i-1]))) {
Intent cacheIntent = new Intent(ctx, serviceRequest.class);
cacheIntent.putExtra("Data", parts[i]);
ctx.startService(cacheIntent);
}
}
c**tx.deleteFile("cache.txt");**
Log.d(TAG, "ddjdbdjhd");
//outputStream.write(new String().getBytes());
firstConnect = false;
这将删除,您可以在每次添加新数据时创建新文件,因此请处理该情况。