数据发送到服务器后删除文件内容 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;

这将删除并且您可以在每次添加新数据时创建新文件,因此请处理这种情况。