чтение / запись в файл в J2ME без постоянного приставания к пользователю - PullRequest
4 голосов
/ 28 января 2012

Я пишу простое приложение для телефона J2ME и хочу сохранить статус приложения при выходе из него.
Поиск в Google привел меня к классу FileConnection:

FileConnection filecon = (FileConnection) Connector.open("file:///E:/mynewfile.txt");
filecon.create();
// write data to file etc etc

и тому подобное. Все это работает, , но имеет следующие два недостатка. На моем телефоне S40 каждый раз, когда я запускаю приложение, меня просят "позволить приложению (бла) записывать в файл?" или что-то подобное. У меня есть другие приложения, которые могут сохранять свои состояния (например, игры, которые сохраняют таблицу рекордов), и которые не спрашивают меня каждый раз о том, могут ли они записать в файл. Какой трюк мне не хватает?

И пока я здесь - имя файла "///E:/mynewfile.txt" тоже не идеально, потому что оно работает для моего телефона, но не работает для телефона моего сына (и почему это?), что означает, что мне нужно редактировать и перекомпилировать приложение каждый раз, когда я хочу, чтобы программа работала на новом телефоне (я могу предусмотреть какой-то тип клуджа, когда программа устанавливает, на каком телефоне запущено приложение - там будет просто некоторые из нас используют его - и затем устанавливают строку, указывающую на действительный файл в допустимом каталоге, соответственно, но это, безусловно, не так, как это должно быть сделано ...). Предположительно, я не должен писать в E: / в любом случае, но есть ли какое-то каноническое «место, куда приложение X помещает все свои файлы данных»? И является ли это каким-то образом независимым от устройства, по крайней мере, до некоторой степени? Опять же, по-видимому, я упускаю уловку - и две проблемы, о которых я спрашиваю, возможно, связаны.

Что мне делать?

Ответы [ 2 ]

6 голосов
/ 25 февраля 2012

1-Вы можете использовать «RMS» вместо «fileconnection», чтобы сохранить состояние вашего приложения, и оно не имеет приставок.
2-Приложение открывает соединение, используя Connector.open (), как вы это делаете.Входная строка должна содержать полное имя абсолютного пути в форме:

file://<host>/<root>/<directory>/<directory>/.../<name>

Элемент хоста может быть пустым - и часто будет, когда строка ссылается на файл на локальном хосте.Корневой каталог соответствует логической точке монтирования для конкретного устройства хранения. Корневые имена зависят от устройства .В следующей таблице приведены некоторые примеры корневых значений и способы их открытия:

CFCard/   
FileConnection fc = (FileConnection) Connector.open("file:///CFCard/");   
SDCard/   
FileConnection fc = (FileConnection) Connector.open("file:///SDCard/");   
MemoryStick/   
FileConnection fc = (FileConnection) Connector.open("file:///MemoryStick/");   
C:/   
FileConnection fc = (FileConnection) Connector.open("file:///C:/");   
/   
FileConnection fc = (FileConnection) Connector.open("file:////");   

Некоторый специальный корень должен быть получен методом System.getProperty ():

fileconn.dir.photos: Image capture through your Mobile camera.  
fileconn.dir.videos: Vedio capture through your Mobile camera.  
fileconn.dir.tones: Ring tones default directory.   
fileconn.dir.memorycard: Memory Card , SD Card , Flash Drive root directory   
fileconn.dir.private: Working directory of midlet   

Например:

String galleryDir = System.getProperty("fileconn.dir.photos");   
FileConnection filecon = (FileConnection) Connector.open(galleryDir);   
2 голосов
/ 15 июля 2012

Мой собственный ответ на мой вопрос: я могу использовать методы класса RecordStore для чтения и записи в файл, который помещен в ресурсы программы.

...