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读写中文如何避免乱码详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爵士乐队是谁画的啊?
- 下一篇: java实现序列化接口6_只有实现 Ja