zoukankan      html  css  js  c++  java
  • 【Android】【转】文件保存与读取

    原文地址: http://tdq222.iteye.com/blog/701161

    注: 在Activity中有 getFileDir() 和 getCacheDir(); 方法可以获得当前的手机自带的存储空间中的当前包文件的路径
    getFileDir() ----- /data/data/cn.xxx.xxx(当前包)/files
    getCacheDir() ----- /data/data/cn.xxx.xxx(当前包)/cache

    1. 编写文件读取与写入功能实现类 FileService
    
    	package cn.android.service;
    
    	import java.io.ByteArrayOutputStream;
    	import java.io.FileInputStream;
    	import java.io.FileOutputStream;
    
    	import android.content.Context;
    	import android.util.Log;
    
    	/**
    	 * 文件保存与读取功能实现类
    	 * @author Administrator
    	 *
    	 * 2010-6-28 下午08:15:18
    	 */
    	public class FileService {
    		public static final String TAG = "FileService";
    		private Context context;
    
    		//得到传入的上下文对象的引用
    		public FileService(Context context) {
    			this.context = context;
    		}
    
    		/**
    		 * 保存文件
    		 * 
    		 * @param fileName 文件名
    		 * @param content  文件内容
    		 * @throws Exception
    		 */
    		public void save(String fileName, String content) throws Exception {
    
    			// 由于页面输入的都是文本信息,所以当文件名不是以.txt后缀名结尾时,自动加上.txt后缀
    			if (!fileName.endsWith(".txt")) {
    				fileName = fileName + ".txt";
    			}
    			
    			byte[] buf = fileName.getBytes("iso8859-1");
    			
    			Log.e(TAG, new String(buf,"utf-8"));
    			
    			fileName = new String(buf,"utf-8");
    			
    			Log.e(TAG, fileName);
    			
    			// Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
    			// Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
    			// Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
    			// MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
    			// 如果希望文件被其他应用读和写,可以传入:
    			// openFileOutput("output.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
    
    			FileOutputStream fos = context.openFileOutput(fileName, context.MODE_PRIVATE);
    			fos.write(content.getBytes());
    			fos.close();
    		}
    
    		/**
    		 * 读取文件内容
    		 * 
    		 * @param fileName 文件名
    		 * @return 文件内容
    		 * @throws Exception
    		 */
    		public String read(String fileName) throws Exception {
    
    			// 由于页面输入的都是文本信息,所以当文件名不是以.txt后缀名结尾时,自动加上.txt后缀
    			if (!fileName.endsWith(".txt")) {
    				fileName = fileName + ".txt";
    			}
    
    			FileInputStream fis = context.openFileInput(fileName);
    			ByteArrayOutputStream baos = new ByteArrayOutputStream();
    
    			byte[] buf = new byte[1024];
    			int len = 0;
    
    			//将读取后的数据放置在内存中---ByteArrayOutputStream
    			while ((len = fis.read(buf)) != -1) {
    				baos.write(buf, 0, len);
    			}
    
    			fis.close();
    			baos.close();
    
    			//返回内存中存储的数据
    			return baos.toString();
    
    		}
    
    	}
    
    2. 编写Activity类:
    	package cn.android.test;
    
    	import android.app.Activity;
    	import android.os.Bundle;
    	import android.util.Log;
    	import android.view.View;
    	import android.widget.Button;
    	import android.widget.EditText;
    	import android.widget.Toast;
    	import cn.android.service.FileService;
    
    	public class TestAndroidActivity extends Activity {
    	    /** Called when the activity is first created. */
    		
    		//得到FileService对象
    		private FileService fileService = new FileService(this);
    		//定义视图中的filename输入框对象
    		private EditText fileNameText;
    		//定义视图中的contentText输入框对象
    		private EditText contentText;
    		//定义一个土司提示对象
    		private Toast toast;
    
    		
    	    @Override
    	    public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    	      
    		//得到视图中的两个输入框和两个按钮的对象引用
    		Button button = (Button)this.findViewById(R.id.button);
    		Button read = (Button)this.findViewById(R.id.read);
    		fileNameText = (EditText) this.findViewById(R.id.filename);
    		contentText = (EditText) this.findViewById(R.id.content);
    		
    		//为保存按钮添加保存事件
    		button.setOnClickListener(new View.OnClickListener() {
    				@Override
    				public void onClick(View v) {
    					
    					String fileName = fileNameText.getText().toString();
    					String content = contentText.getText().toString();
    					
    					//当文件名为空的时候,提示用户文件名为空,并记录日志。
    					if(isEmpty(fileName)) {
    						toast = Toast.makeText(TestAndroidActivity.this, R.string.empty_filename, Toast.LENGTH_LONG);
    						toast.setMargin(RESULT_CANCELED, 0.345f);									
    						toast.show();	
    						Log.w(fileService.TAG, "The file name is empty");
    						return;
    					}
    					
    					//当文件内容为空的时候,提示用户文件内容为空,并记录日志。
    					if(isEmpty(content)) {
    						toast = Toast.makeText(TestAndroidActivity.this, R.string.empty_content, Toast.LENGTH_LONG);
    						toast.setMargin(RESULT_CANCELED, 0.345f);									
    						toast.show();	
    						Log.w(fileService.TAG, "The file content is empty");
    						return;
    					}
    					
    					//当文件名和内容都不为空的时候,调用fileService的save方法
    					//当成功执行的时候,提示用户保存成功,并记录日志
    					//当出现异常的时候,提示用户保存失败,并记录日志
    					try {
    						fileService.save(fileName, content);
    						toast = Toast.makeText(TestAndroidActivity.this, R.string.success, Toast.LENGTH_LONG);
    						toast.setMargin(RESULT_CANCELED, 0.345f);									
    						toast.show();	
    						Log.i(fileService.TAG, "The file save successful");
    					} catch (Exception e) {
    						toast = Toast.makeText(TestAndroidActivity.this, R.string.fail, Toast.LENGTH_LONG);
    						toast.setMargin(RESULT_CANCELED, 0.345f);									
    						toast.show();	
    						Log.e(fileService.TAG, "The file save failed");
    					}
    					
    				}
    		});
    		
    		
    		//为读取按钮添加读取事件
    		read.setOnClickListener(new View.OnClickListener() {
    				@Override
    				public void onClick(View v) {
    					
    					//得到文件名输入框中的值
    					String fileName = fileNameText.getText().toString();
    					
    					//如果文件名为空,则提示用户输入文件名,并记录日志
    					if(isEmpty(fileName)) {
    						toast = Toast.makeText(TestAndroidActivity.this, R.string.empty_filename, Toast.LENGTH_LONG);
    						toast.setMargin(RESULT_CANCELED, 0.345f);									
    						toast.show();	
    						Log.w(fileService.TAG, "The file name is empty");
    						return;
    					}
    					
    					//调用fileService的read方法,并将读取出来的内容放入到文本内容输入框里面
    					//如果成功执行,提示用户读取成功,并记录日志。
    					//如果出现异常信息(例:文件不存在),提示用户读取失败,并记录日志。
    					try {
    						contentText.setText(fileService.read(fileName));
    						toast = Toast.makeText(TestAndroidActivity.this, R.string.read_success, Toast.LENGTH_LONG);
    						toast.setMargin(RESULT_CANCELED, 0.345f);									
    						toast.show();	
    						Log.i(fileService.TAG, "The file read successful");
    					} catch (Exception e) {
    						toast = Toast.makeText(TestAndroidActivity.this, R.string.read_fail, Toast.LENGTH_LONG);
    						toast.setMargin(RESULT_CANCELED, 0.345f);									
    						toast.show();	
    						Log.e(fileService.TAG, "The file read failed");
    					}
    				}
    		});
    		
    		
    	    }
    	    
    	    //编写一个isEmpty方法,判断字符串是否为空
    	    private boolean isEmpty(String s) {
    		if(s == null || "".equals(s.trim())) {
    			return true;
    		}
    		return false;
    	    }
    	    
    	}
     
    作者:风倾清凌
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    14.Java基础_函数/函数重载/参数传递
    98. 验证二叉搜索树(深搜)
    13.Java基础_数组内存图
    12Java基础_数组定义格式/动态初始化/静态初始化
    计算几何基础
    11.Java基础_IDEA常用快捷键
    Add Two Numbers
    Two Sum
    登录界面id属性的使用
    系统查看
  • 原文地址:https://www.cnblogs.com/Amandaliu/p/2475518.html
Copyright © 2011-2022 走看看