android项目之记事本-2(文件保存与阅读)

来源:互联网 发布:淘宝店招图片尺寸 编辑:程序博客网 时间:2024/04/20 02:29

欢迎你继续阅读android项目实战记事本系列教程 本系列会介绍一个完整的上线项目开发过程

欢迎下载本app 如果需要源码 请加qq群 531314820  一起学习

应用下载地址: http://shouji.baidu.com/software/9544563.html 

项目架构:

版本 sdk 4.2 ,开发工具eclipse adt 

项目结构图


进入主题 输入数据保存 本版本只保留为.txt格式 后期可以扩展

主要核心功能无非就是io流是使用 我这里写了一个工具类,直接上代码吧  里面有注释

FileUtilt.java

package com.singleton.sjsb.tools;import java.io.BufferedInputStream;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.OutputStreamWriter;import java.io.Writer;import android.content.Context;import android.os.Environment;import android.widget.Toast;/** * 文件或文件夹操作  * @author singleton-zw * Date: 2014-3-5 */public class FileUtilt {private Context context;// 上下文对象,有快速得到输入流的方法public FileUtilt(Context context) {this.context = context;}/** * 把文件保存在sd 卡 * @param fileName 文件名 * @param fileContent 文件内容 * @param path 路径 * @param charset 编码格式 默认为utf-8 * @throws Exception */public void saveSdcard(String fileName, String fileContent, String path,String charset)throws Exception {// 判断sd 卡是否存在,是否读写if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {File file = new File(new File(path), fileName);//java.io.File file = new java.io.File(Environment//.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+fileName);// File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);//    File file = File.createTempFile(fileName, ".txt", storageDir);if(charset==null){FileOutputStream outStream = new FileOutputStream(file); outStream.write(fileContent.getBytes());// UTF-8outStream.close();}else{OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(file),charset);           BufferedWriter writer=new BufferedWriter(write);             writer.write(fileContent);           writer.close();  }} else {Toast.makeText(context, "没有SD卡", 1).show();}}/** * 读 操作 * @param filename 文件名 * @param path  路径 * @return charset 编码格式 */private String CHARSET="UTF-8";//默认读出编码格式public String read(String filename, String path) {CHARSET = getFilecharset(new File(path + "/"+ filename));//得到文件的编码格式//System.out.println(CHARSET+"---");try {FileInputStream inStream = new FileInputStream(new File(path + "/"+ filename));byte[] buffer = new byte[inStream.available()];inStream.read(buffer);inStream.close();return new String(buffer, CHARSET);// 转码} catch (Exception e) {e.printStackTrace();}return null;}/** * 通过下边方法获取文本文件编码格式,然后以指定的编码读取文件,就不会出现乱码(简单测试了一下,但是也不保证100%) * @param sourceFile * @return charset 编码格式 */private String getFilecharset(File sourceFile) {String charset = "GBK";byte[] first3Bytes = new byte[3];try {boolean checked = false;BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sourceFile));bis.mark(0);int read = bis.read(first3Bytes, 0, 3);if (read == -1) {return charset; // 文件编码为 ANSI} else if (first3Bytes[0] == (byte) 0xFF&& first3Bytes[1] == (byte) 0xFE) {charset = "UTF-16LE"; // 文件编码为 Unicodechecked = true;} else if (first3Bytes[0] == (byte) 0xFE&& first3Bytes[1] == (byte) 0xFF) {charset = "UTF-16BE"; // 文件编码为 Unicode big endianchecked = true;} else if (first3Bytes[0] == (byte) 0xEF&& first3Bytes[1] == (byte) 0xBB&& first3Bytes[2] == (byte) 0xBF) {charset = "UTF-8"; // 文件编码为 UTF-8checked = true;}bis.reset();if (!checked) {int loc = 0;while ((read = bis.read()) != -1) {loc++;if (read >= 0xF0)break;if (0x80 <= read && read <= 0xBF) // 单独出现BF以下的,也算是GBKbreak;if (0xC0 <= read && read <= 0xDF) {read = bis.read();if (0x80 <= read && read <= 0xBF) // 双字节 (0xC0 - 0xDF)// (0x80// - 0xBF),也可能在GB编码内continue;elsebreak;} else if (0xE0 <= read && read <= 0xEF) {// 也有可能出错,但是几率较小read = bis.read();if (0x80 <= read && read <= 0xBF) {read = bis.read();if (0x80 <= read && read <= 0xBF) {charset = "UTF-8";break;} elsebreak;} elsebreak;}}}bis.close();} catch (Exception e) {e.printStackTrace();}return charset;}}

上面就主要核心代码  文件操作 基本都是一些io操作  需要注意的是 getFilecharset 方法是阅读的时候判断文件的格式编码

接下来介绍 在主页面使用工具类 进行文件保存

主页面布局(由于注重功能的实现 就没过多的进行ui设计(好吧 本人ui做的太差  ))

主要就是一个EditText 控件

ui_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/ui_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#00000000"    android:orientation="vertical" >    <!-- 主界面 -->    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal" >        <TextView            android:id="@+id/tv_testsize"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginTop="10dp"            android:layout_weight="10"            android:text="当前字数:"            android:textSize="13sp" />        <ImageButton            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1"            android:background="@drawable/toumin"            android:onClick="ju"            android:text="diabji" />    </LinearLayout>    <EditText        android:id="@+id/neiron"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:background="#00000000"        android:gravity="top|left" />    </LinearLayout>


主要分为上下两部分 上部分显示当前字数 和 一个隐藏编辑区也就是下半部分的button

本文只介绍保存的操作  其他操作接下来视频介绍

FileUtilt service = new FileUtilt(getApplicationContext());fnei = neiron.getText().toString();// 文件名不变service.saveSdcard(filenames, fnei, savepath,null);Toast.makeText(getApplicationContext(), "保存成功", 1).show();
以上是核心代码数据保存 
如果有不懂的可联系我 

0 0