`
suuu
  • 浏览: 16942 次
  • 性别: 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;
	}

}
 

 

分享到:
评论

相关推荐

    android 写入SDcard 文件

    在Android平台上,对SDCard(外部存储)进行文件操作是应用程序与用户交互的重要部分,尤其对于需要存储大量数据或媒体文件的应用来说。本教程将详细解释如何在Android中读写SDCard文件,非常适合初学者入门。 首先...

    Log输出到sdcard

    在Android开发中,日志(Log)是调试和问题排查的重要工具。`Logcat`是Android系统提供的一个命令行工具,用于收集运行时的日志信息。这篇内容将深入讲解如何将`Log`输出到SD卡,以便于日后按日期查看和分析。 一、...

    android 文件操作 输入流对象 输出流对象 SDCard读写

    这里主要关注的是如何使用输入流对象(InputStream)和输出流对象(OutputStream)进行SDCard(外部存储卡)的读写操作。下面将详细介绍这些概念和实践中的应用。 1. **Android 文件操作**: Android 提供了丰富的...

    Android写入SDCard

    ### Android写入SDCard知识点详解 #### 一、概述 在Android开发中,根据应用程序的需求,数据存储方式有很多种选择,包括文件存储、SQLite数据库、SharedPreferences等。其中,文件存储是一种非常基础也是非常重要...

    Android代码-LogCollector:一个收集 app 输出日志的工具

    一个收集 app 输出日志的工具,输出文件:模拟器是 /sdcard/Android/data/项目包名/cache/,真机是 /Android/data/项目包名/cache/,里面的 crash 目录是崩溃日志,log 目录是 logcat 日志。 如何使用 在 module ...

    java学习细节 android学习笔记

    根据给定的信息,我们可以从Java和Android学习笔记中提取出一系列重要的知识点,下面将逐一进行详细解释。 ### Java基础知识 #### 1. 命令行基础操作 - **`javacmd`**: 这个命令是Java命令行工具的一部分,用于...

    android 读取外置SDCard

    在PicoSDCardSample这样的示例项目中,通常会包含完整的代码示例,展示如何实现上述操作,包括错误处理和权限管理,这对于学习和理解如何在Android中操作外置SDCard非常有帮助。开发者应仔细研究这些示例,以更好地...

    用LogWriter将Android应用程序的日志信息写入文件

    `LogWriter`是一个自定义工具,用于将Android应用的日志信息写入本地文件,而不是仅仅依赖于系统的`Logcat`。这使得开发者能够更方便地保存、查看和分析日志数据,尤其是在设备无法连接到电脑或需要离线分析的情况下...

    Android应用源码SdCard读写文件实例

    在Android平台上,对SDCard(外部存储)进行文件读写是常见的操作,尤其对于需要存储用户数据或资源的应用来说更是必不可少。本实例将探讨如何在Android应用中实现SdCard的读写功能。 首先,我们需要了解Android对...

    Android数据存储之Sdcard

    Sdcard(Secure Digital Card)是Android设备常用的外部存储器,用于存放大量的非敏感数据,如媒体文件、应用缓存等。本篇文章将深入探讨Android如何在Sdcard上进行数据存储,并通过一个简单的示例来说明。 首先,...

    Android 平台上SDCard的自动mount的解决方法

    ### Android平台上SDCard的自动mount的解决方法 在Android设备中,SDCard(Secure Digital Card)作为外部存储介质被广泛使用。为了使Android系统能够自动识别并挂载SDCard,需要进行一系列配置与调试工作。本文将...

    android中sdcard的读写.doc

    ### Android中SDCard的读写操作详解 #### 一、SDCard访问概述 在Android开发过程中,对于外部存储(如SDCard)的读写是非常常见的需求。本文将详细介绍如何在Android应用中对SDCard进行读写操作,包括获取缓存目录...

    android mars视频代码 download源码 文件读写至SDCard

    www.mars-droid.com/Android开发视频教程 代码 源码 mars老师讲课 android 视频源码 文件读写至SDCard download(在此特别感谢mars的无私奉献,此代码为跟随视频边学边做的)

    android往手机内存和sdcard卡上存储数据

    在Android应用开发中,存储数据是一项基础且重要的任务。这篇内容将详细讲解如何在手机内存以及SDCard(外部存储)上进行数据存储,并提供了一段经过封装的代码,方便开发者直接应用于实际项目。 首先,我们要了解...

    Android应用源码SdCard读写文件实例.zip

    总结来说,Android应用源码实例展示了如何在用户授权的前提下,使用Java I/O流进行SDCard的读写操作。这包括获取外部存储路径、创建文件、写入和读取数据。在实际开发中,应确保遵循最佳实践,如处理异常、释放资源...

    android-logging-log4j-1.0.3.jar

    Log4j是一个广泛应用于Java环境的日志框架,而当我们谈论`android-logging-log4j-1.0.3.jar`时,它便是Log4j的一个版本,专门针对Android平台进行优化,使得在Android系统中可以方便地将日志信息写入SD卡。...

    Android学习笔记

    【Android 学习笔记】初学者入门指南 在学习Android开发的过程中,首先需要搭建一个完整的开发环境。在Windows操作系统上,以下步骤可以帮助你快速构建起一个功能完备的Android开发环境。 1. 安装JDK (Java ...

    android学习笔记

    ### Android学习笔记知识点详解 #### 一、Activity的Task Affinity与启动模式 **知识点1:Task Affinity的理解** 在Android应用中,每个Activity都属于一个任务栈(Task)。默认情况下,同一个应用的所有Activity...

Global site tag (gtag.js) - Google Analytics