• jsr75 fileconnection 文件操作的方法.


    大致的需求就是, 浏览文件夹,以及文件,然后选取文件后,返回给调用窗口,进行进一步处理。

     使用方式:

       fileSelector= new FileSelector(this); //this 为MIDlet
       fileSelector.sender = invoker; //invoker 为自定义的Canvas
       Display.getDisplay(this).setCurrent(fileSelector);

    附带完整代码: 

    package BaseEngine;

    /**
     * <p>Title: FileSelector</p>
     * <p>Description: </p>
     * <p>Copyright: cnsoft  Copyright (c) 2009</p>
     * <p>Company: </p>
     * @author cnsoft#gmail.com
     * @version 1.0
     */
    /*
    * File Connection Using JSR 75
    */

    import javax.microedition.lcdui.*;
    import java.io.*;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.*;
    import javax.microedition.io.*;
    import javax.microedition.io.file.*;
    import javax.microedition.io.file.FileConnection;

    import BaseEngine.xApplication;
    import BaseEngine.UI.xForm;


    public class FileSelector extends List implements CommandListener,FileSystemListener
    {
      private static String FILE_SEPARATOR ;
      private Command open = new Command("Open", Command.OK, 1);
      private Command back = new Command("Back", Command.BACK, 1);
      private String errorMsg = null;
      private Alert alert;
      private Vector rootsList = new Vector();
      private final static String upper_dir = "...";
      private FileConnection currentRoot = null;
      private static FileConnection fileConn2 = null;
      private static final int CHUNK_SIZE = 1024;

      public static ByteArrayInputStream  bis = null;
      public static xForm sender = null;

      FileSelector(xApplication xApplication) {
        super("File Browser", List.IMPLICIT);
        FILE_SEPARATOR = "/";
        //(System.getProperty("file.separator") != null) ? System.getProperty("file.separator") : "/";
        deleteAll();
        addCommand(open);
        addCommand(back);
        setSelectCommand(open);
        setCommandListener(this);
        FileSystemRegistry.addFileSystemListener(FileSelector.this);
        new Thread(new Runnable()
        {
          public void run() {
            execute();
            try {
              Thread.sleep(10);
            }
            catch (InterruptedException ex) {
            }
          }
        }).start();
      }

      public void execute() {
        //存储位置? Nokia机器上是啥呢?
        String initDir = "file:///root1/";//System.getProperty("fileconn.dir");
        //NokiaDevice  = "file:///C:/Data/Images/"
        String platform = System.getProperty("microedition.platform");
        if (platform.startsWith("Nokia"))
          initDir =  "file:///C:/Data/Images/";

        loadRoots();
        if (initDir != null) {
          try {
            currentRoot = (FileConnection) Connector.open(initDir, Connector.READ);
            displayCurrentRoot();
          }
          catch (Exception e) {
           displayAllRoots();
          }
        }
        else {
          displayAllRoots();
        }
      }

      private void loadRoots() {
        if (!rootsList.isEmpty()) {
          rootsList.removeAllElements();
        }
        try {
          Enumeration roots = FileSystemRegistry.listRoots();
          while (roots.hasMoreElements()) {
            rootsList.addElement(FILE_SEPARATOR + (String) roots.nextElement());
          }
        }
        catch (Throwable e) {

        }
      }

       private void displayCurrentRoot() {
        try {
          setTitle(currentRoot.getURL());
          deleteAll();
          append(upper_dir, null);
          Enumeration listOfDirs = currentRoot.list();//"*", false);
          while (listOfDirs.hasMoreElements()) {
            String currentDir = (String) listOfDirs.nextElement();
            if (currentDir.endsWith(FILE_SEPARATOR)) {
              append(currentDir, null);
            }
            else {
              append(currentDir, null);
            }
          }

        /*  Enumeration listOfFiles = currentRoot.list("*.txt",false);
           while(listOfFiles.hasMoreElements())
           {
           String currentFile=(String) listOfFiles.nextElement();
           if(currentFile.endsWith(FILE_SEPARATOR))
           {
           //append(currentFile,null);
           }
           else
           {
           append(currentFile,null);
           }
           } */
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        catch (SecurityException e) {
           e.printStackTrace();
        }
        System.out.println("Display Root ok!");
      }

      private void displayAllRoots() {
        setTitle("[Roots]");
        deleteAll();
        Enumeration roots = rootsList.elements();
        while (roots.hasMoreElements()) {
          String root = (String) roots.nextElement();
          append(root.substring(1), null);
        }
        currentRoot = null;
      }

      private void openSelected() {

        int selectedIndex = getSelectedIndex();
        if (selectedIndex >= 0) {
          String selectedFile = getString(selectedIndex);
          if (selectedFile.endsWith(FILE_SEPARATOR)) {
            try {
              if (currentRoot == null) {
                currentRoot = (FileConnection) Connector.open("file:///" +
                    selectedFile, Connector.READ);
              }
              else {
                currentRoot.setFileConnection(selectedFile);
              }
              displayCurrentRoot();
            }
            catch (IOException e) {
              System.out.println(e.getMessage());
            }
            catch (SecurityException e) {
              System.out.println(e.getMessage());
            }
          }
          else if (selectedFile.equals(upper_dir)) {
            if (rootsList.contains(currentRoot.getPath() + currentRoot.getName())) {
              displayAllRoots();
            }
            else {
              try {
                currentRoot = (FileConnection) Connector.open("file://" +
                    currentRoot.getPath(), Connector.READ);
                displayCurrentRoot();
              }
              catch (IOException e) {
                System.out.println(e.getMessage());
              }
            }
          }
          else {
            //选择的是文件.检查是否是.txt 后缀的文件,
            //并尝试加载以后,如果失败,提示错误
            String url = currentRoot.getURL() + selectedFile;
            //设置回Canvas界面. 并传递数据 用于初始化.
            loadfiledata(url);
            //xForm. Invoker, 初始化新的卡片数据
            FlashGame flash = (FlashGame)sender;
            flash.LoadCard(flash.cards,(InputStream)bis);
            flash.resetGame();
            xApplication.instance.ReturnToCanvas();
          }
        }
      }

      public void loadfiledata(String url) {

      //FileConnection fileConn = null;
      try {
        fileConn2 = (FileConnection) Connector.open(url,
                                                   Connector.READ);
        fis = fileConn2.openInputStream();
        int overallSize = (int)fileConn2.fileSize();
        byte[] b = new byte[overallSize];
        int length = fis.read(b, 0, overallSize);
       // ByteArrayInputStream
        bis= new ByteArrayInputStream(b);

        fis.close();
        fileConn2.close();
       }
      catch (IOException ex) {
      }
      }

      public void stop() {
        if (currentRoot != null) {
          try {
            currentRoot.close();
          }
          catch (IOException e) {

          }
        }
      }

      public void byteConvert(String url, String filename) {
        try {
          FileConnection fileConn = (FileConnection) Connector.open(url,
              Connector.READ);
          InputStream fis = fileConn.openInputStream();
          long overallSize = fileConn.fileSize();
          int length = 0;
          byte[] filedata = new byte[0];
          while (length < overallSize) { //converting the selected file to bytes
            byte[] data = new byte[CHUNK_SIZE];
            int readAmount = fis.read(data, 0, CHUNK_SIZE);
            byte[] newFileData = new byte[filedata.length + CHUNK_SIZE];
            System.arraycopy(filedata, 0, newFileData, 0, length);
            System.arraycopy(data, 0, newFileData, length, readAmount);
            filedata = newFileData;
            length += readAmount;
          }
          fis.close();
          fileConn.close();
    //here u can write a code to connect with the server for sending the selected file
        }
        catch (Exception e) {
    //showAlert(e.getMessage());
        }
        finally {

        }
      }

      public void commandAction(Command c, Displayable d) {
        if (c == open) {
          new Thread(new Runnable()
        {
          public void run()
          {
            openSelected();
          }}).start();
        }else
          if(c == back) {
            xApplication.instance.ReturnToCanvas();
          }
          ;// commandListener.commandAction(c, d);
      }

      public void rootChanged(int state, String rootNmae) {

      }

    }

  • 相关阅读:
    打包CAB大全
    设置VC6为默认异常调试工具
    XP系统遍历所有进程
    编写有界面的系统服务程序
    GOOGLE C++编程规范
    编写有界面的系统服务程序
    VC下音频文件的播放
    用MFC建立COM服务器对象的框架步骤
    注册OCX失败:由于应用程序配置不正确,程序未能启动.重新安装应用程序可能会纠正这个错误
    MediaPlayer属性大全
  • 原文地址:https://www.cnblogs.com/cnsoft/p/1406508.html
Copyright © 2020-2023  润新知