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

读取手机本地图片和文本文件(Lwuit版)

    博客分类:
  • 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 arg0) throws MIDletStateChangeException {

		
	}

	protected void pauseApp() {

		
	}

	protected void startApp() throws MIDletStateChangeException {

		Display.init(this);
		panel = new MainPanel(this);
		
	}

	public void exit(){
		
		try {
			destroyApp(false);
		} catch (MIDletStateChangeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		this.notifyDestroyed();
	}
	
}



package com.mopietek;

import java.io.DataInputStream;
import java.io.InputStream;
import java.util.Enumeration;

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


import com.sun.lwuit.Button;
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.Image;
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",".CPP",".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";
	//主MIDlet
	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 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());
		
		//文本显示窗体
		textForm = new Form("");
		//文本装载项目
		text = new TextArea();
		text.setWidestChar('-');
		//图像显示窗体
		imageForm = new Form("");
		//创建命令
		cmdExit = new Command("退出");
		cmdView = new Command("浏览");
		cmdDone = new Command("返回");
		//添加命令绑定
		listForm.addCommand(cmdExit);
		listForm.addCommand(cmdView);
		listForm.addCommandListener(this);
		//添加文字处理框
		textForm.setLayout(new BorderLayout());
		textForm.addComponent(BorderLayout.CENTER, text);
		//设置文本浏览器窗体的绑定命令
		textForm.addCommand(cmdDone);
		textForm.addCommandListener(this);
		//设置图像浏览窗体的命令绑定
		imageForm.addCommand(cmdDone);
		imageForm.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){
				text.setText("");
				imageForm.removeAll();
				showDir(url);
			}else{
				showFile(url);
			}
		}

		//显示指定目录
		public void showDir(final String dir){
			//设置列表title
			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(fileName);
						System.out.println("It's OK!");
					}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();
		}
		
		//---------------------------------------------------------
		//显示指定文件内容
		private void showFile(final String fileName){
			
			String tempFileName = fileName.toUpperCase();
			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();
					
					Image img = Image.createImage(is);
					//设置图片窗体Title
					imageForm.setTitle(getRelativeName(fileName));
					imageForm.setLayout(new BorderLayout());
					imageForm.removeAll();
					Button b = new Button(img);
					imageForm.addComponent(BorderLayout.CENTER,b);
					//关闭流
					is.close();
					//关闭文件连接
					fc.close();
					imageForm.show();
				}else if(isEndWithIn(tempFileName,TEXT_EXT)){//文本文件
					int rawFileSize = (int) (fc.fileSize());
					int fileSize = ((rawFileSize / BLOCK_SIZE) + 1) * BLOCK_SIZE;
					//依据文件内容设置title
					textForm.setTitle(getRelativeName(fileName) + "," + rawFileSize + "/" + fileSize);
					DataInputStream dis = fc.openDataInputStream();
					byte [] buffer = new byte[rawFileSize];
					//读取文件内容
					dis.readFully(buffer);
					textForm.setLayout(new BorderLayout());
					textForm.removeAll();
					text.setText(new String(buffer,"UTF-8"));
					textForm.addComponent(BorderLayout.CENTER,text);
					//关闭流
					dis.close();
					//关闭文件连接
					fc.close();
					textForm.show();
				}else{
					Form f = new Form("不认识图片");
					f.show();
				}
			}catch(Exception ex){
				ex.printStackTrace();
				Dialog.show("Exception:", ex.toString(), "OK",null);
			}
		}
		
		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 getRelativeName(final String fileName){
			int pos = fileName.lastIndexOf(SEPS_CHAR);
			if(pos == -1){
				return ("");
			}
			return (fileName.substring(pos + 1, fileName.length()));
		}
		//----------------------------------------------------------------
		//获取扩展名(不包含'.'符号)
		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);
		
	}

}



程序代码所使用到的图片可在附件中下载,在真机上测试程序,可能部分手机不支持jpg和gif格式的图片,程序可能会报IOException。
分享到:
评论

相关推荐

    LabVIEW的读取文本文件

    “读取文本文件”位于函数选板“编程→文件I/O→读取文本文件”,图标和接线端如图1所示。  图1 读取文本文件图标及端子  读取文本文件读取指定文件中的字符,默认为读取文件中所有字符,接线端“计数”可以...

    AJAX实现读取本地文本文档内容并展示在网页上

    对于读取本地文本文档,由于浏览器的安全限制,直接使用AJAX无法访问本地文件系统。因此,我们需要使用HTML5的File API来实现这一功能。用户通常需要通过文件输入控件(`&lt;input type="file"&gt;`)选择文件,然后使用...

    易语言多线程读取大文本文件

    在“易语言多线程读取大文本文件”这个主题中,核心概念是多线程和文件I/O操作。多线程允许程序同时执行多个独立的任务,提高效率,尤其在处理大型文件时,可以将任务分割成多个部分,由不同的线程并行处理。这可以...

    delphi保存读取utf-8的文本文件.mht

    delphi保存读取utf-8的文本文件.mht

    C#文本文件读取和写入(文件、目录操作)

    本文将深入探讨如何使用C#进行文本文件的读取、写入、以及文件和目录的相关操作,以WindowForm窗体应用程序为例。 首先,我们关注的是文本文件的读取和写入。在C#中,`System.IO`命名空间提供了丰富的类来处理文件...

    Android 逐行写入和读取文本文件Demo

    本示例将详细介绍如何使用Android Studio 3.2进行逐行写入和读取文本文件的操作。 首先,我们需要理解Android对文件操作的基本流程。在Android中,文件操作通常在`Context`的上下文中进行,如`Activity`或`Service`...

    JS读取本地文件夹和图片异步加载(图片LazyLoad)

    总结,通过JavaScript的File API和图片懒加载技术,我们可以更好地处理用户上传的文件,同时优化网页性能,提供更流畅的用户体验。在实际开发中,结合响应式设计和现代前端框架,这些技术可以发挥更大的作用。

    JQuery实现本地文件的读取、文件内容的复制

    例如,`readAsText(file)`用于读取文件内容为文本,`readAsDataURL(file)`则读取为数据URL,适合图片等二进制文件。当文件读取完成后,会触发`onload`事件,我们可以通过该事件的回调函数获取到文件内容。 2. **...

    EXCEL VBA 读取文本文件宏

    这个宏示例展示了如何利用VBA进行文件操作,读取文本文件,以及根据特定条件处理和写入数据到Excel。这对于数据分析、日志解析等任务非常有用,尤其在需要批量处理大量文本数据时能显著提高工作效率。

    在app中读取本地的txt文本的Android demo

    这个“在app中读取本地的txt文本的Android demo”就是一个典型的示例,它展示了如何根据用户操作(点击不同的按钮)加载并显示不同txt文件的内容。以下将详细介绍实现这一功能的关键步骤和技术要点。 首先,我们...

    易语言多线程读取大文本文件源码

    本源码示例是关于如何在易语言中实现多线程读取大文本文件,这对于处理大量数据或长时间运行的任务尤其有用。以下将详细介绍这一技术及其应用。 首先,理解多线程的概念至关重要。在单线程环境中,程序按照顺序执行...

    java读取图片文件流

    java读取本地图片文件获取流!java读取本地图片文件获取流!

    Android读取本地json文件的方法(解决显示乱码问题)

    在Android应用开发中,有时我们需要从本地存储的JSON文件中读取数据,这通常涉及到文件I/O操作和字符编码处理。以下将详细讲解如何在Android中读取本地JSON文件,并解决可能出现的显示乱码问题。 1. **读取本地JSON...

    Springboot读取本地json文件工程

    在本文中,我们将深入探讨如何在Spring Boot应用中读取本地JSON文件,这是一个常见的后端开发任务,尤其在处理配置数据或进行数据测试时。Spring Boot以其简洁的配置和强大的功能,使得Java开发者能轻松地构建微服务...

    易语言大文本文件随机读取一行内容

    易语言作为一款面向初学者和专业人士的中文编程环境,提供了一种有效的方法来解决这个问题:随机读取大文本文件的一行内容。本篇将详细介绍如何使用易语言实现这个功能。 首先,理解“大文本文件随机读取一行内容”...

    dev 读取本地文件

    在IT行业中,尤其是在软件开发领域,本地文件的读取是一个常见的任务。"dev 读取本地文件"这个标题暗示我们正在讨论的是一个开发者工具或控件,它支持从本地文件系统中读取文件,并可能以特定的方式(如树状菜单)...

    labview 读取文本文件 M到N行

    我们将以提供的标题"labview 读取文本文件 M到N行"及描述为基础,探讨实现这一功能的关键步骤和技术。 首先,我们需要理解LabVIEW的基本编程结构。LabVIEW是一种图形化编程语言,其核心是数据流编程,即通过连接...

    js读取本地文件

    ### JS读取本地文件知识点详解 #### 一、概述 在Web开发中,有时候我们需要让JavaScript(简称JS)能够直接操作用户的本地文件系统,而无需通过服务器端脚本(如PHP、Node.js等)。虽然出于安全考虑,浏览器通常对...

    LabVIEW以设置读取位置形式快速读取文本最后一行.zip

    在这个特定的案例中,我们关注的是如何利用LabVIEW以设置读取位置的形式快速读取文本文件的最后一行。这种技术对于处理大型文本文件特别有用,因为它避免了逐行遍历整个文件的低效过程。 首先,我们要理解文本文件...

    MFC读取文本文件

    读写文本文档的很多,但是用MFC来写的却不多,在网上搜了一遍,没找到自己想要的,于是自己...本文件包括读取任意.txt格式的文档,并将读取到的文件显示在界面上,还支持文档转码,从而可以读取更多编码格式的.txt文档

Global site tag (gtag.js) - Google Analytics