советы по созданию класса для управления файлами в Android - PullRequest
1 голос
/ 06 марта 2012

Я разрабатываю приложение для Android, которое должно создавать / изменять некоторые файлы во время его выполнения. Я знаю, что в Android для управления файлами мне нужно использовать подклассы методов Context. Но в моем приложении класс, который имеет доступ к файлам, не является классом Activity, классом, который я использую, когда мне нужны графические функции (взаимодействие с пользователем, отображение изображений и т. Д.).

По моему мнению, класс, управляющий моими файлами, используется для выполнения некоторых криптографических операций, графические классы - это другое (в структуре mvc класс, управляющий моими файлами, находится на части модели, а не на виде). Я не могу найти никаких решений, которые используют классы контекста таким образом, без каких-либо графических целей. Какими характеристиками должен обладать мой класс для реализации операций с файлами ввода-вывода (объявление в XML и эффективный тип)?

Спасибо

Ответы [ 3 ]

0 голосов
/ 07 марта 2012

Вы всегда можете получить абстрактное представление файла (java.io.File) в классе контекста Android, а затем передать этот объект java.io.File в свой класс FileUtils, например, внутри класса Activity:

public class MyActivity extends Activity {

  public void onCreate(Bundle savedInstanceState) {
    ... ...
    File file = new File(getExternalFilesDir(null), "sample.txt");
    FileUtils.encrypt(file);
    ... ...
  }

}

Таким образом, вы можете создать свои FileUtils как класс POJO, который отделен от контекста Android.

0 голосов
/ 03 июня 2014

Я не знаю, помогает ли это, но это пример того, как я использую вывод файла во внешнее хранилище в своем собственном классе журналирования без какой-либо ссылки на класс активности:

String logFilePath = "path/on/sd/card";
File logFileDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), logFilePath);
if (!logFileDir.exists()) {
  if(!logFileDir.mkdirs()) {
    Log.w(LOG_TAG, "Could not create directory: " + logFileDir.getAbsolutePath());
    return;
  }
}

...

String logFilePathName = logFilePath + "/" + dateTime + logFileNameSuffix;
File logFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), logFilePathName);
try {
  logFilePrintWriter = new PrintWriter(new FileWriter(logFile));
  logFilePrintWriter.println(dateTime + " - " + firstMsg);
  logFilePrintWriter.flush();
} catch (IOException e) {
  Log.w(LOG_TAG, "Could not create log file: " + logFile.getAbsolutePath());
}
0 голосов
/ 06 марта 2012

Вы можете передать контекстную ссылку из своей деятельности в модель данных с помощью getApplicationContext ().

yourFileUtilObject.objectMethod(getApplicationContext());

В вашем классе fileUtil ваши методы, для которых требуется контекст, будут иметь параметр типа Context.

public void objectMethod(Context context){
    // your io code with refernce to context when needed
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...