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
- android项目之记事本-2(文件保存与阅读)
- android项目 之 记事本(15) ----- 保存手写及绘图
- android项目 之 记事本(2)------- 添加照片
- android项目 之 记事本(1) ----- 界面设计
- android项目 之 记事本(14) ----- 手势缩放与拖拽图片
- android小项目总结之文件保存
- Android文件保存和阅读
- android文件保存和阅读
- android项目 之 记事本(4) ----- 添加画板
- android项目 之 记事本(5)----- 添加录音
- android项目 之 记事本(6)----- 添加手写
- android项目 之 记事本(11) ----- 添加数据库
- android项目之记事本-1(已上线)
- Android小项目:记事本
- Android小项目:记事本
- android项目 之 记事本(7)----- 手写功能之删除、恢复和清空
- android项目 之 记事本(8) ----- 画板功能之撤销、恢复和清空
- android项目 之 记事本(9) ----- 画板功能之橡皮擦、画笔大小和画笔颜色
- SOJ4513: 先锋看烟花 单调队列优化DP
- js闭包剖析
- 关闭Cadence Orcad Capture CIS原理图弹出startpage页面的方法
- 用Java语言求证 辗转相除法
- 新人千万不要在 Windows 上使用 Ruby on Rails
- android项目之记事本-2(文件保存与阅读)
- MongoDB 基本使用
- java容器基本概念
- Python模拟用户提交订单
- 96. Unique Binary Search Trees
- jsp页面通过request传值
- 洛谷 P1314 聪明的质监员
- 一个三十岁程序员在深圳的经历(一)
- 小米手机保护套自动锁屏功能