论坛首页 移动开发技术论坛

j2me 本地文件访问遍历

浏览 2481 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-12-24   最后修改:2010-01-26

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());
      System.out.println(currFile);
      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,null);
    
      }
      while (e.hasMoreElements())
      {
        String fileName = (String)e.nextElement();
        if (fileName.charAt(fileName.length()-1) == SEP)
        {
          browser.append(fileName,null);
        }
        else
        {
          browser.append(fileName,null);
        }
      }
      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, 0, 1024);
      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) {}
}
}

论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics