前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java-IO字节流

Java-IO字节流

作者头像
DataScience
发布2020-05-07 18:37:22
8700
发布2020-05-07 18:37:22
举报
文章被收录于专栏:A2DataA2Data

3.5、IO字符流

IO流用来处理设备之间的数据传输

  • 文件复制,上传、下载文件

IO流分类

  • 输出流
    • FileWriter
  • 输入流
    • FileReader

常见的换行符:

  • Windows
    • \r\n
  • Linux
    • \n
  • Mac
    • \r

3.5.0、写数据

代码语言:java
复制
package myIo;

import java.io.FileWriter;
import java.io.IOException;

/**
 * Created by JackFeng on 2020/3/8.
 */


/*
* 需求: 往文件中写数据
*
*       写数据  -- 输出流 ---FileWriter
*
*
* */

public class FileWriterDemo {
    public static void main(String[] args) throws IOException {

        //  创建输出流对象
        //  调用系统资源创建一个文件,创建输出流对象,把输出流对象指向文件
        //  不写路径 就会在 在相对路径下创建!
//        FileWriter fw = new FileWriter("D:\\Practice\\Java\\JavaSE\\a.txt");  // 默认为false
        FileWriter fw = new FileWriter("D:\\Practice\\Java\\JavaSE\\a.txt",true); // true 为追加写入

        // 写字符串数据
//        fw.write("IO你好");
        // 数据没有直接写入 到文件中, 其实是写到了内存缓冲区
//        fw.flush(); // 刷新缓冲区

        // 释放资源  通知系统释放和该文件相关的资源

        // 写数据的几种方法
        /*
        * 1、write(String str)  写一个字符串数据
        *
        * */
        // 1
//        fw.write("abcde");

        //2
//        fw.write("abcd",1,2);

        // 3
//        fw.write(97);

        // 4 写一个数组
//        char[] chs = {'a', 'b', 'c'};
//        fw.write(chs);

        // 5
//        fw.write(chs, 0, 1);



        // 数据换行 + 数据追加写入
        // \n 可以换行,windows 没有换行 ,\r\n

        for (int i = 0; i < 10 ; i++) {
            fw.write("Hi"+i);
            fw.write("\r\n");
        }




        fw.close(); // 先刷新缓冲区。再通知系统释放资源


    }

}

3.5.1、读数据

代码语言:java
复制
package myIo;

import java.io.FileReader;
import java.io.IOException;

/**
 * Created by JackFeng on 2020/3/8.
 */



public class FileReaderDemo {
    public static void main(String[] args) throws IOException {

        // 创建输入流 对象

        FileReader fr = new FileReader("D:\\Practice\\Java\\JavaSE\\a.txt");

/*        // 读数据方法
        // 1. int read()

        // 第一次读数据
        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 ch;

        while ((ch=fr.read())!= -1){
//            System.out.println(ch);
            System.out.print((char)ch);
        }*/


        //第二种读取数据方式  一次读取一个数组的数据
        // 标准代码  效率较高

//        char[] chs = new char[5];
        char[] chs = new char[1024]; // 一般写1024 及其整数倍

        int len;
        while ((len= fr.read(chs)) != -1){
            System.out.print(new String(chs,0,len));
            // 以数组方式读入
        }


        fr.close(); // 释放资源
    }
}

3.5.2、文件复制

代码语言:java
复制
package myIo;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * Created by JackFeng on 2020/3/8.
 */



public class CopyFileDemo {

    public static void main(String[] args) throws IOException {


        // 创建输入刘对象
        FileReader fr = new FileReader("D:\\Practice\\Java\\JavaSE\\src\\myIo\\FileWriterDemo.java");

        // 创建输出流对象

        FileWriter fw = new FileWriter("Copy.java");


        //读写数据

/*        int ch;
        while ((ch=fr.read())!=-1){
            fw.write(ch);
        }*/
        char[] chs = new char[1024];
        int len;

        while ((len= fr.read(chs))!= -1){
            fw.write(chs,0,len);
        }
        


        fr.close();
        fw.close();

    }

}

3.5.3、字符缓冲流

BufferedWriter ---- 高效写入

BufferedReader --- 高效读取

不是直接传入文件,而是传入 FileWriter

特殊功能

BufferedWriter

  • Void newLine() ---- 写一个换行符,这个换行符由系统决定的

BufferedReader

  • String readLine() ---- 一次读取一行数据,但是不读取换行符
代码语言:java
复制
package myIo;

import java.io.*;

/**
 * Created by JackFeng on 2020/3/8.
 */
public class BufferedDemo {
    public static void main(String[] args) throws IOException {

        // 创建输出缓冲流对象
        BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));

        bw.write("hello world");
//        bw.flush();


        for (int i = 0; i < 10 ; i++) {
            bw.write("Hi"+i);
//            bw.write("\r\n");
            bw.newLine(); // 等同于  bw.write("\r\n");
        }

        bw.close();


        // 创建输入缓冲流对象

        BufferedReader br = new BufferedReader( new FileReader("a.txt"));


        // 一次写一个字符
/*        int ch;

        while ((ch=br.read())!= -1){
            System.out.print((char) ch);
        }*/

        // 一次读写一个数组
/*
        char[] chs = new char[1024];
        int len;
        while ((len = br.read(chs))!= -1)
//            System.out.print(chs,0,len); 这里会报错  需要 new String 构造
            System.out.println(new String(chs,0,len));


        br.close();*/


        String line;
        // br.readLine
        while((line= br.readLine())!=null){
            System.out.println(line);
        }

        br.close();


    }
}

集合数据写入文件

代码语言:java
复制
package myIo;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

/**
 * Created by JackFeng on 2020/3/8.
 */
public class ArrayListToFileTest {

    public static void main(String[] args) throws IOException {

        // 创建集合对象

        ArrayList<String> array = new ArrayList<>();

        // 给集合添加元素

        array.add("hello");
        array.add("world");
        array.add("今天是2020,三八妇女节");

        // 创建缓冲流输出对象

        BufferedWriter bw = new BufferedWriter( new FileWriter("array.txt"));

        //遍历集合写入到文件

        for (int i = 0; i <array.size() ; i++) {
            String s = array.get(i);
            bw.write(s);
            bw.newLine();  // 读取换行
            bw.flush();
        }

        bw.close();

    }

}

文件存入集合

代码语言:java
复制
package myIo;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

/**
 * Created by JackFeng on 2020/3/8.
 */
public class FileToArrayList {
    public static void main(String[] args)  throws IOException {

        // 创建输入缓冲流对象

        BufferedReader br = new BufferedReader(new FileReader("array.txt"));

        // 创建集合对象

        ArrayList<String> array = new ArrayList<String>();

        // 读取数据 每次读取一行数据, 把该行数据作为一个元素存储到集合中
        String line;

        while ((line = br.readLine())!= null){
            array.add(line);
        }
        br.close();

        //遍历集合
        for (int i = 0; i <array.size() ; i++) {
            String s = array.get(i);
            System.out.println(s);
        }



    }

}

学生管理添加升级版本

代码语言:java
复制
package myIo;

import myStudentManager.Student;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

/**
 * Created by JackFeng on 2020/3/8.
 */
public class ArratListToFileTest {
    public static void main(String[] args) throws IOException {

        ArrayList<Student> array = new ArrayList<>();

        // 写方法添加学生对象

        addStudent(array);
        addStudent(array);
        addStudent(array);

        // 创建输出缓冲流对象

        BufferedWriter bw = new BufferedWriter(new FileWriter("std.txt"));

        for (int i = 0; i <array.size() ; i++) {
            Student s = array.get(i);
            // 链式编程
            /// 姓名,年龄,。。。  采用 StringBuilder
            StringBuilder sb = new StringBuilder();

            sb.append(s.getId()).append(",").append(s.getName()).append(",").append(s.getAddress()).append(",").append(s.getAge());

            bw.write(sb.toString());  // 转化为string
            bw.newLine();  // 换行
            bw.flush(); // 刷新

        }

        bw.close();


    }

    // 添加学生

    public  static  void addStudent(ArrayList<Student> array){
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);


        // id 定义在外边 因为下边还要用
        String id;

        // 代码重复使用
        while (true){

            System.out.println("请输入 学生ID:");
//            String id = sc.nextLine();


            id = sc.nextLine();
            //判断学号是否存在
            //  定义标记默认为false
            boolean flag = false;

            for (int i = 0; i <array.size() ; i++) {

                Student s = array.get(i);

                if (s.getId().equals(id)){
                    flag = true;  // 说明学号被占用
                }

            }
            if (flag){
                System.out.println("你输入的学号已经被占用");
            }else {
                break;
            }
        }




        System.out.println("请输入 学生姓名:");
        String name = sc.nextLine();
        System.out.println("请输入 学生年龄:");
        String age = sc.nextLine();
        System.out.println("请输入 学生地址:");
        String address = sc.nextLine();

        //创建学生对象
        Student s = new Student();

        s.setId(id);
        s.setAge(age);
        s.setName(name);
        s.setAddress(address);


        // 把学生对象添进 集合
        array.add(s);
        System.out.println("学生信息添加成功====姓名为: "+s.getName());
    }



}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataScience 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3.5、IO字符流
    • IO流用来处理设备之间的数据传输
      • IO流分类
        • 常见的换行符:
        • 3.5.0、写数据
        • 3.5.1、读数据
        • 3.5.2、文件复制
        • 3.5.3、字符缓冲流
          • BufferedReader
            • 集合数据写入文件
              • 学生管理添加升级版本
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档