IO流的基础与小型项目

? IO流

对于流的描述,流是一种抽象的描述。

流的分类:

1、输入流(Input)

2、输出流(Output)

按类型分:

1、字节流(InputStream/OutputStream)

public class ReadFileByLoop {?    public static void main(String[] args) throws IOException {        // TODO Auto-generated method stub?        // 根据给定的文件路径构建一个字节输入流对象        File f = new File("C:\\Users\\lenovo\\Desktop\\培训\\试卷及答案\\1.txt");        InputStream is = new FileInputStream(f);        // 准备一个自己缓冲区        byte[] b = new byte[1024];        // 申明一个临时变量记录本次读取的真实长度        int len = 0;        while ((len = is.read(b)) != -1) {            String s = new String(b, 0, len);            System.out.println(s);        }?        // is.close();    }?}

2、字符流(Reader/Writer)

public class ReadFileByChar {?    public static void main(String[] args) throws IOException {        //创建一个File对象        File f = new File("C:\\Users\\lenovo\\Desktop\\培训\\试卷及答案\\1.txt");        //构建一个字符输入流        FileReader fr = new FileReader(f);        char[] a=new char[1024];        int len;        while((len=fr.read(a))!=-1){            String s=new String(a,0,len);            System.out.println(s);        }        fr.close();    }}

按照功能分:

1、节点流(低级流)

2、处理流(高级流)

字节流到字符流之间的流动用InputStreamReader

BufferedReader x=new BufferedReader(new InputStreamReader(System.in))

字符流到字符流之间的流动用OutputStreamWriter

对一个文件夹拷贝

public class Test {?    // 递归方法    public static void copyFile(File file, File file2) {        // 当找到目录时,创建目录        if (file.isDirectory()) {            file2.mkdir(); // 创建目录            File[] files = file.listFiles();            for (File f : files) {                // 递归                copyFile(f, new File(file2, f.getName()));            }            // 当找到文件时        } else if (file.isFile()) {            File f = new File(file2.getAbsolutePath());            try {                f.createNewFile();                copyDatas(file.getAbsolutePath(), f.getAbsolutePath());            } catch (IOException e) {                e.printStackTrace();            }        }    }?    // 复制文件数据的方法    public static void copyDatas(String filePath, String filePath1) {        FileInputStream fis = null;        FileOutputStream fos = null;        try {            // 字节流            fis = new FileInputStream(filePath);            fos = new FileOutputStream(filePath1);            byte[] buffer = new byte[1024];            while (true) {                int temp = fis.read(buffer, 0, buffer.length);                if (temp == -1) {                    break;                } else {                    fos.write(buffer, 0, temp);                }            }        } catch (IOException e) {            System.out.println(e);        } finally {            try {                fis.close();                fos.close();            } catch (IOException e) {                System.out.println(e);            }        }    }?    public static void main(String args[]) {        File file = new File("D:\\大学文件管理");        File file2 = new File("D:\\1");        copyFile(file, file2);    }}

对象序列化

对象序列化是一种用于在文件或者各种其他输入输出设备中存储java对象的机制,通过将实现过序列化结构的对象存储到指定的输出源,可以完整的保存对象数据;对象序列化机制一般常用于大型项目中的缓存技术,以缓存经常需要使用到的对象数据;java中实现对象序列化通常包含两种方式:

  1. 实现Serializable接口
  2. 实现Externalizable接口

完成对象序列化的过程必须包含以下步骤:

  1. 需要完成序列化的对象对应的类必须实现Serializable接口
  2. 通过对象输出流将对象存储到指定的输出源(文件,网络)中(通过ObjectOutputStream)

例子:

输入三个成绩,语数外三个科目的成绩:按照总成绩存到文件夹,在控制台查看

?public class Student implements Serializable{?    /**     *      */    private static final long serialVersionUID = 1L;    private int chinese;    private int math;    private int english;    private int sorce;

public Student() {        // TODO Auto-generated constructor stub    }    public Student(int chinese, int math, int english) {        super();        this.chinese = chinese;        this.math = math;        this.english = english;        this.sorce=chinese+english+math;    }    public int getSorce() {        return sorce;    }    public int getChinese() {        return chinese;    }    public void setChinese(int chinese) {        this.chinese = chinese;    }    public int getMath() {        return math;    }    public void setMath(int math) {        this.math = math;    }    public int getEnglish() {        return english;    }    public void setEnglish(int english) {        this.english = english;    }    @Override    public String toString() {        return "Student 语文=" + chinese + ", 数学=" + math + ", 英语=" + english + ", 总分=" + sorce + "]";    }

}??????package com.softeem.Objects;?import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.Comparator;import java.util.List;import java.util.Scanner;?public class StudentTest {    ArrayList<Student> list = new ArrayList<>();    Student stu = new Student();?    public void scanner() {        Scanner sc = new Scanner(System.in);        System.out.println("语文成绩:");        int a = sc.nextInt();        System.out.println("数学成绩:");        int b = sc.nextInt();        System.out.println("英语成绩:");        int c = sc.nextInt();        Student stu = new Student(a, b, c);        list.add(stu);        System.out.println("添加成功!");    }?    public void select() {        for (Student s : list) {            System.out.println(s);        }?    }?    public void copy() throws IOException, ClassNotFoundException {        list.sort(new Comparator<Student>() {            @Override            public int compare(Student x, Student y) {                // TODO Auto-generated method stub                return x.getSorce() - y.getSorce();            }    });OutputStream os = new FileOutputStream("ok.txt");ObjectOutputStream oos = new ObjectOutputStream(os);oos.writeObject(list);oos.close();    }?private void selectCopy() throws IOException, ClassNotFoundException {InputStream is = new FileInputStream("ok.txt");ObjectInputStream ois = new ObjectInputStream(is);Object obj = ois.readObject();//ois.readLine()System.out.println(obj);    }public void pint() throws ClassNotFoundException, IOException {System.out.println("----------【1】输入学生成绩-----------");System.out.println("----------【2】学生成绩查询-----------");System.out.println("----------【3】将学生信息添加到文件中----");System.out.println("----------【4】显示文件中的信息--------");System.out.println("----------【5】退出--------");Scanner sc = new Scanner(System.in);System.out.println("请选择:");int i = sc.nextInt();switch (i) {case 1:scanner();pint();break;case 2:System.out.println("查询结果如下:");select();System.out.println("查询成功");pint();case 3:copy();pint();System.out.println("导入成功!");break;case 4:selectCopy();pint();break;case 5:System.out.println("退出成功!");break;default:System.err.println("输入错误");    }    }?

?public static void main(String[] args) throws ClassNotFoundException, IOException {new StudentTest().pint();    }}?

原文地址:https://www.cnblogs.com/danhua520tuzi/p/9392431.html

时间: 2024-11-02 10:39:30

IO流的基础与小型项目的相关文章

初识IO流之小型资源管理器

初次接触到IO流,根据书本上的知识,加上自己的摸索,发现了一些好玩的事情.(书本上的知识或多或少,有时候不足以解决我们的问题!这时候我们就应该自己去求解!!! 所以我们学习的时候要抱有探索的精神,求知若渴是帮助我们获取更多知识的一种积极的精神态度,需要保持) 小型资源管理器 该项目主要是为了加载电脑磁盘中存在的所有文件夹和文件(directory,file) 这时候我遇到了第一个问题:书本上只有将指定的磁盘设为根节点,在窗体TreeView中添加该磁盘中的文件夹 (我去,那如果我的电脑上分了几十

Java基础学习笔记二十 IO流

转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStreamWriter,这又是什么意思呢? OutputStreamWriter类 查阅OutputStreamWriter的API介绍,OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节.它的作用的就是,将字符串按照指定的编码表转成字节,

java的io流基础篇乱码的原因

1.编码的产生:我们的存储的基本单元是一个byte字节,然而人类的语言太多,无法用一个基本单元来表示,然而为了拆分或者一些相应的翻译工作,导致了编码的产生 2.常见的编码格式 ASCll :用一个字节的低7位共128个来表示,0-31表示控制字符,32-126表示打印字符, ASCll的二进制第一位也就是最高位,目的是用来做奇偶检验的,所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种.奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高

Java:IO流与文件基础

Java:IO流与文件基础 说明: 本文所有内容包含图片均为MrSaber自己编写,转载请练习我哦. 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象称作 输入流,可以向其中写入一个字节序列的对象称作 输出流. ? 这些字节序列的来源可以是:文件.网络连接.内存块等. ? 抽象类InputStream和OutputStream是构成输入/输出(I/O)的基础. ? 因为面向字节的流

黑马程序员——java基础IO流——字符流缓冲区和字节流

字符流的缓冲区 l  缓冲区的出现提高了对数据的读写效率. l  对应类 ?    BufferedWriter ?    BufferedReader l  缓冲区要结合流才可以使用. l  在流的基础上对流的功能进行了增强. 1, BufferedWriter 每次可以写入一行,缓冲区的出现是为了提高流的操作效率而出现的.所以在创建缓冲区之前,必须要先有流对象.该缓冲区中提供了一个跨平台的换行符,newLine(); /* 缓冲区的出现是为了提高流的操作效率而出现的. 所以在创建缓冲区之前,

关于Java中面向对象章节、IO 流中的重点基础知识。

一.面向对象的三大特征,以及作用. 答:面向对象的三大特征即,封装性.继承性.多态性. 其分别的作用为 : 封装作用:将数据封装起来,提高数据的安全性, 继承作用:提高代码的复用性,减少冗余代码. 多态性:应用程序不必对每个派生类进行方法调用,只需要对抽象基类处理即可,大大提高程序的复用性,可以提高可扩充性和可维护性. 二.多态中的向上转型 的作用以及向下转型使用的原因 答:在多态中向上转型的是作用是,父类的引用对象名指向子类的实体,也就是用一个抽象的基类去调用每一个派生子类,向下转型的原因为,

文件传输基础——Java IO流

第一章 文件的编码 package com.imooc.io; public class EncodeDemo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String s="欢迎你ABC"; byte[] byte1=s.getBytes(); for (byte b : byte1) { //把字节转换成16进制的方式显示 Sys

java基础篇IO流的规律

前两篇降了IO流中的字节流和字符流复制的例子,今天来总结一下IO流的规律 掌握好IO流的规律,再开发中会很好用 下面来总结一下: 1,明确源和目的 源:输入流 InputStream 和Reader 目的:输出流 OutputStream 和Writer 2,操作的数据是否是纯文本. 是:使用字符流 不是:使用字节流 3,当体系明确后,在明确要使用哪个具体的对象,通过设备来进行区分 源设备: 内存,硬盘,键盘 目的设备: 内存,硬盘,控制台 这里的源就是你想进行的操作,比如说你想从c盘复制一个文

JAVA基础-IO流(一)

一.IO流 IO流是Java为方便我们对文件的读写进行操作而提供的一种技术.按照读取写入文件的方式不同可以分为字符流和字节流,而每个流派按照功能又分为读和写.字符流读写操作的根类为Reader和Writer,其实现的常用子类分别为.写:PrintWriter.FileWriter.BufferedWriter.OutputStreamWriter(这个为转换流后边会详细说).读:BufferedReader.InputStreamReader(转换流). FileReader. 二.Reader