zoukankan      html  css  js  c++  java
  • 使用字符流读写数据

    -------------siwuxie095

       

       

       

       

       

       

    工程名:TestRWCharStream

    包名:com.siwuxie095.charstream

    类名:RWByCharStream.java

       

       

    打开资源管理器,在工程 TestRWCharStream 文件夹下,放入

    一个文本:java.txt

       

    java.txt 的内容:

       

     

       

       

    工程结构目录如下:

       

       

       

       

       

       

    代码:

       

    package com.siwuxie095.charstream;

       

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileNotFoundException;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.io.OutputStreamWriter;

    import java.io.UnsupportedEncodingException;

       

       

    public class RWByCharStream {

       

    public static void main(String[] args) {

     

    try {

     

    //先创建一个文件对象

    File file=new File("java.txt");

    //再创建一个文件输入流(字节流),传入 file

    FileInputStream fis=new FileInputStream(file);

    //使用 InputStreamReader 将字节流转化为字符流

    //传入 fis 并指定字符集:UTF-8

    InputStreamReader isr=new InputStreamReader(fis,"UTF-8");

     

     

    //文件的输出流会自动创建文件 java_new.txt,不需要手动创建

    FileOutputStream fos=new FileOutputStream("java_new.txt");

    //在对同一个文件进行读写 对同一段数据操作时,其编码设定一定要一致

    OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");

     

     

    //使用 InputStreamReader read() 方法读取数据

    //传入 字符型数组,read()方法将数据填充到该数组

    //先创建一个字符型数组,大小指定为 100

    char input[]=new char[100];

     

    int len=0;

     

     

    //java.txt 的大小肯定大于100个字符,所以需要循环读取

    //read()的返回值是整型,如果返回-1,则读取到文件末尾

    while ((len=isr.read(input))!=-1) {

    //直接打印该字符型数组 input 会强制调用该数组的toString()方法

    //自然而然的将字符数组转换成了字符串

    //不过这种方法有瑕疵,输出的文本最后有冗余数据

    //因为在文件末尾时,读取的数据不一定能填满100个字符

    //System.out.println(input);

     

     

    //也可以使用匿名对象 new String() 一个新的字符串对象,并传入input

    //同时指定偏移量为 0(因为需要从数组的最开始获取),长度为 len

    //

    //注意:要根据读取到的实际的数据量来创建String

    //这样,读取到文件末尾时,即使当前的数组没有被填满,如只填充了30

    //创建String时也只会从这30个字符中读取,剩下的70个是之前读取的冗余数据

    //就不会再被输出了

    System.out.println(new String(input,0,len));

     

     

    //直接从数组写入到输出流中

    //传入数组,指定写入的偏移量和写入的长度

    osw.write(input,0,len);

     

     

    // 每获取一个String,就写入到输出流中

    //String str=new String(input, 0, len);

    //osw.write(str);

    }

     

    //读取完毕,关闭流

    isr.close();

    fis.close();

    osw.close();

    fos.close();

     

     

    } catch (FileNotFoundException e) {

    e.printStackTrace();

    } catch (UnsupportedEncodingException e) {

    e.printStackTrace();

    } catch (IOException e) {

    e.printStackTrace();

    }

     

    }

       

    }

       

       

    运行一览:

       

    1)没有指定偏移量和长度时:

       

    System.out.println(input);

    System.out.println(new String(input));

       

       

       

       

    (2)指定偏移量和长度后:

       

    System.out.println(new String(input,0,len));

       

       

       

       

    java_new.txt 的内容一览:

       

       

       

       

    运行后,工程结构目录一览:

       

       

       

     

       

       

       

    【made by siwuxie095】

  • 相关阅读:
    目标检测中roi的有关操作
    JavaScript高级程序设计读后感(一)
    手机app后台初学
    DTO数据传输对象
    数据库设计系列之四--ER图
    数据库设计系列之三
    数据库设计系列之二
    数据库设计系列之一
    Linux命令大全
    Linux登录密码修改
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6623881.html
Copyright © 2011-2022 走看看