파일 시스템에서 파일 저장

File Connection API를 사용하여 BlackBerry 스마트폰에서 프로그래밍 방식으로 파일 및 폴더를 만들고 관리할 수 있습니다. File Connection API는 BlackBerry Device Software 4.2에서 도입되었습니다.

File Connection API는 javax.microedition.io.file 패키지에 구현되어 있습니다.

File Connection API는 JSR 75로 정의되며 Generic Connection Framework를 기반으로 구축됩니다. File Connection API의 주요 구성 요소는 javax.microedition.io.file.FileConnection 클래스입니다. 다른 Generic Connection Framework 연결과 달리, FileConnection 객체는 기존의 파일이나 폴더를 참조하지 않고 javax.microedition.io.Connector.open() 메소드로부터 성공적으로 반환될 수 있습니다. 이 동작으로 파일 시스템에서 새 파일 및 폴더를 만들 수 있습니다. RIM 문서 외에 JSR 75와 Generic Connection Framework에 관한 정보 소스는 많이 있습니다.

또한 RIM은 File Connection API 확장을 제공합니다. net.rim.device.api.io.file 패키지에는 다음 클래스와 인터페이스가 포함됩니다.

파일 시스템은 내부 저장소와 외장 미디어 카드 저장소에서 액세스할 수 있습니다.

내부 저장소

내부 저장소는 프로그램 저장 공간 또는 내장 미디어 저장소입니다. 모든 BlackBerry 스마트폰에는 내부 저장소가 있습니다. 내부 저장소에 액세스하려면 file:///store 경로를 사용합니다. 예를 들면 다음과 같습니다.

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

외부 저장소

microSD 카드가 장착된 스마트폰에서만 외장 미디어 카드 저장소에 액세스할 수 있습니다. 외장 미디어 카드 저장소에 액세스하려면 file:///SDCard 경로를 사용합니다. 예를 들면 다음과 같습니다.

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

프로그램에서 만들어진 파일은 프로그램이 제거될 때 자동으로 삭제되지 않습니다.

내장 미디어 저장소가 있는 스마트폰은 '시스템'이라고 부르는 파일 시스템 파티션이 있습니다. file:///system 경로를 사용하여 이 파티션에 액세스할 수 있습니다. BlackBerry Device Software 5.0 이상에서는 시스템 파티션이 시스템 용도로 예약되며 읽기 전용입니다. 5.0보다 낮은 버전의 BlackBerry Device Software는 시스템 파티션에서 읽기/쓰기가 가능합니다.

코드 샘플: 폴더 만들기

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() );
         }
    }
}

코드 샘플: 파일 만들기

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() );
       }
  }
}

코드 샘플: 파일에 텍스트 쓰기

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() );
     }
  }
}

코드 샘플: 바이너리 파일의 섹션 읽기

이 코드 샘플은 .gif 파일에서 헤더 정보를 읽어 바이너리 파일의 섹션을 읽는 방법을 보여 줍니다. 해당 프로그램은 머리글에서 이미지의 너비와 높이를 읽습니다. 코드 샘플을 실행하려면 .gif 파일을 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();
      } 
	} 
}

코드 샘플: 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);
    }
}

코드 샘플: 마운트된 루트 목록 가져오기

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));
    }
}

이 정보가 도움이 되었습니까? 의견을 보내 주십시오.