无需言 做自己 业 ,精于勤 荒于嬉.

Android杂项 Android 文件类型和MIME的匹配表

发表日期:2015-07-08 21:57:31 | 来源: | 分类:Android杂项

在Android中通过文件的MIME类型来判断有哪些应用程序可以处理这些文件,并使用其中的某一个应用程序(如果有多个可选的应用程序,则用户必须指定一个)处理之。

我在写android资源管理器(文件浏览器)的时候,希望能在资源管理器的中实现打开文件的操作,此时就需要用到文件的MIME类型。

实现方法:

/**

* 根据文件后缀名获得对应的MIME类型。

* @param file

*/

private String getMIMEType(File file) {

String type = "*/*";

String fName = file.getName();

// 获取后缀名前的分隔符"."在fName中的位置。

int dotIndex = fName.lastIndexOf(".");

if (dotIndex < 0) {

return type;

}

/* 获取文件的后缀名 */

String end = fName.substring(dotIndex, fName.length()).toLowerCase();

if (end == "")

return type;

// 在MIME和文件类型的匹配表中找到对应的MIME类型。

for (int i = 0; i < p; i++) {

if (end.equals(MIME_MapTable[i][0]))

type = MIME_MapTable[i][1];

}

return type;

}

/**

* 打开文件

* @param file

*/

private void openFile(File file) {

// Uri uri = Uri.parse("file://"+file.getAbsolutePath());

Intent intent = new Intent();

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

// 设置intent的Action属性

intent.setAction(Intent.ACTION_VIEW);

// 获取文件file的MIME类型

String type = getMIMEType(file);

// 设置intent的data和Type属性。

intent.setDataAndType(/* uri */Uri.fromFile(file), type);

// 跳转

startActivity(intent);

}

现在就差一个MIME类型和文件类型的匹配表了。

"文件类型——MIME类型"的匹配表:

建立一个MIME类型与文件后缀名的匹配表

java代码:

private final String[][] MIME_MapTable = {

// {后缀名, MIME类型}

{ ".3gp", "video/3gpp" },

{ ".apk", "application/vnd.android.package-archive" },

{ ".asf", "video/x-ms-asf" }, { ".avi", "video/x-msvideo" },

{ ".bin", "application/octet-stream" }, { ".bmp", "image/bmp" },

{ ".c", "text/plain" }, { ".class", "application/octet-stream" },

{ ".conf", "text/plain" }, { ".cpp", "text/plain" },

{ ".doc", "application/msword" },

{ ".exe", "application/octet-stream" }, { ".gif", "image/gif" },

{ ".gtar", "application/x-gtar" }, { ".gz", "application/x-gzip" },

{ ".h", "text/plain" }, { ".htm", "text/html" },

{ ".html", "text/html" }, { ".jar", "application/java-archive" },

{ ".java", "text/plain" }, { ".jpeg", "image/jpeg" },

{ ".jpg", "image/jpeg" }, { ".js", "application/x-javascript" },

{ ".log", "text/plain" }, { ".m3u", "audio/x-mpegurl" },

{ ".m4a", "audio/mp4a-latm" }, { ".m4b", "audio/mp4a-latm" },

{ ".m4p", "audio/mp4a-latm" }, { ".m4u", "video/vnd.mpegurl" },

{ ".m4v", "video/x-m4v" }, { ".mov", "video/quicktime" },

{ ".mp2", "audio/x-mpeg" }, { ".mp3", "audio/x-mpeg" },

{ ".mp4", "video/mp4" },

{ ".mpc", "application/vnd.mpohun.certificate" },

{ ".mpe", "video/mpeg" }, { ".mpeg", "video/mpeg" },

{ ".mpg", "video/mpeg" }, { ".mpg4", "video/mp4" },

{ ".mpga", "audio/mpeg" },

{ ".msg", "application/vnd.ms-outlook" }, { ".ogg", "audio/ogg" },

{ ".pdf", "application/pdf" }, { ".png", "image/png" },

{ ".pps", "application/vnd.ms-powerpoint" },

{ ".ppt", "application/vnd.ms-powerpoint" },

{ ".prop", "text/plain" },

{ ".rar", "application/x-rar-compressed" },

{ ".rc", "text/plain" }, { ".rmvb", "audio/x-pn-realaudio" },

{ ".rtf", "application/rtf" }, { ".sh", "text/plain" },

{ ".tar", "application/x-tar" },

{ ".tgz", "application/x-compressed" }, { ".txt", "text/plain" },

{ ".wav", "audio/x-wav" }, { ".wma", "audio/x-ms-wma" },

{ ".wmv", "audio/x-ms-wmv" },

{ ".wps", "application/vnd.ms-works" },

// {".xml", "text/xml"},

{ ".xml", "text/plain" }, { ".z", "application/x-compress" },

{ ".zip", "application/zip" }, { "", "*/*" }

};

阅读全文 »

Android杂项 Android SDK中tools详解

发表日期:2015-07-08 21:55:32 | 来源: | 分类:Android杂项

Android SDK包含了各种各样的定制工具,简介如下:

Android模拟器(Android Emulator)

它是在你的计算机上运行的一个虚拟移动设备。你可以使用模拟器来在一个实际的Android运行环境下设计,调试和测试你的应用程序。

Android调试桥(Android Debug Bridge (adb) )

Adb

工具可以让你在模拟器或设备上安装应用程序的.apk文件,并从命令行访问模拟器或设备。你也可以用它把Android模拟器或设备上的应用程序代码和一个标准的调试器连接在一起。

层级观察器 (Hierarchy Viewer)

层级观察器工具允许你调试和优化你的用户界面。它用可视的方法把你的视图(view)的布局层次展现出来,此外还给当前界面提供了一个具有像素栅格(grid)的放大镜观察器,这样你就可以正确地布局了。

9-patch

Draw 9-patch工具允许你使用所见即所得(WYSIWYG)的编辑器轻松地创建NinePatch图形。它也可以预览经过拉伸的图像,高亮显示内容区域。

Eclipse IDE Android 开发工具插件(Android Development Tools Plugin for the Eclipse IDE)

ADT插件大大扩展了Eclipse集成环境功能,使得生成和调试你的Android应用程序既容易又迅速。如果你使用Eclipse,ADT插件可以让你难以置信地加快开发Android应用程序的 速度。

你可以从Eclipse IDE内部访问其它Android开发工具。例如,ADT可以让你直接从Eclipse访问DDMS工具的很多功能—屏幕截图,管理端口转发(port-forwarding),设置断点,观察线程和进程信息。

它提供了一个新的项目向导(New Project Wizard),帮助你快速生成和建立起新Android应用程序所需的最基本的文件。

它使得构建Android应用程序的过程变得自动化以及简单易行。

它提供了一个android代码编辑器,可以帮助你为Android manifest和资源文件编写有效的XML。

有关ADT插件的更多详细信息,包括安装指令,可参考Android 开发环境安装。如果你想看一个用法范例的屏幕截图,可参考Hello Android。

Dalvik 调试监视器服务(Dalvik Debug Monitor Service (ddms))

这个工具集成了Dalvik(为Android平台定制的虚拟机(VM)),能够让你在模拟器或者设备上管理进程并协助调试。你可以使用它杀死进程,选择某个特定的进程来调试,产生跟踪数据,观察堆(heap)和线程信息,截取模拟器或设备的屏幕画面,还有更多的功能。

Android Asset Packaging Tool (aapt)

Aapt工具可以让你创建包含Android应用程序二进制文件和资源文件的.apk文件。

Android接口描述语言(Android Interface Description Language (aidl))

可以让你生成进程间的接口的代码,诸如service可能使用的接口。

sqlite3

这个工具能够让你方便地访问SQLite 数据文件。这些数据文件是由Android 应用程序创建并使用的。

Traceview

这个工具可以将你的Android 应用程序产生的跟踪日志(trace log)转换为图形化的分析视图。

mksdcard

帮助你创建磁盘映像(disk image),你可以在模拟器环境下使用磁盘映像来模拟外部存储卡(例如SD 卡)。

dx

Dx gongju 将.class字节码(bytecode)转换为Android字节码(保存在.dex文件中) 。

UI/Application Exerciser Monkey

Monkey是在模拟器上或设备上运行的一个小程序,它能够产生为随机的用户事件流,例如点击(click),触摸(touch),挥手(gestures),还有一系列的系统级事件。你可以使用Monkey来给你正在开发的程序做随机的,但可重复的压力测试。

activitycreator

一个可以产生Ant build 文件的脚本,你可以使用它编译你的android 应用程序。如果你正在Eclipse上开发,并使用ADT插件,你不必使用这个脚本。

阅读全文 »

Android杂项 Android SDK 目录和作用详解

发表日期:2015-07-08 21:54:57 | 来源: | 分类:Android杂项

1、add-ons

这里面保存着附加库,比如GoogleMaps,当然你如果安装了OphoneSDK,这里也会有一些类库在里面。

2、docs

这里面是Android SDKAPI参考文档,所有的API都可以在这里查到。

3、market_licensing

作为AndroidMarket版权保护组件,一般发布付费应用到电子市场可以用它来反盗版。

4、platforms

是每个平台的SDK真正的文件,里面会根据APILevel划分的SDK版本,这里就以Android2.2来说,进入后有一个android-8的文件夹,android-8进入后是Android2.2SDK的主要文件,其中ant为ant编译脚本,data保存着一些系统资源,images是模拟器映像文件,skins则是Android模拟器的皮肤,templates是工程创建的默认模板,android.jar则是该版本的主要framework文件,tools目录里面包含了重要的编译工具,比如aapt、aidl、逆向调试工具dexdump和编译脚本dx。

5、platform-tools

保存着一些通用工具,比如adb、和aapt、aidl、dx等文件,Android123提示,这里和platforms目录中tools文件夹有些重复,主要是从android2.3开始这些工具被划分为通用了。

6、samples是Android

SDK自带的默认示例工程,里面的apidemos强烈推荐初学者运行学习,对于SQLite数据库操作可以查看NotePad这个例子,对于游戏开发Snake、LunarLander都是不错的例子,对于Android主题开发Home则是android m5时代的主题设计原理。

7、tools

作为SDK根目录下的tools文件夹,这里包含了重要的工具,比如ddms用于启动Android调试工具,比如logcat、屏幕截图和文件管理器,而draw9patch则是绘制android平台的可缩放png图片的工具,sqlite3可以在PC上操作SQLite数据库,而monkeyrunner则是一个不错的压力测试应用,模拟用户随机按键,mksdcard则是模拟器SD映像的创建工具,emulator是Android SDK模拟器主程序,不过从android 1.5开始,需要输入合适的参数才能启动模拟器,traceview作为android平台上重要的调试工具。

8、usb_driver

顾名思义,保存着android平台google官方机型的驱动如nexusone、nexuss,同时也有一些老机型驱动的支持,比如说htcdream、htcmagic和motorola的droid。


阅读全文 »

Android杂项 Android Apk文件结构简介

发表日期:2015-07-08 21:54:27 | 来源: | 分类:Android杂项

Manifest 文件

AndroidManifest.xml是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息,如要把apk上传到Google Market上,也要对这个xml做一些配置。

META-INF目录

META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个api包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。而在Android平台上安装apk包时,应用管理器会按照同样的算法对包里的文件做校验,如果校验结果与META-INF下的内容不一致,系统就不会安装这个apk。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码,或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系 统的安全。

classes.dex文件

classes.dex是java源码编译后生成的java字节码文件。但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。目前常见的java反编译工具都不能处理dex文件。

Android模拟器中提供了一个dex文件的反编译工具dexdump。用法为首先启动Android模拟器,把要查看的dex文件用adb push上传的模拟器中,然后通过adb shell登录,找到要查看的dex文件,执行dexdump xxx.dex。

目前在网上能找到的另一个dex文件的反编译工具是Dedexer。Dedexer可以读取dex格式的文件,生成一种类似于汇编语言的输出。这种输出与jasmin[]的输出相似,但包含的是Dalvik的字节码。

res 目录

res目录存放资源文件。

resources.arsc

编译后的二进制资源文件

阅读全文 »

Android杂项 Android中的库

发表日期:2015-07-08 21:53:14 | 来源: | 分类:Android杂项

Android中的类库:

1、Android.util 核心使用包(看名字就知道啦),包括了低级类,例如,专用的容器、字符串格式化和XML解析程序。

2、Android.os 操作系统包,提供了基本操作系统服务的访问时间,例如,消息传递、进程间通信、始终函数和调试。

3、Android.graphic 图形API提供了支持画布、颜色和绘画原语的低级图行类,让你可以在画布上画画。

4、Android.text 用来显示和解析文本的文本处理工具。

5、Android.database 当使用数据库的时候,提供处理游标(cursor)所要求的低级类。

6、Android.content 内容API通过处理资源、内容提供器和包的服务,来管理数据访问和发布。

7、Android.view View是核心用户界面类。所有的用户界面元素都是使用一系列View来构造的,用来提供交互组件。

8、Android.widget 构建在View包的基础上,Widget类是已经创建好的用户界面元素,可以直接在应用程序中使用,他们包含列表、按键和布局。

9、Com.google.android.maps 一个高级API,提供了对本地地图控件的访问,可以再应用程序中使用这些控件,它包括MapView控件以及用来对嵌入的地图进行注释和控制的Overlay和MapController类。

10、Android.app 一个提供了对应用程序模型进行访问的高级包。应用程序包包含活动(Acitivity)和服务(Service)API,它形成所有应用程序的基础。

11、Android.provider 为了方便开发人员对某些标注的内容提供器进行访问,provider包提供了一些类,从而提供了对所有的android发行版中包含的标准数据库的访问。

12、Android.telephony telephony Api允许直接与蛇鞭的电话栈进行交互,让你可以直接打电话、监控电话状态以及收发SMS消息。

13、Android.webkit webKit 包提供了与基于Web的内容相关的API,包括一个WebView控件,可以再活动或许cookie管理器重嵌入一个浏览器。

除了Android API之外,android栈还包含了一些可以提供程序框架使用的c/c++库集合:

1、OpenGL 基于O喷GL ES ApI 的用来支持3D图形的库。

2、Free Type 支持位图和矢量字体渲染。

3、SGL 用来提供2D图形引擎的核心库。

4、Libc 为基于Linux的嵌入式设备而优化的标注C库。

5、SQLite 用来存储数据的轻量级关系数据库引擎

6、SSL 用来支持使用安全套接字层(Secure Sockets Layer)加密协议的安全Internet通信。

7、Android.location 基于位置的服务API让应用程序可以访问到设备当前的物理位置,不管使用什么样硬件或技术来确定位置,基于位置的服务都提供了对位置信息的通用访问。

8、Android.media 媒体API提供了对音频和视频文件的回收和录制的支持,包括留媒体。

9、Android.opengl android使用OpenGL ES API提供了强大的3d渲染引擎,这种酒可以使用它来创建动态的3D用户界面。

10、Android.hardware 当可用的时候,硬件API就会提供传感器硬件,包括摄像头、加速计和罗盘传感器。

11、Android.buetooth, android.net.wifi和android.telephony android也提供了对硬件平台的低级访问,包括蓝牙,wifi和电话硬件。

阅读全文 »

Android杂项 Manifest.permission_group android所有授权常量2

发表日期:2015-07-08 21:49:05 | 来源: | 分类:Android杂项

常量

ACCOUNTS

直接通过统计管理器访问管理的统计

COST_MONEY

可以用来让用户花钱但不需要通过与他们直接牵涉的权限

DEVELOPMENT_TOOLS

与开发联盟特征相连的权限组

HARDWARE_CONTROLS

被用来提供直接访问硬件设备的权限

LOCATION

用来允许访问用户的当前位置的权限

MESSAGES

用来允许应用发送用户收到的被拦截的信息

NETWORK

用来提供访问网络服务的权限

PERSONAL_INFO

用于提供访问用户私人数据如联系人、日历、电子邮件等的权限

PHONE_CALLS

用于跟访问和修改拨号状态如截取去话信息、读取和修改电话状态等的权限

STORAGE

与SD卡访问相关联的权限组

SYSTEM_TOOLS

与系统API有关联的权限组

 

阅读全文 »

Android杂项 Manifest.permission android所有授权常量

发表日期:2015-07-08 21:47:45 | 来源: | 分类:Android杂项

常量

<td style="border-color: windowtext;border-width: 1px;height: 36px;width: 237px;padding: 0 7px" wi

ACCESS_CHECKIN_PROPERTIES

允许在登入数据库的时候读写其中的属性表,并上传改变的值

ACCESS_COARSE_LOCATION

允许应用访问范围(如WIFI)性的定位

ACCESS_FINE_LOCATION

允许应用访问精确(如GPS)性的定位

ACCESS_LOCATION_EXTRA_COMMANDS

允许应访问额外的提供定位的指令

ACCESS_MOCK_LOCATION

允许应用创建用于测试的模拟定位提供者

ACCESS_NETWORK_STATE

允许应用访问网络上的信息

ACCESS_SURFACE_FLINGER

允许应用使用低版本视图的特征

ACCESS_WIFI_STATE

允许应用访问关羽Wi-Fi网络的信息

ACCOUNT_MANAGER

允许应用进入帐户认证

AUTHENTICATE_ACCOUNTS

允许应用为ACCOUNT_MANAGER扮演一个帐户认证系统 

BATTERY_STATS

允许应用去统计电源信息

BIND_APPWIDGET

允许应用告诉AppWidget哪个应用能够访问该AppWidget的数据  

BIND_DEVICE_ADMIN

必须通过关机接收者的请求来确保只有系统能够与之交互

BIND_INPUT_METHOD

必须通过InputMethodService的请求来确保只有系统能够与之绑定

BIND_WALLPAPER

必须通过WallpaperService的请求来确保只有系统能够与之绑定

BLUETOOTH

允许应用去连接蓝牙设备

BLUETOOTH_ADMIN

允许应用找到与之连接的蓝牙设备

BRICK

被请求废止设备(非常危险)

BROADCAST_PACKAGE_REMOVED

允许应用发出一个程序包被移除的广播消息

BROADCAST_SMS

允许应用发出一个收到短信的消息

BROADCAST_STICKY

允许应用发出一个与intent相连的消息

BROADCAST_WAP_PUSH

允许应用发出一个收到WAP PUSH的广播消息

CALL_PHONE

允许应用启动一个用户确认电话被拨打而不通过拨打电话的用户界面的的拨打程序

CALL_PRIVILEGED

允许应用启动一个用户确认电话被拨打而不通过拨打电话的用户界面的的任意号码的拨打,包括紧急号码.

CAMERA

能够启动照相机设备的请求

CHANGE_COMPONENT_ENABLED_STATE

允许应用去改变一个应用是否是激活状态

CHANGE_CONFIGURATION

允许应用修改当前的配置,如本地设置

CHANGE_NETWORK_STATE

允许应用改变网络的连接状态

CHANGE_WIFI_MULTICAST_STATE

允许应用进入Wi-Fi的组播方式

CHANGE_WIFI_STATE

允许应用改变Wi-Fi的连接状态

CLEAR_APP_CACHE

允许应用清除所有安装在设备上的应用的缓存

CLEAR_APP_USER_DATA

允许应用清除使用者的信息资料

CONTROL_LOCATION_UPDATES

允许从广播设备来更新或不更新本地的消息

DELETE_CACHE_FILES

允许应用删除掉缓存文件

DELETE_PACKAGES

允许应用删除掉程序包

DEVICE_POWER

允许低权限的访问电源管理项

DIAGNOSTIC

允许应用诊断程序资源

DISABLE_KEYGUARD

允许应用禁用键盘锁

DUMP

允许应用从系统服务中恢复转储的信息

EXPAND_STATUS_BAR

允许应用扩大或缩小状态栏

FACTORY_TEST

如制造商测试的应用一样用终极权限用户运行

FLASHLIGHT

允许访问手电筒

FORCE_BACK

允许应用强制的返回操作而不论是不是最终的activity

GET_ACCOUNTS

允许应用访问账目服务中的统计清单

GET_PACKAGE_SIZE

允许应用查找出任何程序包使用的空间

GET_TASKS

允许应用找到关于当前或最近运行的任务和在哪些acitivities里运行

GLOBAL_SEARCH

这个权限可以被内容提供者用来允许使用全程搜索他们的数据

HARDWARE_TEST

允许访问硬件及周边设备.

INJECT_EVENTS

允许应用注入用户事件(键盘、触摸)到事件中然后提供给任意的窗口  

INSTALL_LOCATION_PROVIDER

允许应用安装一个位置提供商到位置管理器中

INSTALL_PACKAGES

允许应用安装程序包.

INTERNAL_SYSTEM_WINDOW

允许应用打开被部分系统用户接口使用的窗口

INTERNET

允许应用打开网络套接口

KILL_BACKGROUND_PROCESSES

允许应用去呼叫killBackgroundProcesses(String).方法

MANAGE_ACCOUNTS

允许应用去管理帐户管理者中的重要清单

MANAGE_APP_TOKENS

允许应用去管理(创建、销毁、顺序)在窗口管理者中的应用

MASTER_CLEAR

 

MODIFY_AUDIO_SETTINGS

允许应用修改全局音频设定

MODIFY_PHONE_STATE

允许改变拨打电话的状态-电源等

MOUNT_FORMAT_FILESYSTEMS

允许格式化可移除的存储仓库的文件系统

MOUNT_UNMOUNT_FILESYSTEMS

允许装备或解除可移除的存储仓库的文件系统

PERSISTENT_ACTIVITY

允许应用使它的activities更持久稳固

PROCESS_OUTGOING_CALLS

允许应用监督、限定或终止呼出的电话

READ_CALENDAR

允许应用读取用户的日历数据

READ_CONTACTS

允许应用读取用户的联系人数据

READ_FRAME_BUFFER

允许应用抓取屏幕和更多可获得的缓冲数据

READ_HISTORY_BOOKMARKS

允许应用去读取(非写)用户浏览历史和书签

READ_INPUT_STATE

允许应用去的当前键盘和控制的状态

READ_LOGS

允许应用读取低级别的系统日志文件

READ_OWNER_DATA

允许应用读取所有者的数据

READ_PHONE_STATE

允许读取电话的状态

READ_SMS

允许应用读取短信息.

READ_SYNC_SETTINGS

允许应用读取同步的设置

READ_SYNC_STATS

允许应用读取同步的统计数据

REBOOT

重新启动设备的请求

RECEIVE_BOOT_COMPLETED

允许应用接收在系统完成启动后发出的ACTION_BOOT_COMPLETED广播信息

RECEIVE_MMS

允许应用去监听多媒体信息并记录和对起进行处理

RECEIVE_SMS

允许应用去监听短消息并记录和对起进行处理

RECEIVE_WAP_PUSH

允许应用监听WAP push信息

RECORD_AUDIO

允许应用记录音频信息

REORDER_TASKS

允许应用改变任务的关系位置

RESTART_PACKAGES

已废弃使用

SEND_SMS

允许应用发送短消息.



阅读全文 »

JAVA基础 5.String 和 StringBuffer类常用方法

发表日期:2015-07-07 23:16:51 | 来源: | 分类:JAVA基础

      示例1
public class StringDemo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		String name1 = "eniac";
		String name2 = new String("eniac");
		String name3 = "eniac";
		String name4 = new String("eniac");
		
		System.out.println(name1);//eniac
		System.out.println(name2);//eniac
		System.out.println(name3);//eniac
		System.out.println(name4);//eniac
		
		//那么比较一下呢?
		System.out.println(name1==name2);//false
		System.out.println(name1==name3);//true
		System.out.println(name2==name4);//false
		/* 值都是eniac,为什么会不同呢?这就要内存分析了,
		 * JAVA这个语言 A==B 和其他语言不同,它不是比较内容的值是否相同,而是比较内存地址是否相同
		 * new String() 会每次都开辟一个新空间,所以内存地址会不同,
		 * 而 String name1 = "eniac",会开辟一次 而 String name3 = "eniac" 会引用上一次name1的内存地址
		 * 所以,从性能而言,尽量使用 String name3 = xxx 的
		 */
		
		//如果一定要比较值是否相同,我们不在意内存地址是否相同的话,可以这样
		System.out.println(name1.equals(name2));//true
		
		
		
		//字符串换成字符数组
		String str1 = "canquick";
		char[] Cstr1 = str1.toCharArray();
		System.out.println(Cstr1);//canquick
		for (int i = 0; i < Cstr1.length; i++) {
			char c = Cstr1[i];
			System.out.println(c);//c、a、n、q、u、i、c、k
		}

		//字符数组换成字符串
		String str2 = new String(Cstr1);
		String str3 = new String(Cstr1,3,5);
		System.out.println(str2);//canquick
		System.out.println(str3);//quick
		
		//从字符串中取出指定位置的字符
		char str4 = str1.charAt(3);
		System.out.println(str4);//q
		
		//字符串与byte数组转换
		byte[] byte1 = str1.getBytes();
		System.out.println(byte1);
		System.out.println(new String(byte1));//canquick
		System.out.println(new String(byte1,3,5));//canquick

		//取得一个字符串的长度
		System.out.println(str1.length());//8
		
		//查找指定字符串是否存在
		System.out.println(str1.indexOf("i"));//5
		System.out.println(str1.indexOf("i",3));//从第四个位置开始查找
		
		//去掉空格
		System.out.println("   hello   !".trim());//hello   !
		
		//字符截取
		System.out.println(str1.substring(1, 3));//an
		
		//拆分字符串
		String str5[] = str1.split("i");
		for (String string : str5) {
			System.out.println(string);//canqu、ck
		}
		
		//大小写转换
		System.out.println(str1.toUpperCase());//CANQUICK (toLowerCase:转小写)
		
		//判断字符串是否以指定字符开头或结尾
		System.out.println(str1.startsWith("can"));//true
		System.out.println(str1.endsWith("ck"));//true
		
		//不区分大小写比较
		System.out.println(str1.equalsIgnoreCase("CANQUICK"));//true
		
		//字符串替换
		System.out.println(str1.replaceAll("quick", "like"));//canlike
		
	}

}
      示例2
public class StringBufferDemo01 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StringBuffer buffer = new StringBuffer();
		buffer.append("Hello");//Hello
		buffer.append("world").append("!!!");//Helloworld!!!//字符串插入
		buffer.insert(5," ");//Hello world!!!
		buffer.reverse();//!!!dlrow olleH//字符串反转
		buffer.reverse();//Hello world!!!
		buffer.replace(6, 11, "ENIAC");//Hello ENIAC!!!//字符串替换

		System.out.println(buffer.substring(6, 11));//ENIAC 字符串截取
		
		buffer.delete(6, 11);//Hello !!!//字符串删除

		System.out.println(buffer.indexOf("llo"));//2 //查找字符串(-1为无)
		System.out.println(buffer);
		
	}

}

阅读全文 »

JAVA基础 6.Math类

发表日期:2015-07-07 21:12:26 | 来源: | 分类:JAVA基础

      示例1
import java.util.Random;


public class MathDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.out.println("求平方根:"+Math.sqrt(9.0));//求平方根:3.0
		System.out.println("求最大值:"+Math.max(57, 35));//求最大值:57
		System.out.println("求最小值:"+Math.min(57, 35));//求最小值:35
		System.out.println("2的3次方:"+Math.pow(2, 3));//2的3次方:8.0
		System.out.println("四舍五入:"+Math.round(3.14));//四舍五入:3
		Random random = new Random();
		for (int i = 0; i < 10; i++) {

			System.out.println(random.nextInt(100));//小于100的随机数
		}
		
	}

}

阅读全文 »

JAVA基础 1.JAVA开发环境配置

发表日期:2015-07-07 18:23:43 | 来源: | 分类:JAVA基础

JAVA开发环境配置,安装成功JVAV JDK后,一般都需要配置系统环境变量,否则在DOS下的命令会找不到文件报错。

这里要特别注意:“如果你的配置和以下相同并且无误,还是会报错如标题,那么你重启一下电脑就OK了!我在2003下既是此种情况,即可解决!而大多数软件配置环境变量是不需要重启的。”如下:

javac不是内部或外部命令

配置:

新建系统环境变量

名称:JAVA_HOME 值为: E:\Program Files\Javajdk1.6.0_11(这里修改为你的安装路径)

名称:PATH(一般系统都有,没有你就新建个) 值为:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

名称:CLASSPATH值为:%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

《这里需要注意,一个环境变量有一个名称,但可以设置多个值,每个值以分号“;”分开。切勿连在一块了》

这样设置就OK了!尽量重启一下电脑然后CMD下 输入javac ,不报错就完成了!


阅读全文 »

JAVA基础 2.java数据类型

发表日期:2015-07-07 18:23:43 | 来源: | 分类:JAVA基础

      示例1
public class NotePad {
    public static void main(String[] args) {
    
        int i = 10;
        float f = 20.66f;
        double d = 30.654;
        String s = "abc";
        float DtoF = (float) d;//转型
		
        /**
         * @describe 整型(Integer)
         */
        int min = Integer.MIN_VALUE;//整型最小值
        int max = Integer.MAX_VALUE;//整型最大值
        System.out.println(min);//-2147483648
        System.out.print(max);//2147483647
        System.out.println("print和println的区别第一个打印字符不换行,第二个打印完换一行.");
        
        /**
         * @describe 字符类型(char)
         * 只能存两个字节的数据,所以只能存一个字母或一个汉字
         * char 范围是0-255
         * 字符数据只能用单引号括起来不能用双引号括起来,也就是'数据内容'
         */
        char c1 = 'a';
        //char c1 = "a";此代码是错的,char类型的字符数据只能用单引号不能用双引号'数据内容',用双引号应该是String类型
        char c2 = 97;
        System.out.println(c1);//a
        System.out.println(c2);//a
        
        /**
         * @describe 浮点型(float)
         */
        float f1 = (float) 0.5655;//要么强制转型
        float f2 = 0.5655f;//要么浮点数后加 f代表是浮点数
        System.out.println(f1);//0.5655
        System.out.println(f2);//0.5655
        
        /**
         * @describe 双精度型(double)
         */
        double d1 = 3420.5655;
        double d2 = 3420.5655d;
        System.out.println(d1);//3420.5655
        System.out.println(d2);//3420.5655
        
        /**
         * @describe 布尔型(boolean)
         * 
         * boolean b3 = 1;//此代码是错的,java是强类型语言,boolean类型就有两个值true或者false,
         * 不像PHP等其他语言是弱类型语言1也表示true,0表示false,甚至只要是非0或null都表示true
         */
        boolean b1 = true;
        boolean b2 = false;
        System.out.println(b1);//true
        System.out.println(b2);//false
        
        /**
         * @describe 类型转换
         * 任何类型都可以像String类型转换,比如数字123 可以转换为字符串 "123"
         * 但是不一定任何类型的String都可以转换为数字 比如 "abc" 就不可能转换为数字,除非是"数字字符串"才可以转换。
         */
        //int i = 1.23;//此代码是错误的、因为int是整型只能表示整数 如:int i = 1;
        //int i = 1.23f;//此代码是错误的、因为1.23f就表示是浮点数了,它怎么能和整型匹配呢,这不叫转型
        int i = (int)1.23;//将浮点数1.23强制转换为整型,那么结果当然是1咯
        System.out.println(i);//1
        //其它转型亦如此,不一一列举
    }
}

阅读全文 »

JAVA基础 3.数组

发表日期:2015-02-25 21:29:56 | 来源: | 分类:JAVA基础

      示例1
public class ArrayDemo {
    public static void main(String[] args) {
        int arr1[] = null;//声明数组
        arr1 = new int[9];//为数组开辟9个空间的 大小
        //或
        int[] arr2 = null;
        arr2 = new int[9];
        //或
        int[] arr3 = new int[9];
        //或
        int arr4[] = new int[9];
        arr4[0] = 1;//数组的下标第一位是从0开始的,开辟9个空间,那么最大到8,即0-8
        arr4[1] = 2;
        arr4[2] = 3;
        arr4[3] = 4;
        //.....
        int arr[] = {15,68,84,10,9,20,64,31,3,75,99,21};//数组静态初始化
        System.out.println("数组长度"+arr.length);//数组长度12
        getMinMax(arr);
    }
    
    public static void getMinMax(int[] arr){
        int max = 0;
        int min = 0;
        max = min = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]<min) {
                min = arr[i];
            }
            if (arr[i]>max) {
                max = arr[i];
            }
        }
        System.out.println("最小值:"+min);//3
        System.out.println("最大值:"+max);//99
    }
}
      示例2
import java.util.Arrays;


public class ArrayDemo01 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int temp[] = {1,5,9,55,65,62,37,7};
		
		Arrays.sort(temp);
		System.out.println(Arrays.toString(temp));//[1, 5, 7, 9, 37, 55, 62, 65]
		
		int point =Arrays.binarySearch(temp, 7);//2
		System.out.println(point);
		
		Arrays.fill(temp, 7);
		System.out.println(Arrays.toString(temp));//[7, 7, 7, 7, 7, 7, 7, 7]
	}

}

阅读全文 »

JSP基础 16.3.4 JSTL-SQL标签库<sql:param

发表日期:2015-02-25 21:10:27 | 来源: | 分类:JSP基础

语法固定见实例:

其实就是参数替换?,所谓的初始化参数、、、

<%

pageContext.setAttribute("id", 5);

pageContext.setAttribute("age", 2);

%>


<sql:update dataSource="${dbHandle}" var="res">

UPDATE pet SET age=? WHERE id=?;

<sql:param value="${age}"/>

<sql:param value="${id}"/>//这里要记着,<sql:param只根据?顺序对应,不管你的变量名什么

</sql:update>


阅读全文 »

Android杂项 判断内存卡是否存在,获取内存卡根目录地址

发表日期:2015-02-21 21:31:35 | 来源: | 分类:Android杂项

      示例1
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
    //判断sd卡是否存在
    System.out.println(Environment.getExternalStorageDirectory());
    //获取sd根目录/mnt/sdcard
}

阅读全文 »

Android杂项 控件所有属性

发表日期:2015-02-16 12:12:19 | 来源: | 分类:Android杂项

android:layout_toLeftOf=""

android:layout_toRightOf=""

android:layout_above=""

android:layout_below=""

android:layout_alignBaseline=""

android:layout_alignLeft=""

android:layout_alignTop=""

android:layout_alignRight=""

android:layout_alignBottom=""

android:layout_alignParentLeft=""

android:layout_alignParentTop=""

android:layout_alignParentRight=""

android:layout_alignParentBottom=""

android:layout_centerInParent=""

android:layout_centerHorizontal=""

android:layout_centerVertical=""

android:layout_alignWithParentIfMissing=""

android:layout_toStartOf=""

android:layout_toEndOf=""

android:layout_alignStart=""

android:layout_alignEnd=""

android:layout_alignParentStart=""

android:layout_alignParentEnd=""

android:layout_width=""

android:layout_height=""

android:layout_margin=""

android:layout_marginLeft=""

android:layout_marginTop=""

android:layout_marginRight=""

android:layout_marginBottom=""

android:layout_marginStart=""

android:layout_marginStart=""

android:layout_marginEnd=""

android:includeFontPadding=""

android:maxLength=""

android:shadowColor=""

android:shadowDx=""

android:shadowDy=""

android:shadowRadius=""

android:autoLink=""

android:linksClickable=""

android:numeric=""

android:digits=""

android:phoneNumber=""

android:inputMethod=""

android:capitalize=""

android:autoText=""

android:editable=""

android:freezesText=""

android:ellipsize=""

android:drawableTop=""

android:drawableBottom=""

android:drawableLeft=""

android:drawableRight=""

android:drawableStart=""

android:drawableEnd=""

android:drawablePadding=""

android:lineSpacingExtra=""

android:lineSpacingMultiplier=""

android:marqueeRepeatLimit=""

android:inputType=""

android:imeOptions=""

android:privateImeOptions=""

android:imeActionLabel=""

android:imeActionId=""

android:editorExtras=""

android:textSelectHandleLeft=""

android:textSelectHandleRight=""

android:textSelectHandle=""

android:textEditPasteWindowLayout=""

android:textEditNoPasteWindowLayout=""

android:textEditSidePasteWindowLayout=""

android:textEditSideNoPasteWindowLayout=""

android:textEditSuggestionItemLayout=""

android:textCursorDrawable=""

android:textIsSelectable=""

android:textAllCaps=""

android:id=""

android:tag=""

android:scrollX=""

android:scrollY=""

android:background=""

android:padding=""

android:paddingLeft=""

android:paddingRight=""

android:paddingTop=""

android:paddingBottom=""

android:paddingStart=""

android:paddingEnd=""

android:focusable=""

android:focusableInTouchMode=""

android:visibility=""

android:fitsSystemWindows=""

android:scrollbars=""

android:scrollbarFadeDuration=""

android:scrollbarDefaultDelayBeforeFade=""

android:scrollbarSize=""

android:scrollbarThumbHorizontal=""

android:scrollbarThumbVertical=""

android:scrollbarTrackHorizontal=""

android:scrollbarTrackVertical=""

android:scrollbarAlwaysDrawHorizontalTrack=""

android:scrollbarAlwaysDrawVerticalTrack=""

android:fadingEdge=""

android:requiresFadingEdge=""

android:fadingEdgeLength=""

android:nextFocusLeft=""

android:nextFocusRight=""

android:nextFocusUp=""

android:nextFocusDown=""

android:nextFocusForward=""

android:clickable=""

android:longClickable=""

android:saveEnabled=""

android:filterTouchesWhenObscured=""

android:drawingCacheQuality=""

android:keepScreenOn=""

android:duplicateParentState=""

android:minHeight=""

android:minWidth=""

android:soundEffectsEnabled=""

android:hapticFeedbackEnabled=""

android:contentDescription=""

android:onClick=""

android:overScrollMode=""

android:alpha=""

android:translationX=""

android:translationY=""

android:transformPivotX=""

android:transformPivotY=""

android:rotation=""

android:rotationX=""

android:rotationY=""

android:scaleX=""

android:scaleY=""

android:verticalScrollbarPosition=""

android:layerType=""

android:layoutDirection=""

android:textDirection=""

android:textAlignment=""

android:importantForAccessibility=""

android:labelFor=""

android:bufferType=""

android:text=""

android:hint=""

android:textColor=""

android:textColorHighlight=""

android:textColorHint=""

android:textAppearance=""

android:textSize=""

android:textScaleX=""

android:typeface=""

android:textStyle=""

android:fontFamily=""

android:textColorLink=""

android:cursorVisible=""

android:maxLines=""

android:maxHeight=""

android:lines=""

android:height=""

android:minLines=""

android:minHeight=""

android:maxEms=""

android:maxWidth=""

android:ems=""

android:width=""

android:minEms=""

android:minWidth=""

android:gravity=""

android:scrollHorizontally=""

android:password=""

android:singleLine=""

android:enabled=""

android:selectAllOnFocus=""


阅读全文 »

Android杂项 字符串滚动

发表日期:2015-02-15 23:00:28 | 来源: | 分类:Android杂项

      示例1
TextView tv1 = (TextView)findViewById(R.id.tv1);
SpannableStringBuilder ssb = new SpannableStringBuilder(tv1.getText());//让字符串从右向左滚动
tv1.setText(ssb);

阅读全文 »

JSP基础 09.安全配置

发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础

网站根目录的WEB-INF文件夹是不可见的,用户无法访问该文件夹下的资源。

可以映射,web.xml

<!-- 

dbInit.jsp文件在/WEB-INF/下,安全受到保护,但是不能访问。

将/WEB-INF/dbInit.jsp的文件

映射为

/hello.db

可以访问/hello.db实际为/WEB-INF/dbInit.jsp

并且可以配置dbInit.jsp的一些信息

只有/hello.db可以获取

 -->


<servlet>

<servlet-name>db</servlet-name>

<jsp-file>/WEB-INF/dbInit.jsp</jsp-file>

<!-- 以下只对hello.eniac文件有作用,对其他页面没有用 -->

<init-param>

<param-name>dbDriver</param-name>

<param-value>org.git.mm.mysql.Driver</param-value>

</init-param>

<init-param>

<param-name>dbUrl</param-name>

<param-value>jdbc:mysql://localhost:3306/jsp</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>db</servlet-name>

<url-pattern>/hello.db</url-pattern>

</servlet-mapping>


读取:只有/WEB-INF/dbInit.jsp文件才可以读取信息

<%

String dbDriver = config.getInitParameter("dbDriver");

String dbUrl = config.getInitParameter("dbUrl");

%>

<h1>数据库驱动:<%=dbDriver %></h1>

<h1>数据库地址:<%=dbUrl %></h1>


阅读全文 »

JSP基础 10.javaBean介绍

发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础

JavaBean是使用Java开发的一个可重用性的组件,使java开发中减少重复代码。使开发更快捷。

如果你还是不理解什么是JavaBean,那么打个直白的比方,可能不是很确切但就是这么个意思:

如果你有PHP或其他语音基础,或没有。。JavaBean其实就是一堆我们在开发项目中经常使用的一些类的集合/打包。

比如说数据库连接类/验证码类/文件上传类,可能我们大部分的项目都需要用,我们就没有必要做一个项目写一次这个代码了,那么我们把它写成一个类,以后在用我们直接调用就行了,就不用再写一次了!我们称为JavaBean。。。其实java是很装逼的语言,不要害怕java,不要看到什么JavaBean、spring什么的单词就害怕了,他就是把最基础的功能起个名字装装逼,根本不难,没什么特别的。

VO:值对象,存放所有的传递数据的操作上。

POJP:简单的java对象。

TO:传输对象,一个类必须实现Serializable接口后称为传输对象。

【ZhuangBi.java】

package testBean.canquick.yyd.demo;

public class ZhuangBi {

private String name;

private int age;

public void setName(String name){

this.name = name;

}

public void setAge(int age){

this.age = age;

}

public String getInfo() {

return "姓名:"+this.name+"----年龄:"+this.age;

}

}


---------------------------------------------------------------------

【javaBean.jsp】

//javaBean可以初始化对象,然后进行简单的setter

<jsp:useBean id="zbBi" scope="page" class="testBean.canquick.yyd.demo.ZhuangBi">

<jsp:setProperty property="name" value="zhangSan" name="zbBi"/>

<jsp:setProperty property="age" value="20" name="zbBi"/>

</jsp:useBean>

<%=zbBi.getInfo() %>//姓名:zhangSan----年龄:20


--------------------------------------------------------------------

//javaBean还可以通过表单对初始化的对象进行简单的setter

【form.html】

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>在此处插入标题</title>

</head>

<body>

<form action="javaBean.jsp" method="post">

<p>name:<input type="text" name="name" value="ZhangSan"/></p>

<p>age:<input type="text" name="age" value="20"></p>

<p><input type="submit"></p>

</form>

</body>

</html>

【javaBean.jsp】

// id="zbBi"代表为给初始化的ZhuangBi类赋值,可以解释为:ZhuangBi zbBi = new ZhuangBi();

//scope="page"即变量zbBi作用域为page,当然也可以是session、request、application等四种类型

<jsp:useBean id="zbBi" scope="page" class="testBean.canquick.yyd.demo.ZhuangBi">

//property="*"代表设置表单中的所有字段,可以解释为zbBi.setName("ZhangSan");zbBi.setAge(20);

<jsp:setProperty property="*" name="zbBi"/>

</jsp:useBean>

<%=zbBi.getInfo() %>//姓名:zhangSan----年龄:20

如果:

//property="age"代表只设置表单的age字段,其它字段相同..

//property="age" name="zbBi" 可以解释为zbBi.setAge(20);(20代表的是表单form中age传过来的参数为20)

<jsp:setProperty property="age" name="zbBi"/>

//那么<%=zbBi.getInfo() %>为:姓名:null----年龄:20





阅读全文 »

JSP基础 01.TOMCAT配置

发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础

Tomcatconfweb.xml

<servlet>

    <servlet-name>default</servlet-name>

    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>

    <init-param>

        <param-name>debug</param-name>

        <param-value>0</param-value>

    </init-param>

    <init-param>

        <param-name>listings</param-name>

        <param-value>true</param-value>//这里本来是false改为true

    </init-param>

    <load-on-startup>1</load-on-startup>

</servlet>


//设置默认索引页

<welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.htm</welcome-file>

    <welcome-file>index.jsp</welcome-file>

</welcome-file-list>


//设置错误页

项目目录/WEB-INFO/web.xml

<error-page>

    <error-code>400</error-code>

    <location>/lib/error.html</location>

    <error-code>500</error-code>

    <location>/lib/error.html</location>

</error-page>




阅读全文 »

JSP基础 02.JSP标签形式

发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础

全局常量:

<%!

public static final String name = "eniac";

%>


普通语句

<%

String name = "xiaoMing";

class test{

 ........

}

%>

//易错点:当普通语句是单行时如:<%String name = "xiaoMing";%>要记得语句末尾一定要加;


输出语句:

<%

//java中我们是这样打印System.out.print();

//jsp中我们不用也不能写System了,可以这样直接写

out.print("xxxx");

%>

当然在jsp中这样写的是傻瓜,我们可以用简化写法

<%="xxxx"%>即表示打印字符串"xxxx",同out.print("xxxx");一样。

<%=要输出的内容%>要记得语句末尾不能加;


阅读全文 »

全部博文(1589)
集速网 copyRight © 2015-2025 宁ICP备15000399号-1 宁公网安备 64010402001209号
与其临渊羡鱼,不如退而结网
欢迎转载、分享、引用、推荐、收藏。