当前位置:  编程技术>移动开发
本页文章导读:
    ▪获取资料的属性信息        获取文件的属性信息 关键技术:File类的构造方法的参数可以是文件的相对路径,也可以是文件的绝对路径,它被当做File对象的抽象路径。File类的getPath方法把抽象路径中的文件分隔符用.........
    ▪ service跟BroadcastReceive控制的音乐播放器        service和BroadcastReceive控制的音乐播放器 package cn.com.dne.activity.ceshi; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; im.........
    ▪ 对Java的I/O源理解       对Java的I/O流理解 这是很久前另一个BLOG上的,现在不用了。转过来吧,方便查看...   输出流 流程示意图:   不同的情况: 1.        调用 write( ) 方法,把数据写入缓冲区, .........

[1]获取资料的属性信息
    来源: 互联网  发布时间: 2014-02-18
获取文件的属性信息
关键技术:
File类的构造方法的参数可以是文件的相对路径,也可以是文件的绝对路径,它被当做File对象的抽象路径。
File类的getPath方法把抽象路径中的文件分隔符用系统默认文件分隔符替换后返回。windows默认分隔符是"\",Linux和UNIX默认分隔符为"/"
File类的getAbsolutePath方法获得文件的绝对路径。
File类的isAbsolute方法判断File对象的抽象路径是否为绝对路径。
File类的toURI方法获得File对象的URI,以“file:”协议开头。
File对象可以指向一个目录,isDirectory方法返回它是否指向目录,isFile方法返回它是否指向一个具体文件。
File对象指向的文件可以不存在,exists方法返回它指向的文件是否存在。

package book.io;
import java.io.File;
import java.util.Date;

/**
* 获取文件的基本信息
*/
public class GetFileInfos {

    public static void println(String s){
        System.out.println(s);
    }
   
    public static void main(String[] args) {
        //用文件路径新建一个文件对象。路径可以是绝对路径也可以是相对路径
        //传入的参数被当作为文件的抽象路径
        File file = new File("C:/temp/newTemp.txt");
        //获取文件的名字,不包括路径
        println("文件名:\t" + file.getName());
        //将抽象路径名中的文件分隔符用系统默认分隔符替换
        println("文件路径:\t" + file.getPath());
        //获取文件的绝对路径
        println("绝对路径:\t" + file.getAbsolutePath());
        //获取抽象路径名的父抽象路径
        println("父目录:\t" + file.getParent());
        println("文件是否存在:\t" + file.exists());
        println("是否可读:\t" + file.canRead());
        println("是否可写:\t" + file.canWrite());
        println("是否是隐藏文件:\t" + file.isHidden());
        println("是否是普通文件:\t" + file.isFile());
        println("是否是文件目录:\t" + file.isDirectory());
        println("文件路径是否是绝对路径:\t" + file.isAbsolute());
        println("文件路径的URI:\t" + file.toURI());
        println("文件最后修改时间:\t" + new Date(file.lastModified()));
        println("文件大小:\t" + file.length() + " bytes");
    }
}

运行结果:

文件名:    newTemp.txt
文件路径:    C:\temp\newTemp.txt
绝对路径:    C:\temp\newTemp.txt
父目录:    C:\temp
文件是否存在:    false
是否可读:    false
是否可写:    false
是否是隐藏文件:    false
是否是普通文件:    false
是否是文件目录:    false
文件路径是否是绝对路径:    true
文件路径的URI:    file:/C:/temp/newTemp.txt
文件最后修改时间:    Thu Jan 01 08:00:00 CST 1970
文件大小:    0 bytes

    
[2] service跟BroadcastReceive控制的音乐播放器
    来源: 互联网  发布时间: 2014-02-18
service和BroadcastReceive控制的音乐播放器
package cn.com.dne.activity.ceshi;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class LinearActivity extends  Activity implements OnClickListener{
	ImageButton start;//播放、暂停按钮
	ImageButton stop;//停止按钮
	ActivityReceiver activityReceiver;
	int status = 1;//当前的状态,1没有声音播放 ,2 正在播放声音,3暂停
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {//重写的onCreate方法
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);//设置当前的用户界面
        start = (ImageButton) this.findViewById(R.id.start);//得到start的引用
        stop = (ImageButton) this.findViewById(R.id.stop);//得到stop按钮的引用
        start.setOnClickListener(this);//为按钮添加监听
        stop.setOnClickListener(this);//为按钮添加监听
        activityReceiver = new ActivityReceiver();//创建BroadcastReceiver
        IntentFilter filter = new IntentFilter();//创建IntentFilter过滤器
        filter.addAction("wyf.ytl.update");//添加Action
        registerReceiver(activityReceiver, filter);//注册监听
        Intent intent = new Intent(this, MyService.class);//创建Intent
        startService(intent);//启动后台Service
    }
    public class ActivityReceiver extends BroadcastReceiver{//自定义的BroadcastReceiver
		@Override
		public void onReceive(Context context, Intent intent) {//重写的onReceive方法
			// TODO Auto-generated method stub
			int update = intent.getIntExtra("update", -1);//得到intent中的数据
			switch(update){//分支判断
			case 1://没有声音播放
				status = 1; //设置当前状态
				break;
			case 2://正在播放声音
				start.setImageResource(R.drawable.png3);//更换图片
				status = 2; //设置当前状态
				break;
			case 3://暂停中
				start.setImageResource(R.drawable.png2);//更换图片
				status = 3; //设置当前状态
				break;
			}
		}
    }
	public void onClick(View v) {//接口中的方法
		// TODO Auto-generated method stub
		Intent intent = new Intent("wyf.ytl.control");//创建Intent
		switch(v.getId()){//分支判断
		case R.id.start://按下播放、暂停按钮
			intent.putExtra("ACTION", 1);//存放数据
			sendBroadcast(intent);//发送广播
			break;
		case R.id.stop://按下停止按钮
			intent.putExtra("ACTION", 2);//存放数据
			sendBroadcast(intent);//发送广播
			break;
		}
	}
	@Override
	protected void onDestroy() {//释放时被调用
		// TODO Auto-generated method stub
		super.onDestroy();
        Intent intent = new Intent(this, MyService.class);//创建Intent
        stopService(intent);//停止后台的Service
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu){//弹出菜单 
		menu.add(0,Menu.FIRST,0,"退出")
			.setIcon(android.R.drawable.ic_menu_delete);//设置图标
		return true;
	}
	@Override
	public boolean onOptionsItemSelected(MenuItem item){//选择的菜单项
		switch(item.getItemId()){//分支判断
		case Menu.FIRST:
			showDialog(1);//显示对话框
			break;
		}
		//将来可在此进行扩展
		return false;
	}
	@Override
	protected Dialog onCreateDialog(int id){//创建对话框
		switch(id){//判断
		case 1:
			return new AlertDialog.Builder(this)
				.setTitle("您确定退出?")
				.setPositiveButton("确定", new android.content.DialogInterface.OnClickListener(){
			
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						System.exit(0);//直接退出
					}
				})
				.setNegativeButton("取消", null)//取消按钮
				.create();
		default:
			return null;
		}
	}
}

 

package cn.com.dne.activity.ceshi;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.MediaPlayer;
import android.os.IBinder;

public class MyService extends Service{
	MediaPlayer mp;
	ServiceReceiver serviceReceiver;
	int status = 1;//当前的状态,1没有声音播放 ,2 正在播放声音,3暂停
	@Override
	public IBinder onBind(Intent intent) {//重写的onBind方法
		// TODO Auto-generated method stub
		return null;
	}
	@Override
	public void onCreate() {//重写的onCreate方法
		// TODO Auto-generated method stub		
		status = 1;
		serviceReceiver = new ServiceReceiver();//创建BroadcastReceiver
		IntentFilter filter = new IntentFilter();//创建过滤器
		filter.addAction("wyf.ytl.control");//添加Action
		registerReceiver(serviceReceiver, filter);//注册BroadcastReceiver
		super.onCreate();
	}
	@Override
	public void onDestroy() {//重写的onDestroy方法
		// TODO Auto-generated method stub
		unregisterReceiver(serviceReceiver);//取消注册
		super.onDestroy();
	}
	public class ServiceReceiver extends BroadcastReceiver{//自定义BroadcastReceiver
		@Override
		public void onReceive(Context context, Intent intent) {//重写的响应方法
			// TODO Auto-generated method stub
			int action = intent.getIntExtra("ACTION", -1);//得带需要的数据
			switch(action){
			case 1://播放或暂停声音
				if(status == 1){//当前没有声音播放
					mp = MediaPlayer.create(context, R.raw.nx);
					status = 2;
					Intent sendIntent = new Intent("wyf.ytl.update");
					sendIntent.putExtra("update", 2);
					sendBroadcast(sendIntent);
					mp.start();
				}
				else if(status == 2){//正在播放声音
					mp.pause();	//停止
					status = 3;//改变状态 
					Intent sendIntent = new Intent("wyf.ytl.update");
					sendIntent.putExtra("update", 3);//存放数据
					sendBroadcast(sendIntent);//发送广播
				}
				else if(status == 3){//暂停中
					mp.start();//播放声音
					status = 2;//改变状态
					Intent sendIntent = new Intent("wyf.ytl.update");
					sendIntent.putExtra("update", 2);//存放数据
					sendBroadcast(sendIntent);//发送广播
				}
				break;
			case 2://停止声音
				if(status == 2 || status == 3){//播放中或暂停中
					mp.stop();//停止播放
					status = 1;//改变状态
					Intent sendIntent = new Intent("wyf.ytl.update");
					sendIntent.putExtra("update", 1);//存放数据
					sendBroadcast(sendIntent);//发送广播
				}
			}
		}
	}
}

 


    
[3] 对Java的I/O源理解
    来源: 互联网  发布时间: 2014-02-18
对Java的I/O流理解

这是很久前另一个BLOG上的,现在不用了。转过来吧,方便查看...

 

输出流

流程示意图:

 

不同的情况:

1.        调用 write( ) 方法,把数据写入缓冲区,

i 如果缓冲区被填满 ,将自动执行 2,3 步,把数据转换为字节 ,写入到下一个缓冲区 ;

(1)   如果此缓冲区又被填满,则自动执行第 4 步,把转换好的数据保存到缓冲数组 ;

(2)   如果未被填满则不会执行第 4 步。

< 将循环执行,未写入的数据源 继续写入缓冲区,直到数据被全部写入 >

    ii 如果未被填满 ,则不执行 2 , 3 步。

2.        当出现未被填满而不发送的情况,可以调用 flush( ) 方法进行强制刷出操作。

 

API 中的一些定义:

ByteArrayOutputStream

1.   此类实现了一个输出流,其中的数据被写入一个 byte 数组。

2.   缓冲区会随着数据的不断写入而自动增长。

3.   可使用 toByteArray() 和 toString() 获取数据。

 

OutputStreamWriter

1.        OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。

2.        每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。

3.        传递给 write() 方法的字符没有缓冲。

 

BufferedWriter

1.        将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

2.        可以指定缓冲区的大小,或者接受默认的大小。

 

还有就是 flush( ) 方法的定义——

1.        刷新该流的缓冲。

2.        如果该流已保存缓冲区中各种 write() 方法的所有字符,则立即将它们写入预期目标。

3.        然后,如果该目标是另一个字符或字节流,则将其刷新。

4.        因此,一次 flush() 调用将刷新 Writer 和 OutputStream 链中的所有缓冲区。

 

* 需要注意的是, ByteArrayOutputStream 中的数组缓冲区初始大小为 32 字节,随后会按数据大小自动进行调整。

 

 

输入流

流程示意图:

 

1.        把数据源转换为字节数组;

2.        把转换好的字节缓冲数组作为参数源传进 ByteArrayInputStream 流;

3.        与输出流不同的是,第 3 , 4 , 5 步会自动执行,把数组传进下一个缓冲区;

4.        等到调用 read( ) 方法,把缓冲中数据读出 。

 

API 中的一些定义:

ByteArrayInputStream

1.ByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。

2. 内部计数器跟 踪 read 方法要提供的下一个字节。

 

InputStreamReader

1.        InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。

2.       每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。

3.       要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

BufferedReader

1.        从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

2.        可以指定缓冲区的大小,或者可使用默认的大小。

 

close( ) 方法——

1.        关闭该流并释放与之关联的所有资源。

2.        在关闭该流后,再调用 read() 、 ready() 、 mark() 、 reset() 或 skip() 将抛出 IOException 。

3.        关闭以前关闭的流无效。


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3