Android 获取文件以及文件夹MD5,用来做游戏程序的动态更新

package com.example.getfilemd5;

import java.io.File;
import java.io.FileInputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		File file=new File("/mnt/sdcard/version.txt");
		Log.e("MD5", getFileMD5(file));
		
		//遍历获取文件夹所有文件的MD5值
		int filecount=0;
		File fileDir=new File("mnt/sdcard/MD5");
		Map<String,String> DirMD5=getDirMD5(fileDir,true);
		for(Map.Entry<String, String> m:DirMD5.entrySet())
		{
			filecount++;
			Log.e("Path="+m.getKey()+filecount, "MD5="+m.getValue());
		}
		
	}

	//获取单个文件MD5
	public static String getFileMD5(File file) 
	{
		// TODO Auto-generated method stub
		if(!file.isFile())
		{
			return null;
		}
		MessageDigest digest=null;
		FileInputStream in=null;
		byte buffer[]=new byte[1024];
		int len;
		try
		{
			digest=MessageDigest.getInstance("MD5");
			in=new FileInputStream(file);
			while((len=in.read(buffer, 0, 1024))!=-1)
			{
				digest.update(buffer, 0, len);
			}
			in.close();
		}
		catch(Exception e)
		{
			e.printStackTrace();
			return null;
		}
		
		BigInteger bigint=new BigInteger(1,digest.digest());
		return bigint.toString(16);
	}
	
	//获取文件夹中文件的MD5值
	public static Map<String,String> getDirMD5(File file,boolean listChild)
	{
		if(!file.isDirectory())
		{
			return null;
		}
		Map<String,String> map=new HashMap<String,String>();
		String md5;
		File files[]=file.listFiles();
		for(int i=0;i<files.length;i++)
		{
			File f=files[i];
			if(f.isDirectory()&&listChild)    //如果里层还是文件夹的话,就再一次循环
			{
				map.putAll(getDirMD5(f,listChild));
			}
			else
			{
				md5=getFileMD5(f);
				if(md5!=null)
				{
					map.put(f.getPath(), md5);
				}
			}
		}
		return map;
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}


Android 获取文件以及文件夹MD5,用来做游戏程序的动态更新_第1张图片

你可能感兴趣的:(Android 获取文件以及文件夹MD5,用来做游戏程序的动态更新)