`
suuu
  • 浏览: 16395 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Android学习笔记(七)输出流Log、download、写入SDCard

 
阅读更多

一、输出流Log

android.util.Log常用的方法有以下5个: 根据首字母对应为:VERBOSE、DEBUG、INFO、 WARN、ERROR

1、Log.v()

 

Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","");

 

2、Log.d()

Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择.  

 

3、Log.i() 

 

Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息  

 

4、Log.w()

Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。

 

5、Log.e()

 Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了

 

 

log输出流常用于寻找程序的错误,有时候在程序开发时,经常会碰到一些莫名其妙的错误,很难判断到底是哪里出现了问题.

那么,这个时候就可以使用log输出流来帮助寻找错误代码块.

看下面这个例子:

 

 

 

   class QueryListener implements OnClickListener{

		@Override
		public void onClick(View v) {
                                          //这里使用log.d()来进行debug调试,当执行到这段代码的时候,log里面没有输出,则说明了程序问题出在这一段代码块上,从而提高效率			
Log.d("myDebug", "myFirstDebugMsg"); DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db"); //获得只读的对象 SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null); while(cursor.moveToNext()){ //根据列名取得列的编号,再getString(列名)将值取出 String name = cursor.getString(cursor.getColumnIndex("name")); System.out.println("query--->" + name); } } }

 

 

 

二、文件下载

文件下载步骤:

1、创建一个HttpURLConnection对象

 

HttpURLConnection UrlConn = (HttpURLConnection)url.openConnection();  //调用openConnection方法获得UrlConn对象

 

2、获得一个inputStream对象

 

urlConn.getInputStream();  //对象打点使用getInputStream方法来获取一个输入流.

输入流: 向程序当中读入数据.

输出流: 向目标写出数据.

3、访问网络的权限

 

android.permisson.INTERNET  在AndroidManifest.xml文件当中声明.

 

 

 三、将文件写入到SDCard 

  步骤:

1、得到当前设备SD卡的目录

 

	public FileUtils() {
		//得到当前外部存储设备的目录
		// /SDCARD
		SDPATH = Environment.getExternalStorageDirectory() + "/";
	}
 

 

2、访问SD卡的权限 
在AndroidManifest.xml文件中写入:

 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

四、实现下载和写入的代码

 Download.java:

 

package mars.download;

import mars.utils.HttpDownloader;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Download extends Activity {
    /** Called when the activity is first created. */
    private Button downloadTxtButton;
    private Button downloadMp3Button;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        downloadTxtButton = (Button)findViewById(R.id.downloadTxt);
        downloadTxtButton.setOnClickListener(new DownloadTxtListener());
        downloadMp3Button = (Button)findViewById(R.id.downloadMp3);
        downloadMp3Button.setOnClickListener(new DownloadMp3Listener());
    }
    
    class DownloadTxtListener implements OnClickListener{

		@Override
		public void onClick(View v) {
			HttpDownloader httpDownloader = new HttpDownloader();
			String lrc = httpDownloader.download("http://192.168.1.107:8080/voa1500/a1.lrc");
			System.out.println(lrc);
		}
    	
    }
    class DownloadMp3Listener implements OnClickListener{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			HttpDownloader httpDownloader = new HttpDownloader();
			int result = httpDownloader.downFile("http://wwww.ring.zg99.com:8000/201003/172ring/137.mp3", "172ring/", "137.mp3");
			System.out.println(result);
		}
    	
    }
    
}
 

 

HttpDownload.java:

 

package mars.utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;


public class HttpDownloader {
	private URL url = null;

	/**
	 * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容
	 * 1.创建一个URL对象
	 * 2.通过URL对象,创建一个HttpURLConnection对象
	 * 3.得到InputStram
	 * 4.从InputStream当中读取数据
	 * @param urlStr
	 * @return
	 */
	public String download(String urlStr) {
		StringBuffer sb = new StringBuffer();
		String line = null;
		BufferedReader buffer = null;
		try {
			// 调用URL类的构造函数,创建一个URL对象,把要下载的文件的地址作为参数传进来
			url = new URL(urlStr);
			// 创建一个Http连接
			//调用url对象的openConnection方法.向下转型为HttpURLConnection对象
			//这个对象就代表了url的一个连接
			HttpURLConnection urlConn = (HttpURLConnection) url
					.openConnection();
			// 使用IO流读取数据
			//调用urlConn的getInputStream方法,得到一个InputStream,这个InputStream,它代表的就是urlStr地址所代表的那个文件
			buffer = new BufferedReader(new InputStreamReader(urlConn
					.getInputStream()));
			//BufferedReader的readLine方法能够一次性读取一行数据,读完之后,返回值是空
			while ((line = buffer.readLine()) != null) {
				//每读出一行都添加到sb对象里面,直到line为空
				sb.append(line);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				buffer.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		//将已读完的文本文件内容返回
		return sb.toString();
	}

	/**
	 * 该函数返回整形。 -1:代表下载文件出错 。0:代表下载文件成功。 1:代表文件已经存在
	 */
	public int downFile(String urlStr, String path, String fileName) {
		InputStream inputStream = null;
		try {
			FileUtils fileUtils = new FileUtils();
			//测试文件是否在当前路径已经存在,存在的话返回1
			if (fileUtils.isFileExist(path + fileName)) {
				return 1;
			} else {
				inputStream = getInputStreamFromUrl(urlStr);
				File resultFile = fileUtils.write2SDFromInput(path,fileName, inputStream);
				if (resultFile == null) {
					return -1;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			return -1;
		} finally {
			try {
				inputStream.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return 0;
	}

	/**
	 * 根据URL得到输入流
	 * 
	 * @param urlStr
	 * @return
	 * @throws MalformedURLException
	 * @throws IOException
	 */
	public InputStream getInputStreamFromUrl(String urlStr)
			throws MalformedURLException, IOException {
		url = new URL(urlStr);
		HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
		InputStream inputStream = urlConn.getInputStream();
		return inputStream;
	}
}
 

FileUtils.java

 

package mars.utils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.os.Environment;

public class FileUtils {
	private String SDPATH;

	public String getSDPATH() {
		return SDPATH;
	}
	public FileUtils() {
		//得到当前外部存储设备的目录
		// /SDCARD
		SDPATH = Environment.getExternalStorageDirectory() + "/";
	}
	/**
	 * 在SD卡上创建文件
	 * 
	 * @throws IOException
	 */
	public File creatSDFile(String fileName) throws IOException {
		File file = new File(SDPATH + fileName);
		file.createNewFile();
		return file;
	}
	
	/**
	 * 在SD卡上创建目录
	 * 
	 * @param dirName
	 */
	public File creatSDDir(String dirName) {
		File dir = new File(SDPATH + dirName);
		dir.mkdirs();
		return dir;
	}

	/**
	 * 判断SD卡上的文件夹是否存在
	 */
	public boolean isFileExist(String fileName){
		File file = new File(SDPATH + fileName);
		return file.exists();
	}
	
	/**
	 * 将一个InputStream里面的数据写入到SD卡中
	 */
	//三个参数:路径、文件名、输入流里的数据
	public File write2SDFromInput(String path,String fileName,InputStream input){
		File file = null;
		OutputStream output = null;
		try{
			creatSDDir(path);
			//根据路径和文件名来创建文件
			file = creatSDFile(path + fileName);
			//根据这个文件对象创建一个FileOutputStream对象,写入数据
			output = new FileOutputStream(file);
			byte buffer [] = new byte[4 * 1024];
			while((input.read(buffer)) != -1){
				output.write(buffer);
			}
			//清空缓存
			output.flush();
		}
		catch(Exception e){
			e.printStackTrace();
		}
		finally{
			try{
				output.close();
			}
			catch(Exception e){
				e.printStackTrace();
			}
		}
		return file;
	}

}
 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics