(20)Io流字符流

本文深入讲解Java中的IO流概念及应用,包括字节流与字符流的区别,如何使用FileWriter进行文件写入,并介绍了异常处理方式及文件读取的多种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1…io

 

1.1…io概述

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

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

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

l      流按操作数据分为两种:字节流与字符流。 

l      流按流向分为:输入流,输出流

io流主要用于做什么:我们可以通过java语言来处理设备上的数据,设备上的数据就是内存中的数据或者硬盘里的文件,想要处理这些设备上的数据就得用io流也叫数据流

 

1.2..IO流常用基类

l      字节流的抽象基类:

•        InputStream ,OutputStream。

l      字符流的抽象基类:

•        Reader , Writer。

l      注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。

•        如:InputStream的子类FileInputStream。

•        如:Reader的子类FileReader

 

1.3…字符流的特点。

 

既然IO流是用于操作数据的,

那么数据的最常见体现形式是:文件。

 

 

2…Filewrite类

 

FileWriter(String fileName) 参数是指定的文件名 

         根据给定的文件名构造一个FileWriter 对象。

 

发现FileWriter 没有无参构造函数因为你想要操作文件想给文件写点数据,应该先有文件,所以这个流对象一被初始化必须有被操作的文件存在

 

代码:

              //创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。想要操作数据的话得先有一个数据的存放位置,,

              //而且该文件会被创建到指定目录下,,,如果该目录下已有同名文件,将被覆盖,

             

              FileWriterfw = new FileWriter("demo.txt"); //new时在内存中产生一个对象同时在指定的目录下产生一个指定名称的文件,他在创建文件

 

              //调用write方法,将字符串写入到流(内存)中。没有把字符串写入到文件中,此时文件里面没有数据,,流在内存当中,因为创建了流对象

              fw.write("abcde");

 

              //刷新流对象中的缓冲区中的数据。把流里面的数据放到文件里去用flush(刷新)()方法,,流对象进内存以后,,他内部有缓冲区,临时存放数据,你想把这些数据放到文件中去只要flush,他就会清空,,        //将数据刷

              fw.flush();

 

              //close关闭流资源,但是关闭之前会刷新一次流内部中的缓冲区中的数据。

              //和flush区别:flush刷新后,流可以继续使用(代码6),close刷新后,会将流关闭。代码9,,调用close的话之前会调用一次flush,然后把这资源到底层给关掉,

              fw.close();

 

 

3…IO异常的处理方式

 

              try{

       //这里调用了window底层创建文件的方法产生"demo.文件,都在调用底层资源,所以都会发生io异常,凡是能和设备上数据发生数据关系,无论读或者写还有创建文件,这些处理方式都会发生io异常

                     FileWriterfw=new FileWriter("demo.text");

                     fw.write("abcdefg");

                     fw.close();

              }catch (IOException e) {

                     //TODO Auto-generated catch block

                     e.printStackTrace();

              }finally

              {

                     try

                     {

                            if(fw!=null)  避免发生空指针异常,,如果这里要关闭多个流对象时就得写多个if去关闭,不能写在一个if里面

                                   fw.close();                          

                     }

                     catch(IOException e)

                     {

                            System.out.println(e.toString());

                     }

                    

              }

 

 

4…文件的续写

 

FileWriter(String fileName, booleanappend)  是在原有文件数据基础上添加数据,,,对已有文件的数据续写。

         根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。

 

代码:

//传递一个true参数,代表不覆盖已有的文件。如果文件不存在就创建一个新的文件,文件存在就不创建了并在已有文件的末尾处进行数据的续写。

                     fw= new FileWriter("demo.txt",true); true代表在原有文件数据基础上续写数据

 

 

5…文本文件读取方式

 

第一种读取方式:

父类Reader里的方法

 

 intread()

         读取单个字符。 就是调用一次 read()就读取一个字符,, 一次读一个字符。而且会自动往下读。

 

读取单个字符。在字符可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。

用于支持高效的单字符输入的子类应重写此方法。

 

代码;

 

FileReader fr = newFileReader("c:\\demo.txt");

 

              intch = 0;

 

              while((ch=fr.read())!=-1)

              {

                     System.out.println("ch="+(char)ch);

              }

              fr.close();

 

第二种读取方式:

文本文件读取方式二:通过字符数组进行读取。这种方式好,,,第一种读取方式是我读一个就打印一个,现在是我读一个就保存一个,我存满一次以后就全打印出去

 

 intread(char[] cbuf)

 

读取数据的方式除了一次读一个字符(调用read()方法)以外呢还有一种方式read(char[] cbuf) 将字符读入数组。把字符读到数组里面去

 

把流关联的数据读一个就存到数组里面去,,调用一次这个方法时他会不停的读取数据放到数组里直到数组装不下或者读到末尾了就不读了

 

代码:

 

              FileReaderfr = new FileReader("demo.txt");

             

              //定义一个字符数组。用于存储读到字符。

              //该read(char[])返回的是读到字符个数。

              char[]buf = new char[3];

 

              intnum = 0;   定义一个变量保存每次返回的读取个数,每一次返回的读取个数不一样所以用变量保存

              while((num=fr.read(buf))!=-1)装满一次就打印输出一次或者没有装满(就是文件数据小于数组长度)时就输出来

              {

                     System.out.println(newString(buf,0,num));   读read(buf))一次就把这数组打印一次,,最后只读取了一个字符,那么就得让他打印的时候就只打印一个所以就是截取字符串的一部分打印,,buf,0,num)读到几个就打印几个,,,

              }

             

 

              fr.close();

内容概要:本文档主要展示了C语言中关于字符串处理、指针操作以及动态内存分配的相关代码示例。首先介绍了如何实现键值对(“key=value”)字符串的解析,包括去除多余空格和根据键获取对应值的功能,并提供了相应的测试用例。接着演示了从给定字符串中分离出奇偶位置字符的方法,并将结果分别存储到两个不同的缓冲区中。此外,还探讨了常量(const)修饰符在变量和指针中的应用规则,解释了不同类型指针的区别及其使用场景。最后,详细讲解了如何动态分配二维字符数组,并实现了对这类数组的排序与释放操作。 适合人群:具有C语言基础的程序员或计算机科学相关专业的学生,尤其是那些希望深入理解字符串处理、指针操作以及动态内存管理机制的学习者。 使用场景及目标:①掌握如何高效地解析键值对字符串并去除其中的空白字符;②学会编写能够正确处理奇偶索引字符的函数;③理解const修饰符的作用范围及其对程序逻辑的影响;④熟悉动态分配二维字符数组的技术,并能对其进行有效的排序和清理。 阅读建议:由于本资源涉及较多底层概念和技术细节,建议读者先复习C语言基础知识,特别是指针和内存管理部分。在学习过程中,可以尝试动手编写类似的代码片段,以便更好地理解和掌握文中所介绍的各种技巧。同时,注意观察代码注释,它们对于理解复杂逻辑非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值