前言
成都創(chuàng)新互聯(lián)公司長期為上1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為廉江企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、做網(wǎng)站,廉江網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
android讀取文件中文出現(xiàn)亂碼的原因無非就是,讀取文件的字符格式與寫如文件的格式不一致。因此,避免中文亂碼,要在寫入文件的時候按照一定的格式寫入,讀取的時候按照一定的格式讀取。這樣對應(yīng)就不會出現(xiàn)亂碼。對于其它的文本讀取,在不知道何種格式的時候,可以先讀取相應(yīng)的文件信息,再進(jìn)行相應(yīng)的轉(zhuǎn)碼。
下面是一個避免中文讀寫出現(xiàn)亂碼的類。
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; } } /** * 讀取文件內(nèi)容 * * @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; } /** * 寫入文件內(nèi)容 * * @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; } }
根據(jù)這個類寫的一個測試的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
注意:需要加入文件讀寫權(quán)限
避免讀寫中文亂碼
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對創(chuàng)新互聯(lián)的支持。