android java 中文乱码_android读写中文如何避免乱码详解
前言
android读取文件中文出现乱码的原因无非就是,读取文件的字符格式与写如文件的格式不一致。因此,避免中文乱码,要在写入文件的时候按照一定的格式写入,读取的时候按照一定的格式读取。这样对应就不会出现乱码。对于其它的文本读取,在不知道何种格式的时候,可以先读取相应的文件信息,再进行相应的转码。
下面是一个避免中文读写出现乱码的类。
RWFile.java
package com.rwfile.main;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import android.os.Environment;
public class RWFile {
/**
* 判断sdcard是否存在
*
* @return
*/
public static boolean isSdcard() {
String status = Environment.getExternalStorageState();
if (status.equals(Environment.MEDIA_MOUNTED)) {
return true;
} else {
return false;
}
}
/**
* 读取文件内容
*
* @param filePathAndName
* @return
*/
public static String readFile(String filePathAndName) {
String fileContent = null;
try {
File f = new File(filePathAndName);
if (f.isFile() && f.exists()) {
fileContent = "";
InputStreamReader read = new InputStreamReader(
new FileInputStream(f), "UTF-8");
BufferedReader reader = new BufferedReader(read);
String line;
while ((line = reader.readLine()) != null) {
fileContent += line;
}
read.close();
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return fileContent;
}
/**
* 写入文件内容
*
* @param filePathAndName
* @param fileContent
*/
public static boolean writeFile(String filePathAndName, String fileContent) {
try {
File f = new File(filePathAndName);
if (!f.exists()) {
f.createNewFile();
}
// 覆盖文件
OutputStreamWriter write = new OutputStreamWriter(
new FileOutputStream(f), "UTF-8");// 覆盖文件
// 追加文件
// OutputStreamWriter write = new OutputStreamWriter(
// new FileOutputStream(f, true), "UTF-8"); // 追加文件
BufferedWriter writer = new BufferedWriter(write);
writer.write(fileContent);
writer.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}
根据这个类写的一个测试的Demo项目。
MainActivity.java
package com.rwfile.main;
import java.io.File;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText input = (EditText) findViewById(R.id.input);
final TextView content = (TextView) findViewById(R.id.content);
Button write = (Button) findViewById(R.id.write);
write.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (!RWFile.isSdcard()) {
Toast.makeText(MainActivity.this, "无法找到sdcard卡",
Toast.LENGTH_LONG).show();
} else {
String sdcard = Environment.getExternalStorageDirectory()
.toString() + File.separator;
System.out.println("write path:" + sdcard + "test.txt");
RWFile.writeFile(sdcard + "test.txt", input.getText()
.toString());
}
}
});
Button read = (Button) findViewById(R.id.read);
read.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (!RWFile.isSdcard()) {
Toast.makeText(MainActivity.this, "无法找到sdcard卡",
Toast.LENGTH_LONG).show();
} else {
String sdcard = Environment.getExternalStorageDirectory()
.toString() + File.separator;
System.out.println("read path:" + sdcard + "test.txt");
String str = RWFile.readFile(sdcard + "test.txt");
if (str == null)
Toast.makeText(MainActivity.this, "无法找到test.txt文件",
Toast.LENGTH_LONG).show();
else {
content.setText(str);
}
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
activy_main.xml
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/input" />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/chinese"
android:text="@string/chinese"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/write"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/read"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
注意:需要加入文件读写权限
避免读写中文乱码
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
android java 中文乱码_android读写中文如何避免乱码详解相关推荐
- android mvp模式例子_Android中mvp模式使用实例详解
MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一 ...
- Android基础入门教程——2.3.1 TextView(文本框)详解
Android基础入门教程--2.3.1 TextView(文本框)详解 标签(空格分隔): Android基础入门教程 本节引言: 学习完Android中的六大布局,从本节开始我们来一个个讲解And ...
- java io类库,Java利用io类库对各种文件的操作详解
Java中文网 - Java利用io类库对各种文件的操作详解 java中提供了io类库,可以轻松的用java实现对文件的各种操作.下面就来说一下如何用java来实现这些操作. 新建目录 //Strin ...
- Android Studio CPU profiler性能分析工具介绍和使用详解
Android Studio CPU profiler性能分析工具介绍和使用详解 CPU profiler介绍 Android Studio CPU 性能剖析器可实时检查应用的 CPU 使用率和线程活 ...
- android自定义圆角进度条,Android自定义进度条的圆角横向进度条实例详解
1.本文将向你介绍自定义进度条的写法,比较简单,但还是有些知识点是需要注意的: invalidate()方法 RectF方法的应用 onMeasure方法的应用 2.原理 画3层圆角矩形,底层为黑色, ...
- Java中print、printf、println的区别 详解
Java中print.printf.println的区别详解 printf主要是继承了C语言的printf的一些特性,可以进行格式化输出 print就是一般的标准输出,但是不换行 println和pr ...
- java 三种将list转换为map的方法详解
这篇文章主要介绍了java 三种将list转换为map的方法详解的相关资料,需要的朋友可以参考下 java 三种将list转换为map的方法详解 在本文中,介绍三种将list转换为map的方法: 1) ...
- Android四大组件之——Activity的生命周期(图文详解)
转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai 联系方式:JohnTsai.Work@gmail.com [Andro ...
- Java生产环境下性能监控与调优详解 大纲 学习感悟
Java生产环境下性能监控与调优详解 生产环境发生了内存溢出如何处理? 生产环境应该给服务器分配多少内存合适? 如何对垃圾收集器的性能进行调优? 4.生产环境CPU负载飙高该如何处理? 5.生产环境应 ...
最新文章
- 基于点云的机器人抓取识别综述
- note同步不及时 one_你的生活一团糟,就是因为不懂得管理
- linux下挂载U盘过程
- jQueryui autocomplete使用示例
- academic division at cssa
- Spring3 @ResponseBody注解引起头部Accept-Charset过大
- Windows、Linux系统安装JDK配置Java环境变量
- Android技巧分享——Android开发超好用工具吐血推荐 转载
- 【java8新特性】——Optional详解(三)
- 【23】蔡高厅老师 - 高等数学下阅读笔记 - 重积分 - 直角坐标系下(下)23 - 27
- windows 64 搭建RabbitMQ环境
- IDEA中添加Tomcat配置,Run/Debug Configurations中没有Tomcat选项
- P-Associated-URI
- pywin32下载python3.6_pywin32 py3.7下载
- malloc.h头文件以及malloc函数
- 基于SSM的企业人事管理系统
- Grasshopper 二次开发 (C#) Part 1 - Introductions to the C# Coding in Grasshopper
- x5650服务器装系统,笔记本处理器天梯图,小猪教您最新笔记本显卡天梯图
- Remove 以及dorp做实验验证MongoDB删除文档后索引是否会自动删除
- html网页背景图片 菜鸟教程,CSS3 背景
热门文章
- pytorch numpy 数据类型转换
- NLP进阶之(七)膨胀卷积神经网络
- 精选Pycharm里6大神器插件
- tensorflow 学习笔记-- tf.reduce_max、tf.sequence_mask
- LeetCode简单题之设计 Goal 解析器
- 边端云处理器系列技术参数
- VTA:深度学习加速器堆栈
- C++ 类模板的使用
- Android shape 绘制左右 或者上下的渐变色
- This version of Android Studio cannot open this project, please retry with Android Studio 3.5 or new