码迷,mamicode.com
首页 > 其他好文 > 详细

IO流(二)字符流

时间:2015-08-09 23:52:04      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

1.字符流:在字节流的基础上添加了编码机制。很大程度上和字节流操作一样的,字符流只能操作文本类文件,准确的说应该是纯文本类文件。例如.txt,.java,.cpp,.html等

                   编码:每一个国家都有自己的编码,编码不一致往往导致的结果就是!!乱码!!。中国编码的编码:gbk

                            gbk:英文字母:1个字节,中文:2个字节,系统的默认编码。

                            unicode:统一编码。中文还是英文字母都是占2个字节。

                            utf-8: 国际编码。英文占1个字节,中文占3个字节。

                            文件是用什么编码来写的,那么就用什么编码来读取。最常用的编码是gbk和utf-8.一般的情况下,都设置为utf-8.(还有其他的很多编码:例如GB2312,big5等等)。如果想测试是否像上面所说那么多个字节的话,建议使用Notepad2文本软件,体积小功能强!(似乎再买广告了。。。)

                   Reader:读取数据

                            FileReader:文件读取字符流

                            BufferedReader://带缓冲区的字符输入流

                                     readLine() ;读取一行数据

                                     LineNumberReader;带行号.通过getLineNumber()方法获取行号

技术分享
 1 import java.io.FileReader;
 2 import java.io.IOException;
 3 import java.io.LineNumberReader;
 4 
 5 /*LineNumberReader是BufferedReader的子类,
 6  * 比BufferedReader多了设置行号和获取行号的功能。
 7  * 使用LineNumberReader流读取文本文件,并打印在控制台上。
 8  * 在每行的前面添加行号。
 9  */
10 
11 public class LineNumberReaderDemo1 {
12     public static void main(String[] args) throws IOException {
13         LineNumberReader lnr = new LineNumberReader(new FileReader("e:\\io.txt"));
14         String str = null;
15         while((str = lnr.readLine()) != null){
16 //            lnr.setLineNumber(90);//设置行号
17             System.out.print(lnr.getLineNumber()+" : ");
18             System.out.println(str);
19         }
20         lnr.close();
21     }
22 }
带行号功能的字符输入流

 

                   Writer:写入数据

                            FileWrite:写入数据,记得刷新。

                            BufferedWriter://带缓冲区的字符输出流

                                     newLine():写入换行字符。

                                     write(String str):写入字符串。

/*
     * 2:用字符流复制文本文件。
     */
    public static boolean copyText(String textPath, String targetPath){
        boolean flag = false;
        if(textPath==null || textPath.trim().equals("")){
            return flag;
        }
        if(targetPath == null || targetPath.trim().equals("")){
            int end = textPath.lastIndexOf(".");
            String endStr = textPath.substring(end);//后缀名
            int index = textPath.lastIndexOf("\\");
            if(index == 0){
                index = textPath.lastIndexOf("/");
            }
            targetPath = textPath.substring(0,end)+"2"+endStr;//新文件名
        }
        
        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            //字符输入流
            FileReader fr = new FileReader(textPath);
            br = new BufferedReader(fr);
            //字符输出流
            FileWriter fw = new FileWriter(targetPath);
            bw = new BufferedWriter(fw);
            
            String str = "";
            while((str=br.readLine()) != null){
                bw.write(str);
                bw.newLine();
                bw.flush();
            }
            flag = true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try{
                bw.close();
                br.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
        return flag;
    }

 

                   转换流:可带编码格式的流

                            InputStreamReader;字节转换为字符流

技术分享
public class SystemReadDemo1 {
    
    public static void main(String[] args) throws IOException {
        //获取键盘输入
        InputStream is = System.in;
        //将字节流转换为字符流,用到InputStreamReader(InputStream in)---转换流
        InputStreamReader isr = new InputStreamReader(is,"utf-8");
        //将字符流再转为带缓冲区的字符流
        BufferedReader br = new BufferedReader(isr);
        
        String str = null;
        while(true){
            str = br.readLine();
            if("886".equals(str)){
                break;
            }
            System.out.println(str);
        }
        br.close();
    }

}
转换流示例

 

                            OutputStreamWriter ;字符流转换为字节流。

技术分享
package com.java.homework;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

/*
 * 1:获取键盘录入的数据,将数据写到文件中,但是以utf-8编码的形式写到文件中去。
 */
public class HomeWork1 {
    
    public static void main(String[] args) {
        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            br = new BufferedReader(new InputStreamReader(System.in));
            bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("e:\\aa.txt"), "utf-8"));
            
            String str = "";
            while(true){
                str = br.readLine();
                if("exit".equals(str)){
                    //可以尝试不同的编码
                    OutputStreamWriter osw = new OutputStreamWriter(System.out, "GBK");
                    BufferedWriter bw2 = new BufferedWriter(osw);
                    bw2.write("输入结束!");
                    bw2.flush();
                    break;
                }
                bw.write(str);
                bw.newLine();
                bw.flush();
            }
            
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                bw.close();
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
转换流示例二

 

IO流(二)字符流

标签:

原文地址:http://www.cnblogs.com/xinge1993/p/4716472.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!