`
wangxc
  • 浏览: 213048 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

J2ME手机本地文件上传服务器

    博客分类:
  • J2ME
阅读更多
J2ME手机本地存储文件的上传,核心代码如下:


package com.mopietek;

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

import com.sun.lwuit.Display;


public class MainMIDlet extends MIDlet{

	
	private MainPanel panel = null;
	
	protected void destroyApp(boolean unconditional)
			throws MIDletStateChangeException {
		// TODO Auto-generated method stub
		
	}

	protected void pauseApp() {
		// TODO Auto-generated method stub
		
	}

	protected void startApp() throws MIDletStateChangeException {

		Display.init(this);
		panel = new MainPanel(this);
	}
	
	public void exit(){
		
		try{
		destroyApp(false);
		}catch(MIDletStateChangeException e){
			e.printStackTrace();
		}
		this.notifyDestroyed();
	}

}



package com.mopietek;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.io.file.FileConnection;
import javax.microedition.io.file.FileSystemRegistry;

import com.sun.lwuit.Command;
import com.sun.lwuit.Component;
import com.sun.lwuit.Container;
import com.sun.lwuit.Dialog;
import com.sun.lwuit.Form;
import com.sun.lwuit.Label;
import com.sun.lwuit.List;
import com.sun.lwuit.TextArea;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.events.ActionListener;
import com.sun.lwuit.layouts.BorderLayout;
import com.sun.lwuit.list.ListCellRenderer;
import com.sun.lwuit.plaf.Border;

public class MainPanel implements ActionListener{


	private final String UP_DIR = "..";
	private final String SEPS_STR = "/";
	private final int SEPS_CHAR = '/';
	private final String ROOT = "/";
	private final String RES_PREFIX = "file://";
	
	private final int BLOCK_SIZE = 256;
	
	private final String TEXT_EXT[] = {".TXT",".H",".HPP",".C",".CPPC",".INC"};
	private final String IMAGE_EXT[] = {".JPG",".JPEG",".PNG",".GIF"};
	private final String WEB_EXT[] = {".HTM",".HTML",".XML",".CSS"};
	
	private final String CHARACTER_CODE = "UTF-8";
	
	private MainMIDlet let = null;
	//主界面
	private Form listForm = null;
	//内容列表
	private List contentList = null;
	//显示文件用窗体
	private Form textForm = null;
	
	private TextArea text = null;
	
	private Form imageForm = null;
	
	private Command cmdExit = null;
	private Command cmdView = null; //浏览目录/文件
	private Command cmdDone = null; //退出浏览文件内容
	private Command cmdUpload = null; //上传文件
	
	private IconHelper helper = null;
	
	private String currentDir = null;
	
	public MainPanel(MainMIDlet mainMIDlet) {

		let = mainMIDlet;
		currentDir = ROOT;
		helper = new IconHelper();
		listForm = new Form();
		listForm.setLayout(new BorderLayout());
		
		cmdExit = new Command("退出");
		cmdView = new Command("浏览");
		cmdDone = new Command("返回");
		
		listForm.addCommand(cmdView);
		listForm.addCommand(cmdExit);
		listForm.addCommandListener(this);
		
		new BrowseThread(currentDir,true).start();
		
	
	}

	public void actionPerformed(ActionEvent evt) {

		Command c = evt.getCommand();
		if(c == cmdExit){
			let.exit();
		}else if(c == cmdView){
			if(contentList.size() == 0){
				new BrowseThread(ROOT,true).start();
			}else{
				final String url = ((MyContainer) contentList.getSelectedItem()).name.getText();
				if(url.endsWith(SEPS_STR) == true){
					new BrowseThread(currentDir + url,true).start();
				}else if(url.endsWith(UP_DIR) == true){
					backward();
				}else{
					new BrowseThread(currentDir + url,false).start();
				}
			}
		}else if(c == cmdDone){
			new BrowseThread(currentDir,true).start();
		}
		
	}
	
	private void backward(){
		int pos = currentDir.lastIndexOf(SEPS_CHAR, currentDir.length() -2);
		if(pos != -1){
			currentDir = currentDir.substring(0, pos +1);
		}else{
			currentDir = ROOT;
		}
		new BrowseThread(currentDir,true).start();
	}
	
	class MyContainer extends Container{
		
		private Label name;
		public MyContainer(String source){
			name = new Label(source);
			name.getStyle().setBgTransparency(0);
			addComponent(name);
		}
		
	}
	
	
	class MyRenderer implements ListCellRenderer{

		
		private Label focus;
		
		public MyRenderer(){
			
			focus = new Label();
			Border b = Border.createLineBorder(1, 0xff0000);
			focus.getStyle().setBorder(b);
		}
		
		public Component getListCellRendererComponent(List list, Object value,
				int index, boolean selected) {
			return (MyContainer) value;
		}

		public Component getListFocusComponent(List list) {
			return focus;
		}
		
	}
	
	
	class BrowseThread extends Thread{
		
		private String url = null;
		private boolean isDirectory = false;
		
		public BrowseThread(final String _url,final boolean _isDirectory){
			url = _url;
			isDirectory = _isDirectory;
		}
		
		public void run(){
			
			if(isDirectory){
				showDir(url);
			}
			else {
				showFile(url);
			}
		}
		
		public void showDir(final String dir){
		
			Enumeration em = null;
			FileConnection fc = null;
			
			currentDir = dir;
			
			listForm.removeAll();
			contentList = new List();
			contentList.setListCellRenderer(new MyRenderer());
			listForm.addComponent(BorderLayout.CENTER,contentList);
			
			try{
				if(dir.equals(ROOT) == true){
					//枚举根目录列表
					em = FileSystemRegistry.listRoots();
				}else{
					//非根目录
					fc = (FileConnection) Connector.open(RES_PREFIX + dir);
					em = fc.list();
					MyContainer up = new MyContainer(UP_DIR);
					up.name.setIcon(helper.getIconByExt("/"));
					contentList.addItem(up);
				}
				
				while(em.hasMoreElements()){
					
					String fileName = (String) em.nextElement();
					if(fileName.endsWith(SEPS_STR)){
						//如果为目录
						MyContainer c = new MyContainer(fileName);
						c.name.setIcon(helper.getIconByExt("/"));
						contentList.addItem(c);
						System.out.println("filName------>"+fileName);
					}else{
						//非目录(文件)
						MyContainer c = new MyContainer(fileName);
						c.name.setIcon(helper.getIconByExt(extractExt(fileName)));
						contentList.addItem(c);
					}
				}
				
				listForm.revalidate();
				contentList.setSelectedIndex(0,true);
				if(fc != null){
					fc.close();
				}
			}catch(Exception ex){
				ex.printStackTrace();
			}
			listForm.show();
		}
		
		//文件上传
		public void showFile(final String fileName){
			
			String url = "http://dev.mopietek.net:8080/waptest_1.0/httpup";
			String tempFileName = fileName.toUpperCase();
			
			byte[] data = null;
			
			try{
				FileConnection fc = (FileConnection) Connector.open(RES_PREFIX + fileName,Connector.READ);
				if(!fc.exists()){
					Dialog.show("Exception", "未找到文件", "ok","cancel");
				}
				
				if(isEndWithIn(tempFileName,IMAGE_EXT) == true){
					
					InputStream is = fc.openInputStream();
					ByteArrayOutputStream out = new ByteArrayOutputStream(4096);
					byte[] tmp = new byte[4096];
					int n;
					
					while((n = is.read(tmp)) != -1){
						out.write(tmp, 0, n);
						out.flush();
					}
					
					is.close();
					out.close();
					data = out.toByteArray(); 
					
				}
				
				if(fc != null){
					fc.close();
				}
				
			}catch(Exception ex){
				ex.printStackTrace();
			}
			
			try {
				HttpConnection sc = (HttpConnection) Connector.open(url, Connector.READ, true);
				sc.setRequestMethod(HttpConnection.POST);
				sc.setRequestProperty("Content-Type", "application/octet-stream");
				sc.setRequestProperty("Content-Length", String.valueOf(data.length));
				OutputStream output = sc.openOutputStream();
				output.write(data);
				output.flush();
				output.close();
				
			} catch (IOException e) {
				e.printStackTrace();
			}
			
			
		}
		
//		private String getRelativeName(final String fileName){
//			int pos = fileName.lastIndexOf(SEPS_CHAR);
//			if(pos == -1){
//				return ("");
//			}
//			return (fileName.substring(pos + 1, fileName.length()));
//		}
		
		private boolean isEndWithIn(final String fileName,final String[] extArray){
			for(int i=0;i<extArray.length;i++){
				if(fileName.endsWith(extArray[i]) == true){
					return true;
				}
			}
			return false;
		}
		
		
		//获取扩展名(不包括'.'符号)
		private String extractExt(final String fileName){
			int pos = fileName.lastIndexOf('.');
			return (fileName.substring(pos + 1, fileName.length()).toLowerCase());
		}
		
		
	}
	

}



package com.mopietek;

import java.io.IOException;
import java.util.Hashtable;

import com.sun.lwuit.Image;

public class IconHelper {

	
	//图标资源
	private Image imgFolder;
	private Image unknownImage;
	private Image textImage;
	//Audio
	private Image audioImage;
	//Picture
	private Image picImage;
	private Image jpgImage;
	//Video
	private Image sgpImage;
	private Image aviImage;
	private Image wmvImage;
	private Image mpgImage;
	//Web
	private Image zipImage;
	private Image htmlImage;
	private Image xmlImage;
	//Source
	private Image cImage;
	private Image cppImage;
	private Image headerImage;
	//图标管理容器
	private Hashtable iconTable;
	
	public IconHelper(){
		iconTable = new Hashtable();
		try{
			//载入图标资源
			imgFolder = Image.createImage("/filetype/folder.png");
			unknownImage = Image.createImage("/filetype/unknown.png");
			textImage = Image.createImage("/filetype/text.png");
			//Audio
			audioImage = Image.createImage("/filetype/audio.png");
			//Picture
			picImage = Image.createImage("/filetype/pic.png");
			jpgImage = Image.createImage("/filetype/jpg.png");
			//Video
			sgpImage = Image.createImage("/filetype/3gp.png");
			aviImage = Image.createImage("/filetype/avi.png");
			wmvImage = Image.createImage("/filetype/wmv.png");
			mpgImage = Image.createImage("/filetype/mpg.png");
			//Web
			zipImage = Image.createImage("/filetype/zip.png");
			htmlImage = Image.createImage("/filetype/html.png");
			xmlImage = Image.createImage("/filetype/xml.png");
			//Source
			cImage = Image.createImage("/filetype/c.png");
			cppImage = Image.createImage("/filetype/cpp.png");
			headerImage = Image.createImage("/filetype/header.png");
		}catch(IOException e){
			//图标资源
			imgFolder = null;   
            unknownImage = null;   
            textImage = null;   
            //Audio   
            audioImage = null;   
            //Picture   
            picImage = null;   
            jpgImage = null;   
            //Video   
            sgpImage = null;   
            aviImage = null;   
            wmvImage = null;   
            mpgImage = null;   
            //Web   
            zipImage = null;   
            htmlImage = null;   
            xmlImage = null;   
            //Source   
            cImage = null;   
            cppImage = null;   
            headerImage = null;   
            e.printStackTrace();  

		}
		initTable();
		
	}
	
	
	private void initTable() {
       //Key为扩展名(不包括'.'符号),值为content type
		iconTable.put("/", imgFolder);
		iconTable.put("", unknownImage);
		iconTable.put("txt", textImage);
		//Source
		iconTable.put("c", cImage);
		iconTable.put("cpp", cppImage);
		iconTable.put("h", headerImage);
		//Web
		iconTable.put("html", htmlImage);
		iconTable.put("htm", htmlImage);
		iconTable.put("xml", xmlImage);
		iconTable.put("zip", zipImage);
		iconTable.put("jar", zipImage);
		//audio
		iconTable.put("mp3", audioImage);
		iconTable.put("wma", audioImage);
		iconTable.put("mid", audioImage);
		iconTable.put("wav", audioImage);
		//Picture
		iconTable.put("gif", picImage);
		iconTable.put("png", picImage);
		iconTable.put("jpg", jpgImage);
		iconTable.put("jepg", jpgImage);
		//Video
		iconTable.put("3gp", sgpImage);
		iconTable.put("avi", aviImage);
		iconTable.put("wmv", wmvImage);
		iconTable.put("mpeg", mpgImage);
		iconTable.put("mpg", mpgImage);
		iconTable.put("mp4", mpgImage);
		
	}

    //按照扩展名(不包括'.'符号) 获取文件的图标对象
	public Image getIconByExt(final String extension) {

		Image temp = (Image) iconTable.get(extension);
		//是否为空,则使用默认图标替代
		return ((temp == null) ? unknownImage : temp);
		
	}

}



由于是在昨天的lwuit版手机本地文件读取上修改,所以代码中用到的资源文件在上一篇中可以下载,程序中只是写实现了图片的上传的代码,其它类型文件跟图片文件上传相同。
分享到:
评论

相关推荐

    J2ME文件上传到服务器

    在J2ME中,实现文件上传到服务器的功能可能会面临一些挑战,因为J2ME的API相对有限且不支持大文件直接上传。下面将详细介绍如何克服这些限制,实现J2ME文件上传到服务器的过程。 首先,我们需要了解J2ME的基础知识...

    J2ME手机办公软件

    4. **数据管理**:J2ME可能使用 Record Store API 来保存本地数据,或者通过HTTP协议与服务器进行数据交换,实现云同步和备份。 5. **网络通信**:利用J2ME的Connector类,可以实现HTTP、HTTPS和TCP/IP连接,用于...

    J2ME手机理财软件

    【J2ME手机理财软件】是一款基于Java Micro Edition (J2ME) 平台开发的移动应用程序,专门设计用于帮助用户在手机上进行个人财务管理。J2ME是Java平台的一个子集,主要用于嵌入式系统,如早期的智能手机和平板电脑,...

    J2ME手机开发入门知识必读

    J2ME的安全模型限制了某些可能对设备造成损害的操作,如访问本地文件系统和网络通信的权限控制。 十、优化技巧 由于资源有限,优化J2ME程序至关重要,包括减少内存占用、优化代码执行速度、减少图片大小等。 总之...

    J2ME 手机通讯录实现(部分)

    - **HttpConnection**:如果需要,J2ME应用可以使用HttpConnection实现与服务器的数据同步,如上传或下载联系人数据。 - **XML或JSON解析**:在网络通信中,数据通常以XML或JSON格式交换,J2ME可以通过内置的DOM或...

    一个J2ME的手机客户端例子..包括发短信,上传图片,与服务器数据同步等.

    J2ME虽然功能受限,但依然可以通过`javax.microedition.io`包提供的`Connection`类来建立HTTP连接,从而实现文件上传。开发者需要将图片文件转换为适合传输的格式(如Base64编码),然后通过POST请求将数据发送到...

    J2ME&Gaming中文版

    5. **数据存储**:Record Management System (RMS) 是J2ME中的本地数据存储系统,可用于保存游戏进度、用户设置等数据。 6. **游戏逻辑与性能优化**:由于J2ME运行在资源受限的设备上,开发者必须关注代码效率,...

    j2me socket 图片上传

    图片数据到达服务器后,可能需要将其保存到本地文件系统或者数据库。这涉及到文件操作或数据库交互,需要遵循对应的API和最佳实践。 综上所述,J2ME中的Socket图片上传涉及多个步骤,包括Socket连接的建立、图片...

    J2ME手册

    每个MIDlet在安装和运行时都需要获取相应的权限,如网络访问、读写本地文件等。 **9. 应用部署** JAR(Java Archive)文件是J2ME应用的标准打包格式,包含MIDlet的类文件和资源。jad(Java Application Descriptor...

    J2ME无线开发之MIDlet的部署及push自启动j2me程序

    - **步骤**:首先将JAD和JAR文件上传到服务器,然后配置服务器以识别这两种文件类型,最后修改JAD文件中的MIDlet-Jar-URL属性指向JAR文件的URL。 4. **OTA (Over-the-Air) 部署**: - **定义**:MIDlet通过无线...

    J2ME RPG游戏边学边做网页版

    5. 部署与发布:将网页版游戏上传至服务器,让玩家通过浏览器访问和体验。 总的来说,"J2ME RPG游戏边学边做网页版"项目涵盖了从移动平台游戏开发到Web端移植的完整流程,涉及到Java编程、图形与音频处理、用户交互...

    java_J2ME都市行

    6. **网络编程**:J2ME支持HTTP和TCP/IP协议,可以实现与服务器的通信,如下载数据、上传用户信息等,这对于都市行这样的应用可能很重要,可能用于获取实时信息或更新内容。 7. **数据存储**:J2ME中的Record ...

    J2ME重装机兵学习--附原代码和发部文件

    10. **发布与部署**:了解如何打包MIDlet,生成JAR和JAD文件,并将其上传到合适的服务器或通过OTA(Over The Air)方式分发给用户。 这个学习资源包很可能包含了上述所有知识点的实例代码,通过研究这些代码,你...

    11个J2ME例子.rar

    J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,专门设计用于资源有限的嵌入式设备和移动设备,如早期的智能手机、功能手机和掌上电脑。这个压缩包“11个J2ME例子.rar”包含了一系列J2ME的应用程序示例,...

    基于J2ME的交通监控系统

    J2ME是Java平台的一个子集,设计用于资源有限的嵌入式设备,如手机、PDA等。这个系统通过集成硬件传感器或接收来自外部交通监控设备的数据,为用户提供交通流量、路况信息以及可能的交通事件通知。 在【描述】中...

    j2me_RSSreader.zip_阅读器

    在J2ME开发中,类文件通常以".class"为扩展名,但有时为了上传或分发目的,可能会将它们转换为其他格式,如这个例子中的"PeekAndPick20"。这个文件可能包含了RSS数据的处理逻辑,比如解析XML,提取RSS项,或者与用户...

    手机日志系统的设计与实现

    而LogClient1可能是手机端的日志上传客户端,使用HTTP或HTTPS协议,通过网络将本地日志数据发送到LogServer。为了节省流量和提高效率,日志可以先在本地缓存,然后在有稳定网络连接时批量上传。 四、日志分析 在...

    licai.rar_mobile banking

    例如,Mobile Information Device Profile (MIDP) 是J2ME用于移动设备的标准配置文件,包含了用户界面、网络连接以及数据存储等基础功能,这对于手机银行应用至关重要。 在这款手机理财应用中,我们可能发现以下...

    20060628121708973.zip_J2ME_Java_

    开发者可以通过分析和运行“BCExchanger”代码,了解并学习如何在J2ME环境中实现蓝牙OBEX通信,从而在手机和电脑之间进行文件传输或其他数据交互。这种技术在早期移动设备中尤其有用,因为它们通常不支持其他高速...

    OTA下载技术资料编程使用

    - **请求定义**:客户端向服务器发送数据,通常用于提交表单或上传文件。 - **响应定义**:服务器接收并处理数据后,返回处理结果或状态码。 #### 五、与下载协议相关的头字段定义 - **Host**:指定请求的服务器...

Global site tag (gtag.js) - Google Analytics