File Explorer di J2ME

"Nun, demi pena dan apa yang mereka tulis" (Al-Qalam:1)


Pusiiiiiiiiiiiing, mungkin kata yang tepat untuk mewakili keadaanku saat ini (ceile..). Yup, sekarang aku lagi pusing bikin project mobile application. Salah satunya ada modul untuk bisa mengambil file dari memori di ponsel, dan ini, bukan satu-satunya permintaan, tapi masih ada 2 lagi yang belum ketemu solusinya.huaaaaaaaaaaaa....

Oke langsung aja ke codingnya, aku dah speechless, hiks..


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, 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) {
        }
    }
}

Semoga bermanfaat.. ^^

Komentar

  1. maf k mw nanya.....
    btw kk bangun aplikasi ne pake sofware apa ya...netbeans pa eclipse pa yang lainnya...
    reply y/////

    BalasHapus
  2. jjur k,sya kan msh baru bgd y sama j2me...
    sya mau buat gauge di netbeans tapi masih bingung dengan codingnya...wlaupun udah search di google ttep aja bingung...
    menurut kk,buat gauge di netbeans IDE 7.0 tu mudah pa gak c?
    pusiiiiiiiiiiing..~x(
    sankyuu!!!!!!!!!!!

    BalasHapus
  3. ada cara mudah ada cara sulit.

    Cara mudahnya, tinggal pake class Gauge yang udah disediakan oleh JAVA di netbeans. (coba lihat link ini: http://www.java-tips.org/java-me-tips/midp/how-to-create-a-gauge-tracker.html)

    Cara sulitnya pake canvas, seperti contoh program yang ada disini: http://dyahslib.blogspot.com/2010/09/membuat-welcome-screen.html

    semoga terbantu.. ^^

    BalasHapus
  4. terima kasih y kk.....
    mou ichido domo arigatou!!!!! :D

    BalasHapus
  5. assalam..
    mbk minta pencerahan nya
    bagaimana cra nya membuat perhitungan yang menggunakan Huruf dan Angka di j2me?
    makasi ya mbk,
    wslm

    BalasHapus
    Balasan
    1. 'alaikumussalam,
      maksudnya perhitungan gimana ya, dengan huruf dan angka itu? :D

      Hapus

Posting Komentar

Terima kasih sudah membaca....^^