java13-IO输入输出流
来源:互联网 发布:python执行linux命令 编辑:程序博客网 时间:2024/05/18 15:54
------- android培训、java培训、期待与您交流! ----------
(Input Output)流
用来处理设备之间的数据传输。java对数据的操作是通过流的方式。java用于操作流的对象都在IO包中。按操作数据类型分为两种:字节流与字符流。
按流向分为:输入流,输出流。
IO流常用基类
字节流抽象基类
InputStream,OutputStream
字符流抽象基类
Reader,Writer
这四个类派生出来的子类名称都是以父类名作为子类名的后缀。功能为前缀。
如:InputStream的子类FileInputStream
Reader的子类FileReader
2.字符流
Reader,Writer
/*
使用文件操作的Writer子类对象FileWriter。
建立对象,明确数据存放的目的地。
write方法,将字符串写入到流中
flush将数据刷到目的地中
close刷新后流关闭
和flush区别是,flush只是刷新,流还在。close刷新后流关闭刷新后流关闭
*/
import java.io.*;class FileWriterDemo{public static void main(String[] args) throws IOException//建立对象时可能会有异常{/*创建一个FileWriter对象,这个对象一被初始化就必须要明确被操作的文件。该文件会被创建到指定目录下,目录下若有同名文件,会被覆盖。就是明确数据存放的目的地。*/FileWriter fw = new FileWriter("demo.txt");//调用方法write,将字符串写入到流中fw.write("adc");//刷新流对象中缓冲中的数据,将数据刷到目的地中。//fw.flush();/*关闭流资源,但关闭前会刷新一次内部缓冲中的数据将数据刷到目的地中和flush区别是,flush只是刷新,流还在。close刷新后流关闭*/fw.close();}}
3.IO异常基本处理
/*
IO异常的基本处理
1,创建空对象在成员位置,以便作用于类中。
2,try对象初始化,开始输入,以便处理异常。
3,对异常处理。
4,finally关闭缓存。先判断对象是否为空,然后确是否关闭,关闭要try,catch处理。
*/
import java.io.*;class EWriter{public static void main(String[] args){FileWriter fw = null;try{fw = new FileWriter("w:\\demo.txt");//win中\\反转字符fw.write("cabadd");}catch(IOException e){System.out.println("io"+e.toString());//处理异常}finally{if(fw!=null)//判断close是否需要执行try{fw.close();}catch(IOException e){System.out.println(e.toString());}}}}4.对已经存在的文件续写import java.io.*;class XxWriter{public static void main(String[] args){FileWriter fw = null;try{fw = new FileWriter("demo.txt",true);//通过传递一个true,使文件不被覆写,并在文件结尾续写fw.write("cbn");}catch(IOException e){System.out.println(e.toString());}finally{if(fw!=null)try{fw.close();}catch(IOException e){System.out.println(e.toString());}}}}5.读取文件FileReader和FileWriter相似。创建对象,与文件相关联。要保证文件存在,不然会文件不存在异常。读取方法read()一次读一个字符,自动往下读,到文件末尾会自动返回-1.int ch =0;while((ch=对象.rese())!=-1){}------read(char[])返回的是读到的字符个数定义一个字符数组,存储读到的字符char[] buf = new char[1024整数倍];int num = 0;while((num=fr.read(buf))!=-1){new String(buf,0,num)// 返回 char 数组参数的特定子数组的字符串表示形式。}练习:复制文件1,确定要复制文件位置,存储位置2,建立数组,读取文件数据存入数组,数组中文件写入3,关闭流import java.io.*;class Filerw{public static void main(String[] args){//建立流对象变量,初始化为空FileReader fr = null;FileWriter fw = null;try{//确定位置fr = new FileReader("F:\\JAVA学习\\javalx\\MapDemo.java");fw = new FileWriter("F:\\MapDemo.java");//建立字符数组,确定数组长度,用于存储数据char[] ch = new char[1024];//读取文件数据存入数组,并把数组中数据传入写入流//定义变量确定读取的个数int len = 0;while((len=fr.read(ch))!=-1){fw.write(ch,0,len);}}catch(IOException e)//处理异常{throw new RuntimeException("读写失败");}//关闭流finally{if(fr!=null)try{fr.close();}catch(IOException e){throw new RuntimeException("关闭流失败");}if(fw!=null)try{fw.close();}catch(IOException e){throw new RuntimeException("关闭流失败");}}}}
字符流的缓冲区
继承了字符流接口,加了自己的方法。
缓冲区的出现提高了对数据的读写效率。
对应类有
BufferedWriter
BufferedReader
缓冲区要结合流才能使用,对流的功能进行了增强。
建立流对象,建立缓冲区对象bufw(写入),bufr(读取),并把流对象作为参数传入缓冲区的构造函数。
调用缓冲区方法操作文件,
bufw.write("ddd");//写入
bufw.newLine();//换行,不区分系统
bufw.flush();//只要使用缓冲区,就要刷新。
bufw.close();//关闭缓冲区,就是关闭缓冲区中的流对象。
bufr.read();
bufw.readLine();//读取一行;结尾时返回空
bufw.close();//关闭缓冲区
/*
自己写一个BufferedReader
因为缓冲区是给流调用的,异常不能try,只能throws.
1,设置构造函数要有字符流对象参数。
2,定义读取方法,一次一行
3,定义关闭方法,关闭流对象
FileReader
*/
import java.io.*;class MyBufferedReader{//设置私有参数FileReaderprivate FileReader r;//MyBufferedReader(){}//设置构造参数MyBufferedReader(FileReader r){this.r = r;}//设置myReadLinepublic String myReadLine()throws IOException{//设置数据存储容器,偷懒不用字符数组,直接用字符串容器StringBuilder sb= new StringBuilder();//读取字符并存入容器,直到换行int ch = 0;while((ch=r.read())!=-1){//if(ch=='\r')continue;if(ch=='\n')return sb.toString();elsesb.append((char)ch);}//没有数据时返回null;if(sb.length()!=0)return sb.toString();return null;}//定义关闭流对象方法public void myClose()throws IOException{r.close();}}class MyBufferedReaderDemo{public static void main(String[] args){//定义读取流对象FileReader fr =null;MyBufferedReader myBuf = null;try{fr = new FileReader("TreeSet.java");//建立缓冲区对象myBuf = new MyBufferedReader(fr);//读取String line = null;while((line=myBuf.myReadLine())!=null){//换行没有存入,输出时要加上换行System.out.println(line);}}catch(IOException e){throw new RuntimeException("读取错误");}finally{if(myBuf!=null)try{myBuf.myClose();}catch(IOException e){throw new RuntimeException("关闭异常");}}}}LineNumberReaderBufferedReader的子类多了设置和获取行号的功能。也是装饰类。setLineNumber();getLineNumber();//设置在哪开始
------- android培训、java培训、期待与您交流! ----------
- java13-IO输入输出流
- Java13
- Java13
- java13
- IO输入输出流
- IO输入输出流
- Java IO输入输出流
- 输入输出IO流
- IO输入输出流-2
- IO输入输出流-3
- java io 输入输出流
- IO流--输入输出
- IO(输入输出流)
- IO序列输入输出流
- IO输入输出流
- IO-输入输出流
- Java IO(输入输出流)
- Java输入输出流IO
- MOVE WINDOW
- 7967. Book Stack
- 4 斐波那契数列 九度Online Judge
- 黑马程序员_JUnit测试框架
- 【未解决】System.InvalidOperationException: 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。
- java13-IO输入输出流
- 腾讯面试题05
- [iOS] block and async method unit test
- java14-IO字节流
- 黑马程序员_交通灯管理系统
- 自动登入google play下载app report
- FZU 1001 Duplicate Pair
- java15-File类
- 好文回顾:中国游戏编年史 中国游戏的二十年(1)