当前位置: 代码迷 >> J2ME >> J2ME手机本地文件下传服务器
  详细解决方案

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

热度:6902   发布时间:2013-02-25 21:31:31.0
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版手机本地文件读取上修改,所以代码中用到的资源文件在上一篇中可以下载,程序中只是写实现了图片的上传的代码,其它类型文件跟图片文件上传相同。