Memorizzazione dei file nel file system

È possibile creare e gestire in maniera programmatica i file e le cartelle presenti sugli smartphone BlackBerry tramite l'API File Connection. L'API File Connection è stata introdotta con BlackBerry Device Software 4.2.

L'API File Connection è implementata nel pacchetto javax.microedition.io.file.

L'API File Connection è definita da JSR 75 ed è basata su Generic Connection Framework. Il componente principale dell'API File Connection è la classe javax.microedition.io.file.FileConnection. Diversamente dalle altre connessioni Generic Connection Framework, gli oggetti FileConnection possono essere restituiti dal metodo javax.microedition.io.Connector.open() senza che facciano riferimento a file o cartelle esistenti. Questo comportamento consente la creazione di nuovi file e nuove cartelle su un file system. Oltre alla documentazione RIM, sono disponibili molte fonti di informazione su JSR 75 e su Generic Connection Framework.

Inoltre, RIM fornisce estensioni all'API File Connection. Il pacchetto net.rim.device.api.io.file include le classi e le interfacce seguenti:

È possibile accedere al file system sulla memoria interna e sulla scheda di memoria esterna:

Memoria interna

La memoria interna è una memoria applicazione o una memoria contenuto multimediale integrata. Tutti gli smartphone BlackBerry dispongono di memoria interna. Per accedere alla memoria interna, utilizzare il percorso file:///store. Ad esempio,

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

Memoria esterna

È possibile accedere alla memoria scheda di memoria esterna solo sugli smartphone con schede microSD. Per accedere alla memoria scheda di memoria esterna, utilizzare il percorso file:///SDCard. Ad esempio,

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

I file creati dall'applicazione non vengono eliminati automaticamente quando l'applicazione viene disinstallata.

Gli smartphone che dispongono di memoria contenuto multimediale integrata presentano una partizione del file system denominata System. È possibile accedere a questa partizione tramite il percorso file:///system. In BlackBerry Device Software 5.0 e versioni successive, la partizione del sistema è riservata all'utilizzo da parte del sistema ed è di sola lettura. Nelle versioni di BlackBerry Device Software precedenti alla 5.0, la partizione del sistema è in lettura/scrittura.

Esempio di codice: creazione di una cartella

import net.rim.device.api.system.Application;
import javax.microedition.io.*;
import javax.microedition.io.file.*;
import java.io.IOException;
public class CreateFolderApp extends Application 
{
    public static void main(String[] args) 
    {
        CreateFolderApp app = new CreateFolderApp();
        app.setAcceptEvents(false);
        try 
        {    // the final slash in the folder path is required
             FileConnection fc = (FileConnection)Connector.open("file:///SDCard/testfolder/");
             // If no exception is thrown, the URI is valid but the folder may not exist.
             if (!fc.exists())
             {
                 fc.mkdir();  // create the folder if it doesn't exist
             }
             fc.close();
         }
         catch (IOException ioe) 
         {
            System.out.println(ioe.getMessage() );
         }
    }
}

Esempio di codice: creazione di un file

import javax.microedition.io.*;
import java.io.IOException;
import javax.microedition.io.file.*;
import net.rim.device.api.system.Application.*;
public class CreateFileApp extends Application 
{
   public static void main(String[] args) 
   {
      CreateFileApp app = new CreateFileApp();
      app.setAcceptEvents(false);
      try 
      {
          FileConnection fc = 
               (FileConnection)Connector.open("file:///store/home/user/newfile.txt");
          // If no exception is thrown, the URI is valid but the file might not exist.
          if (!fc.exists())
          {
              fc.create();  // create the file if it doesn't exist
          }
          fc.close();
       }
       catch (IOException ioe) 
       {
          System.out.println(ioe.getMessage() );
       }
  }
}

Esempio di codice: scrittura di testo in un file

import net.rim.device.api.system.Application;
import javax.microedition.io.*;
import javax.microedition.io.file.*;
import java.io.IOException;
import java.io.OutputStream;
public class AddFileContent extends Application 
{
  public static void main(String[] args) 
  {
    AddFileContent app = new AddFileContent();
    app.setAcceptEvents(false);
    try 
    {
      FileConnection fc = (FileConnection)Connector.open("file:///store/home/user/newfile.txt");
      // If no exception is thrown, then the URI is valid, but the file may or may not exist.
      if (!fc.exists())
      {
          fc.create();  // create the file if it doesn't exist
      }
      OutputStream outStream = fc.openOutputStream(); 
      outStream.write("test content".getBytes());
      outStream.close();
      fc.close();
     }
     catch (IOException ioe) 
     {
        System.out.println(ioe.getMessage() );
     }
  }
}

Esempio di codice: lettura delle sezioni di un file binario

Questo esempio di codice mostra come leggere le sezioni di un file binario leggendo le informazioni dell'intestazione da un file .gif. L'applicazione legge la larghezza e l'altezza dell'immagine dell'intestazione. Per eseguire l'esempio di codice, inserire un file .gif nella cartella principale di una scheda di memoria in uno smartphone BlackBerry.

import net.rim.device.api.ui.*;
import net.rim.device.api.io.*;
import javax.microedition.io.file.*;
import javax.microedition.io.*;
import java.io.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
public class RandomFileAccess extends UiApplication
{
   public static void main(String[] args)
   {
      RandomFileAccess app = new RandomFileAccess();
      app.enterEventDispatcher();
   }
   public RandomFileAccess()
   {
      pushScreen(new HomeScreen());
   }
}
class HomeScreen extends MainScreen
{
   public HomeScreen()
   {
      setTitle("Random File Access Sample");
      try 
      {
         FileConnection fc = (FileConnection)Connector.open("file:///SDCard/test.gif");
         boolean bFileExists = fc.exists();
         if (!bFileExists)
         {
         Dialog.alert("Cannot find specified GIF file.");
         System.exit(0);
         }
         DataInputStream in = fc.openDataInputStream();
         byte[] widthBytes = new byte[2];
         byte[] heightBytes = new byte[2];
         if ( in instanceof Seekable ) 
         {
            ((Seekable) in).setPosition(6);
            in.read(widthBytes,0,2);
            ((Seekable) in).setPosition(8);
            in.read(heightBytes,0,2);
         } 
         int widthPixels  = widthBytes[0]  + 256 * widthBytes[1];
         int heightPixels = heightBytes[0] + 256 * heightBytes[1];
         add(new LabelField("Width: " + widthPixels + "\nHeight: " + heightPixels));
         in.close();
         fc.close();
      }
      catch (IOException ioe) 
      {
         ioe.printStackTrace();
      } 
	} 
}

Esempio di codice: visualizzazione del percorso della cartella video utilizzando System.getProperty()

import net.rim.device.api.ui.component.LabelField.*;
import net.rim.device.api.ui.container.MainScreen.*;
import net.rim.device.api.ui.UiApplication.*;
public class GetVidDir extends UiApplication
{
    public static void main(String args[])
    {
        GetVidDir app = new GetVidDir();
        app.enterEventDispatcher();
    }
    public GetVidDir()
    {
        HomeScreen hs = new HomeScreen();
        pushScreen(hs);
    }
}
class HomeScreen extends MainScreen
{
    public HomeScreen()
    {
        LabelField msg = new LabelField(System.getProperty("fileconn.dir.videos"));
        add(msg);
    }
}

Esempio di codice: recupero di un elenco di origini inserite

import java.util.Enumeration.*;
import javax.microedition.io.file.FileSystemRegistry,*;
import net.rim.device.api.ui.component.LabelField.*;
import net.rim.device.api.ui.container.MainScreen.*;
import net.rim.device.api.ui.UiApplication.*;
public class ListMountedRoots extends UiApplication 
{
   public static void main(String[] args) 
   {
      ListMountedRoots app = new ListMountedRoots();
      app.enterEventDispatcher();
   }
   public ListMountedRoots()
   {
      pushScreen(new HomeScreen());
   }
}
class HomeScreen extends MainScreen
{
    public HomeScreen() {
        StringBuffer msg = new StringBuffer( “The mounted roots are:\n”);
        Enumeration e = FileSystemRegistry.listRoots();
        while (e.hasMoreElements()) {
            msg.append( e.nextElement() );
            msg.append( ‘\n’ );
        }
        add(new LabelField(msg));
    }
}

Le informazioni sono state utili? Inviateci i vostri commenti.