• 10.3 io流 正篇 FileReader FileWriter读写代码


    一、FileWriter

    小节:

    1)FileWriter fw = new FileWriter("a.txt",true);//表示追加写入,默认是false。正常情况:执行多次程序输出会被覆盖。写追加true后会在之前基础上写入。
    2)
    可以实现换行,但是windows系统自带的记事本打开并没有换行,这是为什么呢?因为windows识别的换行不是
    ,而是
    
     *         windows:
    
     *         linux:
    
     *         mac:
    
    3)
    //        String(char[] value):把字符数组的数据封装成字符串对象
    //        String s = new String(arr);
    //        System.out.println(s);
            System.out.println(new String(arr)); //通过构造方法将字符数组转换为字符串。
    4)

    1.一次写一个写字符串

    package day10_io_fileWrite_Read.write;
    /* FileWriter:
            *         FileWriter(String fileName):传递一个文件名称
            *
            * 输出流写数据的步骤:
            *         A:创建输出流对象
            *         B:调用输出流对象的写数据的方法
            *         C:释放资源
            */
    import java.io.FileWriter;
    import java.io.IOException;
    /*
    flush():刷新缓冲区。流对象还可以继续使用。
    close():先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。
    */
    
    public class FileWriterDemo01 {
        public static void main(String[] args) throws IOException {
            FileWriter fw = new FileWriter("d:\java\demo\demo001\src\day10_io_fileWrite_Read\a.txt");
            fw.write(97);//二进制转换为字符
            fw.write("
    你好");
    
            //数据没有直接写到文件,其实是写到了内存缓冲区
            fw.flush();
    
            //释放资源
            //通知系统释放和该文件相关的资源
            fw.close();
        }
    }

    输出如下:

    2.一次写一个字符数组

    package day10_io_fileWrite_Read.write;
    
    import java.io.FileWriter;
    import java.io.IOException;
    /*
     * void write(String str):写一个字符串数据
     * void write(String str,int index,int len):写一个字符串中的一部分数据
     * void write(int ch):写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值。'a',97
                  由小到大转换(byte、short、char-->int-->long-->float-->double) * void write(char[] chs):写一个字符数组数据 * void write(char[] chs,int index,int len):写一个字符数组的一部分数据 * * *如何实现数据的换行? * 可以实现换行,但是windows系统自带的记事本打开并没有换行,这是为什么呢?因为windows识别的换行不是 ,而是 * windows: * linux: * mac: * 如何实现数据的追加写入? * FileWriter(String fileName, boolean append)
    */ public class Fw_array02 { public static void main(String[] args) throws IOException { // FileWriter fw = new FileWriter("a.txt"); //相对路径a.txt存在于程序项目的同级目录下。 FileWriter fw = new FileWriter("a.txt",true);//表示追加写入,默认是false。正常情况:执行多次程序输出会被覆盖。写追加true后会在之前基础上写入。 /* fw.write("hello "); //从index1开始写到3结束 fw.write("hello",1,3); //换行 fw.write(" "); */ //写字符数组数据 char[] arr = {'a','b','c','d'}; fw.write(arr); fw.write(arr,1,2); fw.close(); } }

    输出如下:

    二、FileReader

     1.一次读取一个字符串

    package day10_io_fileWrite_Read.read;
    
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class FileReaderDemo03 {
        public static void main(String[] args) throws IOException {
            FileReader fr = new FileReader("b.txt");
    /*
            //第一次读
            int ch = fr.read();
            System.out.println(ch);//打印的是字符值
            System.out.println((char)ch);
    
            //第二次读
            ch = fr.read();
            System.out.println(ch);
            System.out.println((char)ch);//通过测试,我们知道,如果读取数据的返回值是-1的时候,就说明没有数据了,这也是我们循环的结束条件
            */
    
            //用循环来读取数据
            int ch1;
            while((ch1=fr.read())!=-1) {
                System.out.print((char)ch1); //注意print是不换行,println是换行
            }
            fr.close();
    
        }
    }

    输出如下:

    2.一次读取一个数组

    package day10_io_fileWrite_Read.read;
    
    import java.io.FileReader;
    import java.io.IOException;
    
    /*
    * 读取数组数据方法
    * */
    public class Fr_array04 {
        public static void main(String[] args) throws IOException {
    
            FileReader fr = new FileReader("c.txt");
    
            //动态初始化:数据类型[] 数组名 = new 数据类型[数组长度];
            char[] arr = new char[5]; //一次读取一个字符数组的数据,返回的是实际读取的字符个数
    
            /*
            //读取一次
            int len = fr.read(arr);
    
            System.out.println("len:"+len);
    //        String(char[] value):把字符数组的数据封装成字符串对象
    //        String s = new String(arr);
    //        System.out.println(s);
            System.out.println(new String(arr)); //通过构造方法将字符数组转换为字符串。
            System.out.println(new String(arr,1,3));
    
            fr.close();
            */
    
            //循环读取
            FileReader fr1 = new FileReader("c.txt");
            char[] arr1 = new char[5];
            int len1;
            while((len1=fr1.read(arr1))!=-1) {
                //System.out.print(new String(arr1)); //每次读5个字符,如果最后一个字符不足五个,(后面的数组覆盖之前数组)如:最后数组分3个字符,会显示3个字符+之前数组的最后两字符
            
    System.out.print(new String(arr1,0,len1)) //使用0-len1长度截掉最后多出的2个字符
    } fr1.close(); } }

    输出如下:

    文本:

    System.out.print(new String(arr1))输出:

     

    System.out.print(new String(arr1,0,len1)) 输出:

    三、copy 用io流实现cp文件

     1.一次读写一个字符

    package day10_io_fileWrite_Read.copy;
    
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    //一次读写一个字符
    //先读再写
    public class CopyDemo {
        public static void main(String[] args) throws IOException {
            FileReader fr = new FileReader("c.txt");
            FileWriter fw = new FileWriter("copy.txt");
    
    //        //读写一次
    //        System.out.println(fr.read());
    //        fw.write(97); // fw.write(fr.read());
    
            //循环读写
            int len;
            while((len=fr.read())!=-1) {
                fw.write(len);
            }
    
    
            fw.flush();
            fw.close();
            fr.close();
        }
    }

    2.一次读写一个数组

    package day10_io_fileWrite_Read.copy;
    
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class CopyArrayDemo {
        public static void main(String[] args) throws IOException {
            FileReader fr = new FileReader("c.txt");
            FileWriter fw = new FileWriter("copy1.txt");
    
            char[] arr = new char[5];
            int len;
            while((len=fr.read(arr))!=-1) {
                fw.write(arr,0,len);
           fw.flush; } fw.close(); fr.close(); } }
  • 相关阅读:
    小知识,大应用--正交向量在CDMA中的运用
    翻译:做好iPhone程序的10点建议
    解决了对多层结构一些疑惑,整理一下!
    原来是这样的——生活中的随笔
    3.14..............
    基础 - 结构
    推荐一本书《我编程,我快乐》
    基础 - 异常处理
    今天发现一个以前写的管理代码片段的程序,把源码发出来!
    VNC快速教程
  • 原文地址:https://www.cnblogs.com/longesang/p/11083476.html
Copyright © 2020-2023  润新知