Read/Write SD Files on Android

本文介绍了一个用于SD卡文件操作的类SDFileMan的实现及其使用方法,包括权限设置、文件初始化、读写、删除等功能。
AI助手已提取文章相关产品:

1. Add permission in AndroidManifest.xml

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

2. Use this class that i implemented

package smswatcher.cn;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

import android.content.Context;
import android.os.Environment;
import android.util.Log;

public class SDFileMan {
	private String mFolderPath="";
	private String mFileName="";
	
	public SDFileMan(String fileName){
		File sdCardDir = Environment.getExternalStorageDirectory();
		mFileName = fileName;
		try
		{
			mFolderPath = sdCardDir.getCanonicalPath() + "/SMSWatcherLogFolder/";
			Initialize();
		}catch(Exception e){}
	 }
	
	private File Initialize() throws IOException
	{
		File folder = new File(mFolderPath);
		if(!folder.exists()){
			folder.mkdirs();
		}
		
		File file = new File((GetFileFullPath()));
		if(!file.exists()){
			file.createNewFile();
		}
		return file;
	}
	
	public boolean Exists()
	{
		File file = new File((GetFileFullPath()));
		return file.exists();
	}
	
	public boolean saveAppend(String content)
	{
		try
		{
			File file = Initialize();
			FileOutputStream outputStream = new FileOutputStream(file, true);
			outputStream.write(content.getBytes());
			outputStream.close();
			return true;
		}
		catch(Exception e)
		{
			return false;
		}
	}
	
	public boolean deleteFile()
	{
		try
		{
			File file = new File((GetFileFullPath()));
			if(file.exists()){
				file.delete();
			}
			return true;
		}
		catch(Exception e)
		{
			return false;
		}
	}
	
	public boolean saveAppendLine(String content)
	{
		byte[] c = new byte[2];
		c[0]=0x0d;
		c[1]=0x0a;
		String c_string = new String(c);
		return saveAppend(content + c_string);
	}
	
	public String readFile()  
    {  
		try
		{
			File file = new File(GetFileFullPath());
	        //获得输入流  
	        FileInputStream inStream = new FileInputStream(file);
	        //new一个缓冲区  
	        byte[] buffer = new byte[1024];  
	        int len = 0;  
	        //使用ByteArrayOutputStream类来处理输出流  
	        ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
	        while( (len = inStream.read(buffer))!= -1)  
	        {  
	            //写入数据  
	            outStream.write(buffer, 0, len);  
	        }  
	        //得到文件的二进制数据  
	        byte[] data = outStream.toByteArray();  
	        //关闭流  
	        outStream.close();  
	        inStream.close();  
	        return new String(data);
		}
		catch(Exception e)
		{
			return null;
		}
    }
	
	public long getFileUpdateTime()
	{
		File f = new File(GetFileFullPath());
		if(f.exists())
			return f.lastModified();
		else
			return -1;
	}
	
	private String GetFileFullPath()
	{
		return mFolderPath + mFileName;
	}
}



3. Usage:

SDFileMan mFileMan= new SDFileMan("My.log");
boolean flag = mFileMan.saveAppendLine("哈哈啊哈哈");


您可能感兴趣的与本文相关内容

03-21 23:30:13.628 1000 2675 2719 I ActivityManager: Start proc 28941:system/u14s1000 for broadcast {com.android.server.telecom/com.android.server.telecom.components.AppUninstallBroadcastReceiver} 03-21 23:30:13.630 1000 3393 3393 D AolSceneNotifer: updateScreenState Screen INTERNAL on 03-21 23:30:13.631 1410212 28828 28828 W ContextImpl: Failed to ensure /data/user_de/0/com.google.android.permissioncontroller/files: mkdir failed: ENOENT (No such file or directory) 03-21 23:30:13.631 1000 3393 3393 D AolSceneNotifer: updateRotationState Screen INTERNAL USB_TOWARD_DOWN 03-21 23:30:13.632 1410212 28828 28828 W ContextImpl: Failed to ensure /data/user_de/0/com.google.android.permissioncontroller/files: mkdir failed: ENOENT (No such file or directory) 03-21 23:30:13.632 1410212 28828 28828 W FileUtils: Failed to chmod(/data/user_de/0/com.google.android.permissioncontroller/files): android.system.ErrnoException: chmod failed: ENOENT (No such file or directory) 03-21 23:30:13.633 1410212 28828 28828 E LocationAccessCheck: Could not write packages_already_notified_location_access 03-21 23:30:13.633 1410212 28828 28828 E LocationAccessCheck: java.io.FileNotFoundException: /data/user_de/0/com.google.android.permissioncontroller/files/packages_already_notified_location_access: open failed: ENOENT (No such file or directory) 03-21 23:30:13.633 1410212 28828 28828 E LocationAccessCheck: at libcore.io.IoBridge.open(IoBridge.java:574) 03-21 23:30:13.633 1410212 28828 28828 E LocationAccessCheck: at java.io.FileOutputStream.<init>(FileOutputStream.java:259) 03-21 23:30:13.633 1410212 28828 28828 E LocationAccessCheck: at android.app.ContextImpl.openFileOutput(ContextImpl.java:795) 03-21 23:30:13.633 1410212 28828 28828 E LocationAccessCheck: at com.android.permissioncontroller.permission.service.LocationAccessCheck.persistAlreadyNotifiedPackagesLocked(LocationAccessCheck.java:322) 03-21 23:30:13.633 1410212 28828 28828 E LocationAccessCheck: at com.android.permission
03-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值