数据发送到服务器后删除文件内容 android
deleting file content once data sent to server android
我已经实现了一种缓存,当应用程序未连接到互联网时,我将数据写入文件,但是一旦它连接到互联网并将所有数据发送到服务器,我想从中删除所有内容文件。我以附加模式打开该文件,它似乎没有从文件中删除内容。这是我的代码....
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;
}
}
但它不起作用,知道我哪里做错了或好的解决方案谢谢
您可以在成功上传文件内容后删除整个文件。您可以按如下方式删除文件。
文件文件=新文件(selectedFilePath);
布尔值删除 = file.delete();
有关详细信息,请参阅此线程。
How to delete a file from SD card?
如果你想删除的是文件的内容,而不是实际的文件,你可以按如下操作。
new RandomAccessFile(fileName).setLength(0);
或
FileWriter (path, false);
false 将告诉作者截断文件而不是附加到文件。
您已使用具有当前上下文的 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;
这将删除并且您可以在每次添加新数据时创建新文件,因此请处理这种情况。
我已经实现了一种缓存,当应用程序未连接到互联网时,我将数据写入文件,但是一旦它连接到互联网并将所有数据发送到服务器,我想从中删除所有内容文件。我以附加模式打开该文件,它似乎没有从文件中删除内容。这是我的代码....
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;
}
}
但它不起作用,知道我哪里做错了或好的解决方案谢谢
您可以在成功上传文件内容后删除整个文件。您可以按如下方式删除文件。
文件文件=新文件(selectedFilePath); 布尔值删除 = file.delete();
有关详细信息,请参阅此线程。
How to delete a file from SD card?
如果你想删除的是文件的内容,而不是实际的文件,你可以按如下操作。
new RandomAccessFile(fileName).setLength(0);
或
FileWriter (path, false);
false 将告诉作者截断文件而不是附加到文件。
您已使用具有当前上下文的 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;
这将删除并且您可以在每次添加新数据时创建新文件,因此请处理这种情况。