黑马程序员_java基础_IO流

------- android培训java培训、期待与您交流!---------
IO流

一、概述

       1IO流:即InputOutput的缩写。

       2、特点:

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

             2Java对数据的操作是通过流的方式。

             3Java用于操作流的对象都在IO包中。

             4)流按操作数据分为两种:字节流和字符流。

             5)流按流向分为:输入流和输出流。

     注意:流只能操作数据,而不能操作文件。

       3IO流的常用基类:

            1)字节流的抽象基流:InputStreamOutputStream

            2)字符流的抽象基流:ReaderWriter

二、字符流
      1、简述
          

 a、字符流中的对象融合了编码表。使用的是默认的编码,即当前系统的编码。

              b、字符流只用于处理文字数据,而字节流可以处理媒体数据。

        

2、字符流的读写

             a、创建一个FileWriter对象,该对象一被初始化,就必须要明确被操作的文件。且该目录下如果已有同名文件,则同名文件将被覆盖。其         实该步就是在明确数据要存放的目的地。

            b、调用write(String s)方法,将字符串写入到流中。

           c、调用flush()方法,刷新该流的缓冲,将数据刷新到目的地中。

           d、调用close()方法,关闭流资源。但是关闭前会刷新一次内部的缓冲数据,并将数据刷新到目的地中。

     3、字符流的缓冲区——BufferedReader和BufferedWriter

            a、缓冲区的出现:提高了流的读写效率,所以在缓冲区创建前,要先创建流对象。即先将流对象初始化到构造函数中。 

            b、缓冲技术原理:此对象中封装了数组,将数据存入,再一次性取出。

            c、写入流缓冲区BufferedWriter的步骤:

             1)创建一个字符写入流对象。

                 2)为了提高字符写入流效率。加入缓冲技术。只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。

                3)调用write方法写入数据到指定文件

            4)其实关闭缓冲区,就是在关闭缓冲区中的流对象。

三、字节流

      1、概述

           a、字节流和字符流的基本操作是相同的,但字节流还可以操作其他媒体文件。

           b、由于媒体文件数据中都是以字节存储的,所以,字节流对象可直接对媒体文件的数据写入到文件中,而可以不用再进行刷流                  动作。

           c、读写字节流:InputStream   输入流(读)

                             OutputStream  输出流(写)

           d、为何不用进行刷流动作:

                 因为字节流操作的是字节,即数据的最小单位,不需要像字符流一样要进行转换为字节。所以可直接将字节数据写入到指定           文件中。

          e、InputStream特有方法:

                 int available();//返回文件中的字节个数


      2、

字节流缓冲区

            同样是提高了字节流的读写效率。

            a、读写特点:

                   read():会将字节byte型值提升为int型值

                   write():会将int型强转为byte型,即保留二进制数的最后八位。

          b、原理:将数据拷贝一部分,读取一部分,循环,直到数据全部读取完毕。


四、键盘输入

       1、标准输入输出流

            System.in:对应的标准输入设备,键盘。

            Ssytem.out:对应的是标准的输出设备,控制台。

            System.in的类型是InputStream.

           System.out的类型是PrintStream是OutputStream的子类FilterOutputStream的子类。

      2、整行录入

                 当使用输入流进行键盘录入时,只能一个字节一个字节进行录入。为了提高效率,可以自定义一个数组将一行字节进行存               储。当一行录入          完毕,再将一行数据进行显示。这种正行录入的方式,和字符流读一行数据的原理是一样的。也就                       是readLine方法。

      3、转换流

        3.1 转换流的由来:

             a、字符流与字节流之间的桥梁

            b、方便了字符流与字节流之间的操作

          转换流的应用:

             字节流中的数据都是字符时,转成字符流操作更高效。

         3.2   InputStreamReader将字节流通向字符流

               a、获取键盘录入对象。

                         InputStream in=System.in;

               b、将字节流对象转成字符流对象,使用转换流。

                       InputStreamReaderisr=new InputStreamReader(in);

              c、为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader

                    BufferedReaderbr=new BufferedReader(isr);

             键盘录入最常见写法

                  BufferedReaderin=new BufferedReader(new InputStreamReader(System.in));

         3.3   OutputStreamWriter字符流通向字节流

             字符通向字节:录入的是字符,存到硬盘上的是字节。步骤和InputStreamReader转换流一样。

IO流代码如下:

package arrDamo;
/*
用键盘输入五个学生的信息,信息包括学生的姓名和三门课程的成绩
学生格式如:zhangsan,40,56,67并计算出总分
再把学生信息并按总分的高低来排序,写入到一个文本文件中
*/
import java.io.*;
import java.util.*;
//实现Comparable,好让Student按自定义来排序
class Student implements Comparable<Student>
{
	String name;
	int ma;
	int en;
	int ch;
	int sum;
	//初始化
	Student(String name,int ma,int en,int ch)
	{
		this.name=name;
		this.ma=ma;
		this.en=en;
		this.ch=ch;
		sum=ma+en+ch;
	}
	//复写compareTo类,自定义排序
	public int compareTo(Student st)
	{
		int num = new Integer(this.sum).compareTo(new Integer(st.sum));
		if(num==0)
		{
			return this.name.compareTo(st.name);
		}
		return num;
	}
	public String getName()
	{
		return name;
	}
	public int getSum()
	{
		return sum;
	}
	//复写hashCode()方法
	public int hashCode()
	{
		return name.hashCode()+sum*45;
	}
	//复写equals(Object obj)方法
	public boolean equals(Object obj)
	{
		if(!(obj instanceof Student))
			throw new ClassCastException("obj不属于学生");
		Student stu = (Student)obj;
		return this.name.equals(stu.name)&&this.sum==stu.sum;
	}
	//返回学生信息
	public String StudentToString()
	{
		return "student("+name+","+ma+","+en+","+ch+")";
	}
}
class StudentWrite
{
	public static Set<Student> method_1()
	{
		System.out.println("请输入学生信息:");
		//将从键盘输入的数据存到缓冲区长
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		//创建一个TreeSet集合
		Set<Student> set = new TreeSet<Student>();
		//把学生信息存到集合中
		String line=null;
		try {
			while((line=br.readLine())!=null)
			{
				//假如输入的是over,就结束
				if("over".equals(line))
					break;
				//将键盘输入的数据按逗号来切割,组成一个字符串数组
				String[] str=line.split(",");
				//创建学生对象,并初始化
				Student stus = new Student(str[0],Integer.parseInt(str[1])
					           ,Integer.parseInt(str[2])
								,Integer.parseInt(str[3]));
				//将学生存到TreeSet集合中
				set.add(stus);
			}
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} 
			try {
				//关闭流
				if(br!=null)
				br.close();
			} catch (IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
			//返回Set集合
			return set;
	}
	public static void method_2(Set<Student> sets)
	{
		//创建一个目的文件
		File file=new File("D:\\student.txt");
		//把TreeSet集合中的数据写到目的文件中
		BufferedWriter bw = null;
		try {
			bw = new BufferedWriter(new FileWriter(file));
			for(Student s:sets)
		       {
					bw.write(s.StudentToString()+"\t");
					bw.write(s.getSum()+"");
					bw.newLine();
					bw.flush();
		       }
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		
		try {
			//关闭流
			if(bw!=null)
			bw.close();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}

}
public class StudentInfoDemo 
{
	public static void main(String[] args) throws Exception 
	{
		//获取一个Set集合
		Set<Student> se = StudentWrite.method_1();
		//调用method_2(se)方法
		StudentWrite.method_2(se);
	}
}







------- android培训java培训、期待与您交流!---------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
大学生在线租房平台管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、报修评价管理、字典管理、房东管理、房屋管理、房屋收藏管理、房屋留言管理、房屋租赁管理、租房论坛管理、公告信息管理、留言板管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生在线租房平台管理系统可以提高大学生在线租房平台信息管理问题的解决效率,优化大学生在线租房平台信息处理流程,保证大学生在线租房平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理大学生在线租房平台信息,包括房屋管理,培训管理,报修管理,薪资管理等,可以管理公告。 房屋管理界面,管理员在房屋管理界面中可以对界面中显示,可以对房屋信息的房屋状态进行查看,可以添加新的房屋信息等。报修管理界面,管理员在报修管理界面中查看报修种类信息,报修描述信息,新增报修信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
基于hal库的OLED显示屏驱动C语言实现源码.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值