分别用字节流和字符流接收信息(处理中文乱码)

 

一,首先创建文件showMsg.txt,并设置编码为UTF-8,运行以下代码即可。

package com.clogi.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

public class TestMsg {

 public static void main(String[] args) {
  
  FileOutputStream fos = null;
  File file = null;
  try {
   file = new File("E://showMsg.txt");
   if(file.exists()){
    file.delete();
   }
   fos = new FileOutputStream(file,true);
      byte[] byt = new byte[1024];
   StringBuffer strBuf = new StringBuffer();
   strBuf.append("盖茨留给职场工作者的十句精言警句:");
   strBuf.append("1. 社会充满不公平现象。你先不要想去改造它,只能先适应它。(因为你管不了它)" +
     "2. 世界不会在意你的自尊,人们看的只是你的成就。在你没有成就以前,切勿过分强调自尊。(因为你越强调自尊,越对你不利)");
   String str = strBuf.toString();
   byt = str.getBytes("UTF-8");//这个地方设置往文件中写入的内容的编码格式是UTF-8
   fos.write(byt);
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }finally{
   if(null != fos){
    try {
     fos.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
  
 }
}

二。E://showMsg.txt这个已经创建。现在我们要在程序中读取这个文件里的内容。我写了2种读取方式,虽然都很简单,写下来是为了加深印象。

 

1.以字符流的形式接收信息

 

package com.clogi.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

public class ShowMsg {

 /*
  * 以字符流的形式接收信息
  */
 
 public static void main(String[] args) {
  FileInputStream fis = null;
  BufferedReader br = null;
  try {
   
   //要从文件中读取内容,其编码格式必须与内容写入时的编码格式一样.
   //例如写入时指定的编码是UTF-8,所以在这个地方读取内容的时候也应该是UTF-8.
   br = new BufferedReader(new InputStreamReader(
     new FileInputStream(new File("E://showMsg.txt")),"UTF-8"));
   
   String strs = null;
   String str = null;
   StringBuffer sbf = new StringBuffer();
   while(br.read()!= -1){
    sbf.append(br.readLine());
    sbf.append("/n");//换行
   }
   str = sbf.toString();
   byte[] bytes = str.getBytes();//如果在这个地方指定编码格式不起作用。最好是在读取流的时候(例如上面)指定编码。
   strs = new String(bytes);
   
   System.out.println(strs);
   
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (null != fis) {
    try {
     fis.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }
}
运行这个main()方法就可以看到控制台上打印信息了。

 

2.以字节流的形式接收信息。

 

package com.clogi.test;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class ShowMsgBuf {

 /*
  * 以字节流的形式接收信息。
  * 值得注意的是,你在设置编码格式时必须和要读取的文件的编码一样,这样才不会出现乱码。
  */
 public static void main(String[] args) {

  BufferedInputStream bis = null;
  byte[] by = new byte[10240000];//长度可根据内容长度来适当加大或减小。
  try {
   bis = new BufferedInputStream(new FileInputStream(new File(
     "E://showMsg.txt")));//读取E://bug.txt这个文件。
   int byint = -1;
   int w = 0;
   while ((byint = bis.read()) != -1) {
    by[w] = (byte) byint;//将读取的整型转换为byte类型,并将此字节放入字节数组中。
    w++;
   }
   String strmsg = new String(by, "UTF-8");//这步很重要,将字节数组转换为字符串并指定编码。
   String returnMsg = strmsg.trim();//去掉字符串后面的空格,以免出现因字节数组未填满而使用空格代替。
   System.out.println(returnMsg);
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (null != bis) {
    try {
     bis.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }

 }

}
运行这个main()方法也同样可以看到控制台上打印的信息了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值