D:\481358146.doc 1/5 myFileConnectionTest.java Quelle: Getting Started with the FileConnection APIs.htm FileConnection Optional Package is a simple but useful set of file-system APIs for the Java 2 Platform, Micro Edition (J2ME). This optional package is part of JSR 75 (JSR=Java Specification Request)), PDA Optional Packages for the J2ME Platform. On devices that implement JSR 75, this package enables J2ME-based applications to create, read, and write files and directories located on mobile devices and external memory cards. The PDA optional packages for the J2ME platform (JSR 75) consist of two separate APIs, one for accessing PIM (Personal Information Management) data and one for file system access. Artikel-Download von SUN: Getting Started with the FileConnection APIs.htm http://developers.sun.com/techtopics/mobility/apis/articles/fileconnection/ Wireless TechTips: Making Connections With the CLDC + Record Management System Basics http://java.sun.com/developer/J2METechTips/2001/tt0220.html File Connection optional package The File Connection API is standardized in the JSR 75 specification, which can be downloaded from http://www.jcp.org/en/jsr/detail?id=75 . j2me_pda_fc-1_0-fr-spec.zip nach C:\WTK22\docs\api entpackt! FileConnectionAPI file://localhost/C:/WTK22/docs/api/fileconnection/index.html FileConnection und Dateioperationen im WTK22 Es wird auf "C:\WTK22\appdb\DefaultColorPhone\filesystem\root1" ein Filesystem (für Simulationen) zur Verfügung gestellt. Dort (z. B.) den Ordner "myTextFiles" (mit den Textdateien (test_1.txt, test_2.txt, …)) anlegen. Dateioperationen mit dem SE-K750i-Handy Das SE-K750i unterstützt die JSR 75 (JSR=Java Specification Request) D:\481358146.doc 2/5 Filesystem auf dem K750i aus der Sicht des Windows-Explorers: Dateimanager K750i Verzeichnisse: Bilder (Telefonspeicher) - Unterordner Fotos (für die mit der internen Kamera aufgenommenen Fotos) (Memory-Stick → LW:\DCIM\100MSDCF) Videos (Telefonspeicher gemischt(!?) mit Memory-Stick → LW F:\MSSEMC\Media files\video ?) Sounds (Telefonspeicher gemischt(!?) mit Memory-Stick → LW:\MSSEMC\Media files\audio\ringtones) Designs (Telefonspeicher bzw. Memory-Stick → LW:\MSSEMC\Media files\theme ?) Webseiten (Telefonspeicher gemischt(!?) mit Memory-Stick → LW:\MSSEMC\Media files\webpage Spiele dort (auch): installierte MIDlets (aus den jar-Quelldateien) Anwendungen (Telefonspeicher) dort: installierte MIDlets (aus den jar-Quelldateien) Andere (Memory-Stick → LW:\MSSEMC\Media files\other) dort: hochgeladene jar-Dateien N. b.: LW:\MSSEMC\System\ams\java\db Dateien des RMS (Record Manage Systems) The following describes shortly the implementation in the Sony Ericsson mobile phones where the API is supported. In general, Java applications can access the same folders, subfolders and files as the built-in File manager application, both in the phone’s internal memory and on an inserted memory card. The following folders and all contained subfolders and files are accessible via the API: • <file:///c:/> (internal memory file root) • <file:///c:/other/> • <file:///c:/pictures/> • <file:///c:/sounds/> • <file:///c:/videos/> • <file:///e:/> (memory card file root) Note: The folders Games and Themes are not available via the File Connection API. Developers Guideline Java J2ME™ for Sony Ericsson mobile phones D:\481358146.doc 3/5 Herausfinden des (K750i-)Memory-Stick(?)/Card file root-Namens Developers Guideline Java J2ME™ for Sony Ericsson mobile phones http://developer.sonyericsson.com/getDocument.do?docId=65067 von dort: dg_java_me_r20a.pdf ( Seite 22: File Connection optional package The following describes shortly the implementation in the Sony Ericsson phones where the API is supported. The root directory corresponds to a logical mount point for a particular storage unit. !!Root names are device-specific!!! Sony Ericsson mobile phones: <file:///e:/> (memory card file root) Rootname auf Nokia 6610i: wie auf SE-K750i ! Test mit K750i : Auf K750i-Memory-Stick mit Windows-Explorers den Ordner "myTextFiles" angelegt. (Dort die Textdateien (test_1.txt, test_2.txt, …) angelegt.) jam_FileConnectionTest.jar in LW:\MSSEMC\Media files\other hochgeladen und im Telefonspeicher unter „Anwendungen“ installiert. Programm kann root-Verzeichnis lesen … ---------------------------------------------------------------------------------------------------------- --------------------------n b.: readTheTextFile_exFileSystem("E:/MY_TEXTS/","test.txt"); aus " stu_test_myPropertyList" funktioniert für Vokabeltrainer N .B.: Thread zur Erledigung von Aufgaben, die nicht sequentiell im Hauptprogramm abgearbeitetwerden können. Operationen im Dateisystem (z. B.) sollen, damit sie nicht von anderen Tasks gestört werden, in eigenen Threads ablaufen. Das WTK lässt eine Dateioperation aus einem commandAction()-handler überhaupt nicht zu und bricht mit folgender Meldung ab: Warning: To avoid potential deadlock, operations that may block, such as networking, should be performed in a different thread than the commandAction() handler. Das K750i hingegen lässt dies zu. Eine Verlagerung der kritischen Programmsequenz (sofern vom Ablauf sinnvoll bzw. machbar) in die start()Methode des MIDlets wird auch vom WTK toleriert. Connection connection = Connector.open( „protokoll: adresse: parameter“); Beispiele für Connector.open(): (HttpConnection) Connector.open( „http: //java.sun.com“); (SocketConnection) Connector.open( „socket: //beispiel:1234“); (UDPDatagrammConnection) Connector.open( „datagram: 127.0.0.1“); (StreamConnection) Connector.open( „bluetooth: //psm=1001“); (FileConnection)Connector.open("file:///" + wurzel); gleichwertig mit: (FileConnection)Connector.open("file://localhost/" + wurzel); D:\481358146.doc 4/5 myFileConnectionTest.java import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import java.io.*; //für IOException import javax.microedition.io.Connector; import javax.microedition.io.file.*; import java.util.*; //enumeration public class myFileConnectionTest extends MIDlet implements CommandListener{ private Display display; private Form myForm; Command exitCommand; // Exit the MIDlet private String wurzel = null; //Konstruktor public myFileConnectionTest () { super(); display = Display.getDisplay(this); //Formular zur Darstellung der Abfrageergebnisse myForm = new Form("File Connection Test"); exitCommand = new Command("Exit", Command.EXIT, 1); myForm.addCommand(exitCommand); myForm.setCommandListener(this); } public void startApp() { String version = System.getProperty("microedition.io.file.FileConnection.version"); if(version != null) { new DateisystemThread(); }else{ myForm.append("FileConnectionAPI nicht vorhanden!\n"); } //myForm.append("\n\n"); display.setCurrent(myForm); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command co,Displayable d){ int itemIndex=0; if(co==exitCommand) {destroyApp(false); notifyDestroyed(); } }//commandAction //____________________________________________________________________________ D:\481358146.doc 5/5 private class DateisystemThread extends Thread { FileConnection fc = null; String s=null; DateisystemThread() { start(); } public void run() { try { Enumeration wurzeln = FileSystemRegistry.listRoots();//Namen der Dateisysteme (z. B. C:\, E:\) while(wurzeln.hasMoreElements()) { wurzel =(String)wurzeln.nextElement(); myForm.append(wurzel + "\n"); try { fc = (FileConnection)Connector.open("file:///" + wurzel); Enumeration dateien = fc.list(); while(dateien.hasMoreElements()) { myForm.append("___ " + (String)dateien.nextElement() + "\n"); }//while } catch(Exception e) { myForm.append("Inhalt kann nicht angezeigt werden!" + " Grund: " + e.toString() + "\n"); } }//while } catch(Exception e) { myForm.append("Fehler: " + e.toString()); } finally { try{ if(fc != null) fc.close(); } catch(IOException e) { } // nichts tun }//finally }//run }//DateisystemThread //____________________________________________________________________________ }