File操作-InputStreamReader/Writer(转换器)

简介: File操作-InputStreamReader/Writer(转换器)

前面所举例的InputStream,OutputStream,是针对字节流进行操作的。


FileReader,FileWriter是针对字符流进行操作的。


另外在写入的时候并未提供编码格式,极易造成中文乱码。


InputStreamReader/OutputStreamWriter,为字节流与字符流的转换提供了途径。

实例一:读取每个字节转为char

    @Test
    public void testInputStreamReader(){
        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            //此时文件是在项目下,即contextPath/
            File file = new File("test1.txt");
            File file1 = new File("test2.txt");
            //输入流
            InputStream in  = new FileInputStream(file);
            //输入转换器
            InputStreamReader iReader = new InputStreamReader(in, "UTF-8");
            // 输出流
            OutputStream out = new FileOutputStream(file1);
            //输出转换器
            OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8");
            //缓冲包装
            br = new BufferedReader(iReader);
            bw = new BufferedWriter(osw);
            byte[] c = new byte[1024];
            int len;
            while((len = br.read())!= -1){
                System.out.println("ASCII:"+len+","+"vlaue :"+(char)len);
                bw.write(len);
            }
        }catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(bw != null){
                try {
                    bw.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(br != null){
                try {
                    br.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

实例二:读入到字符数组

    @Test
    public void testInputStreamReader(){
        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            //此时文件是在项目下,即contextPath/
            File file = new File("test1.txt");
            File file1 = new File("test2.txt");
            //输入流
            InputStream in  = new FileInputStream(file);
            //输入转换器
            InputStreamReader iReader = new InputStreamReader(in, "UTF-8");
            // 输出流
            OutputStream out = new FileOutputStream(file1);
            //输出转换器
            OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8");
            //缓冲包装
            br = new BufferedReader(iReader);
            bw = new BufferedWriter(osw);
            /*读入到字符数组*/
            char[] c = new char[1024];
            int len;
            while((len = br.read(c))!= -1){
                System.out.println("字符长度:"+len);
                String str = new String(c, 0, len);
                System.out.print(str);
                bw.write(c, 0, len);
            }
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(bw != null){
                try {
                    bw.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(br != null){
                try {
                    br.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

实例三:每次读取一行

    @Test
    public void testInputStreamReader(){
        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            //此时文件是在项目下,即contextPath/
            File file = new File("test1.txt");
            File file1 = new File("test2.txt");
            //输入流
            InputStream in  = new FileInputStream(file);
            //输入转换器
            InputStreamReader iReader = new InputStreamReader(in, "UTF-8");
            // 输出流
            OutputStream out = new FileOutputStream(file1);
            //输出转换器
            OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8");
            //缓冲包装
            br = new BufferedReader(iReader);
            bw = new BufferedWriter(osw);
            /*每次读取一行*/
            String str;
            while((str = br.readLine()) != null){
                System.out.println(str);
                bw.write(str + "\n");
                bw.newLine();
                bw.flush();
            }
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(bw != null){
                try {
                    bw.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(br != null){
                try {
                    br.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
目录
相关文章
|
6天前
day17-缓冲流&转换流&序列化流&打印流&Properties(三)
day17-缓冲流&转换流&序列化流&打印流&Properties
42 1
|
6天前
|
存储
day17-缓冲流&转换流&序列化流&打印流&Properties(一)
day17-缓冲流&转换流&序列化流&打印流&Properties
55 0
|
9月前
|
存储 Java
文件IO之 File 类和 InputStream, OutputStream 的用法(一)
文件IO之 File 类和 InputStream, OutputStream 的用法
56 0
|
9月前
|
索引
文件IO之 File 类和 InputStream, OutputStream 的用法(三)
文件IO之 File 类和 InputStream, OutputStream 的用法
66 0
|
5月前
|
Java
【文件IO】 File类的用法和 InputStream OutputStream 的用法
【文件IO】 File类的用法和 InputStream OutputStream 的用法
|
6月前
File操作-FileReader(FileWriter)/BufferedReader(Writer)
File操作-FileReader(FileWriter)/BufferedReader(Writer)
26 0
|
9月前
|
Java
文件IO之 File 类和 InputStream, OutputStream 的用法(二)
文件IO之 File 类和 InputStream, OutputStream 的用法
62 0
|
10月前
|
存储 编解码 缓存
InputStream、OutputStream、Reader、Writer的基本概念和使用方法
InputStream、OutputStream、Reader、Writer的基本概念和使用方法
97 0
|
11月前
|
存储 缓存 Java
【Java I/O 流】字符输入输出流:Reader 和 Writer
前面我们已经学会了字节流的使用,本篇开始介绍字符流。字符输入输出流是所有字符流的超类,学会了它们的方法,也基本上掌握了其子类的使用了。
83 0
|
11月前
|
存储 缓存 Java
【Java I/O 流】文件字符输入输出流:FileReader 和 FileWriter
本篇文章主要讲述“文件字符输入流”和“文件字符输出流”两个类的使用,并列举了一些读写案例,帮助学习。
393 0