一旦数据发送到服务器android就删除文件内容

时间:2015-01-11 16:14:51

标签: android file fileoutputstream

我已经实现了一种缓存,当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;
    }

}

但它不起作用,任何想法我做错了或好的解决方案谢谢

2 个答案:

答案 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;

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