C:\WTK22\apps\jam_FileConnectionTest\src

Werbung
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
//____________________________________________________________________________
}
Herunterladen