Синхронизация и / или взаимное исключение для класса хранения в сервисах - PullRequest
0 голосов
/ 22 апреля 2020

Мне нужно одновременно читать и записывать общий файл с различными jobIntentServices в моем приложении. Одна служба (производитель) записывает данные в файл, а другая служба (потребитель) проверяет, есть ли данные в общем файле. Если данные есть, они отправляют их и, если передача данных прошла успешно, удаляют файл. Я создал следующий класс контроллера хранения:

public class Storage {
private static final String TAG = "Storage";

public void writeToFile(String filePath, String data, Context context) {
    try {
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(context.openFileOutput(filePath, Context.MODE_PRIVATE));
        outputStreamWriter.write(data);
        outputStreamWriter.close();
    }
    catch (IOException e) {
        Log.e(TAG, "File write failed: " + e.toString());
    }
}

public String readFromFile(String filePath, Context context) {

    String ret = "";

    try {
        InputStream inputStream = context.openFileInput(filePath);

        if ( inputStream != null ) {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String receiveString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ( (receiveString = bufferedReader.readLine()) != null ) {
                stringBuilder.append("\n").append(receiveString);
            }

            inputStream.close();
            ret = stringBuilder.toString();
        }
    }
    catch (FileNotFoundException e) {
        Log.e(TAG, "File not found: " + e.toString());
    } catch (IOException e) {
        Log.e(TAG, "Can not read file: " + e.toString());
    }

    return ret;
}

public boolean fileExists(String filename, Context context) {
    File file = context.getFileStreamPath(filename);
    if(file == null || !file.exists()) {
        return false;
    }
    return true;
}

public boolean deleteFile(String filename, Context context){
    File file = context.getFileStreamPath(filename);
    return file.delete();
}

Этот класс не является одноэлементным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...