JSR 75

Разбиране на ограниченията на FileConnection API

Тъй като достъпът до файловата система е потенциално опасна операция, при всеки достъп до нея ще се иска потвърждение от потребителя. Разбира се, необходимостта от потвърждаване на всяко повикване на MIDlet е много досадна. Въпреки това, ако MIDlet е подписан, той е моно веднъж, за да потвърди легитимността на достъпа до файловата система и да забрави за този проблем. За да направите това, трябва да зададете подходящата обща опция в настройките за разрешения на MIDlet. Когато разпространявате софтуер, който използва jsr-75, е много важно да обясните на потребителя как може да стане това.

FileConnection API дефинира два вида разрешения за файлове:

read ви позволява да отворите файл в режим на четене или да създадете InputStream въз основа на обект FileConnection. write ви позволява да отворите файл в режим на запис или да създадете OutputStream въз основа на обект FileConnection. Също така, write ви позволява да извършвате операции по изтриване и преименуване на файлове.

Ако нямате разрешения за четене или писане, ще бъде хвърлено SecurityException. Важно е да се справите с това изключение вътре в MIDlet.

Силно се препоръчва всички операции с файловата система да се извършват в отделни нишки. Това ще предотврати замръзване на приложението.

Характеристики на спецификацията на Sony Ericsson

  • Нямате достъп до папките Games и Themes.
  • Файловете и директориите са чувствителни към главни и малки букви.
  • Дължината на пътя е ограничена до 120 знака.

За повече информация относно ограниченията вижте Указанията за разработчици на Sony Ericsson Java ME платформа, страница 42.

Свойства на системата

Уверете се, че системата поддържаFileConnection API, можете да изпълните командата:

Ако FileConnection API се поддържа, той ще върне „1.0“.

FileConnection API класове и интерфейси

FileConnection API ви позволява да създавате и изтривате файлове и папки, да получавате списък с файлове в папка, да задавате разрешения, да получавате информация за файлове и да извършвате I/O операции. Следните са най-важните класове и интерфейси:

  • ConnectionClosedException се хвърля, ако методът извика FileConnection, докато връзката е затворена.
  • Класът FileSystemRegistry е основният системен регистър. Може да се използва за получаване на списък с монтирани главни папки (метод listRoots()). Той също така съдържа методи за регистриране на "слушатели", които се уведомяват, когато файлова система се добавя или премахва по време на изпълнение на програмата.
  • FileSystemListener - Интерфейс, използван за получаване на известия за създаване и премахване на root файлови системи.
  • FileConnection – интерфейс, който се използва за достъп до файлове и директории на устройството. Това е разширение на интерфейса Connection и съдържа редица методи за работа с файлове и папки.

Използване на API на FileConnection

И така, за достъп до папки във вътрешната памет на устройството, трябва да създадете обект FileConnection, като използвате следния URL адрес:

FileConnection fc = (FileConnection)Connector.open("file:///c:/");

Тъй като методът Connector.open() не ви позволява да зададете права за достъп, създаденият обект FileConnection може да изпълнява операции както за четене, така и за запис.

URL адресът, посочен при създаването на обекта FileConnection, може да препраща към файл или директория, които не съществуват.

Не забравяйте да затворите FileConnection, след като направите всички необходими неща:

FileConnection, отнасящ се до несъществуващ файл, не може да използва много операции. Така че опитът за отваряне на InputStream или OutPutStream ще доведе до изхвърляне на java.io.IOException. Единствените неща, които можете да използвате, са методите create() и mkdir(), които създават съответно файл и директория. За да се уверите, че необходимият файл съществува, използвайте метода exists():

Ако исканият файл не съществува, можете лесно да го създадете:

Друг метод се използва за създаване на директория

За да изтриете файлове и директории, използвайте метода

Изброяване e = fc.list(); while (e.hasMoreElements()) System.out.println(((String)e.nextElement())); >

В резултат на това ще бъдат показани всички файлове и папки, съдържащи се в посочената директория. Имената на папките ще завършват със знака "/". Можете да получите информация за съдържанието на дадена папка по друг, по-усъвършенстван начин.

списък (филтър за низове, логическо включванеСкрит)

Този метод връща съдържание, което отговаря на условията на филтъра. Нека дадем най-простия пример за филтър. Нека получим списък с mp3 файлове, съдържащи се в папката: "*.mp3". Вторият параметър указва дали файловете, маркирани като скрити, трябва да се показват. Този метод връща папки и файлове в произволен ред. Трябва да се погрижите сами да ги сортирате.

FileSystemRegistry има метод listRoots(), който ви позволява да получите списък на всички монтирани основни файлови системи. Списъкът се връща като изброяване

Изброяване e = FileSystemRegistry.listRoots(); while (e.hasMoreElements()) String rootName = (String)e.nextElement(); System.out.println(" монтиран корен:"+rootName); >

I/O операции

Ако вечеАко някога сте работили с GCF, значи сте запознати с четенето и записването на файлове. За да пишете, трябва да получите OutputStream, като използвате обект FileConnection, сочещ към необходимия файл:

OutputStream os = fc.openOutputStream() os.write(нов низ("здравей").getBytes()); os.close();

Ако искате да запишете данни във файлове под формата на някакъв тип Java, можете да използвате обекта DataOutputStream:

int i = 1234; DataOutputStream ds = fc. openDataOutputStream();

За да четете от файл, трябва да получите InputStream или DataInputStream.

байт [] b = нов байт [1024]; InputStream е = fc.openInputStream(); is.read(b); is.close();

Получаване на информация за файлове и директории

Класът FileConnection има няколко метода, които се използват за получаване на информация за файлове и директории:

  • boolean canRead()- дали файлът е достъпен за четене.
  • boolean canWrite()- дали файлът може да се записва.
  • long directorySize(boolean includeSubDirs)- връща размера на всички файлове в директорията (в байтове).
  • long fileSize()- връща размера на файла в байтове.
  • long lastModified()- връща датата на последната промяна на файла или директорията.

Други източници на информация

Повече информация за JSR 75 API можете да намерите тук: