Kxgx.com - 移动开发网

本站快讯:
搜索: 您的位置主页>参考源码>软件源码>>阅读源码:使用FileConnection访问文件系统

使用FileConnection访问文件系统

2006-12-02   来源:   作者:佚名   【 】 评论:0条

The FileConnection API specified in JSR-75 gives access to the local file systems on devices like PDA. In order to overcome security issues MIDlet needs to include requested file permission in its JAD file under MIDLet-Permission property.The example below has a file browser to move around the file system, select and read images stored in its local image directory.

import java.util.*;
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.io.file.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class FileMidlet extends MIDlet implements CommandListener 
{
  private String currDirName;

  private Command view = new Command("View", Command.ITEM, 1);
  private Command back = new Command("Back", Command.BACK, 2);
  private Command exit = new Command("Exit", Command.EXIT, 3);
  
  private final static String UP_DIRECTORY = "..";
  private final static String MEGA_ROOT = "/";
  private final static String SEP_STR = "/";


  private final static char   SEP = '/';

  public FileMidlet() 
  {
    currDirName = MEGA_ROOT;
  }

  public void startApp() 
  {
    boolean isAPIAvailable = false;
    if (System.getProperty(
      "microedition.io.file.FileConnection.version"!= null)
    {
      isAPIAvailable = true;
      try 

      {
        showCurrDir();
      
      catch (SecurityException e
      {} 
      catch (Exception e) {}
      }

    else
    {
      StringBuffer splashText = new StringBuffer(
        getAppProperty("MIDlet-Name")).append("\n").append(
        getAppProperty("MIDlet-Vendor")).
        append(isAPIAvailable?"":"\nFileConnection API not available");
      Alert splashScreen = new Alert(null,splashText.toString(),
        null,AlertType.INFO);
      splashScreen.setTimeout(3000);

      Display.getDisplay(this).setCurrent(splashScreen);
    }
    
  }

  public void pauseApp() {}

  public void destroyApp(boolean cond

  {
    notifyDestroyed();
  }

  public void commandAction(Command c, Displayable d
  {
    if (c == view
    {
      List curr = (List)d;
      final String currFile = curr.getString(curr.getSelectedIndex());
      new Thread(new Runnable() 
      {
        public void run() 
        {
          if (currFile.endsWith(SEP_STR|| 
            currFile.equals(UP_DIRECTORY)) 
          {
            traverseDirectory(currFile);
          else 

          {
            showFile(currFile);
          }
        }
      }).start();
    }
    else if (c == back
    {
      showCurrDir();
    
    else if (c == exit
    {
      destroyApp(false);
    }
  }

  void showCurrDir() 
  {
    Enumeration e;
    FileConnection currDir = null;
    List browser;
    try 
    {
      if (MEGA_ROOT.equals(currDirName)) 


      {
        e = FileSystemRegistry.listRoots();
        browser = new List(currDirName, List.IMPLICIT);
      
      else 
      {
        currDir = (FileConnection)Connector.open(


          "file://localhost/" + currDirName);
        e = currDir.list();
        browser = new List(currDirName, List.IMPLICIT);
        browser.append(UP_DIRECTORY);
      }
      while (e.hasMoreElements()) 
      {
        String fileName = (String)e.nextElement();
        if (fileName.charAt(fileName.length()-1== SEP

        {
          browser.append(fileName);
        
        else 
        {
          browser.append(fileName);
        }


      }
      browser.setSelectCommand(view);
      browser.addCommand(exit);
      browser.setCommandListener(this);
      if (currDir != null
      {
        currDir.close();
      }
      Display.getDisplay(this).setCurrent(browser);
    
    catch (IOException ioe


    {}
  }
  
  void traverseDirectory(String fileName
  {
    if (currDirName.equals(MEGA_ROOT)) 
    {
      if (fileName.equals(UP_DIRECTORY)) 
      {
        // can not go up from MEGA_ROOT
        return;
      }
      currDirName = fileName;
    
    else if (fileName.equals(UP_DIRECTORY)) 
    {

      // Go up one directory
      // TODO use setFileConnection when implemented
      int i = currDirName.lastIndexOf(SEP, currDirName.length()-2);
      if (i != -1
      {
        currDirName = currDirName.substring(0, i+1);
      
      else 
      {
        currDirName = MEGA_ROOT;
      }
    
    else 
    {
      currDirName = currDirName + fileName;
    }
    showCurrDir();
  }
  
  void showFile(String fileName
  {
    try 
    {
      FileConnection fc = (FileConnection)
      Connector.open("file://localhost/" + currDirName + fileName);
      if (!fc.exists()) 
      {
        throw new IOException("File does not exists");

      }
      InputStream fis = fc.openInputStream();
      byte[] b = new byte[1024];
      int length = fis.read(b, 01024);
      fis.close();
      fc.close();

      TextBox tb = new TextBox("View File: " + fileName, null, 1024,
          TextField.ANY | TextField.UNEDITABLE);
  
      tb.addCommand(back);


      tb.addCommand(exit);
      tb.setCommandListener(this);

      if (length > 0
      {
        tb.setString(new String(b, 0, length));
      }
      Display.getDisplay(this).setCurrent(tb);
    }
    catch (Exception e) {}
  }
}

Tags:  
责任编辑:
  • 请文明参与讨论,禁止漫骂攻击。 用户名:新注册)密码:匿名:
    评论总数:0 [ 查看全部 ] 网友评论
    关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 帮助