JAVA 中的IO流

Java中的IO流是用来处理设备与设备之前的数据传输,在java中以流的形式传输。流分为两类:字节流和字符流。

字节流:InputStream,OutPutSteam.(计算机内的数据都是以字节存储的,字节流可以操作任意数据)

字符流:Reader,Writer.(字符流只能操作字符,但是在实际应用中字符流比较方便)

从操作来看又可以分为:输入流和输出流。

在进行IO流操作的时候分为以下几步:1.导入IO流的包,2.进行IO流的异常处理,3.关闭IO流释放资源。

字节流

————————————————————————————————————————————————————————————————————————————————————————————————————————————

FileInputStream:

1 FileInputStream fis =new FileInputStram("xxx.text");
2 int b;//读取标准写法
3 while((b=fis.read)!=-1){
4   System.out.println(b);
5 }
6 fis.close();

FileOutputSteam:

FileOutputStream fos=new FileOutputStream("xxx.text",true);//FileOutputStream默认每次回重新生成一个“xxx.text”,如果想要追加,应该加一个true
fos.write();
fos.close();
 

Java中的缓冲区:

在读写数据的时候,一次读写一个数组明显比一个一个字节的读取速度要快的多,所以考虑到这种设计思想,引入了缓冲区。实际上就是对流进行包装。(装饰设计思想)

BufferInputStream和BufferOutputStream:



BufferedInputStream bis=new BufferedInputStream(new FileInputStrean("xxx.txt"));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("yyy.txt")
byte[]by=new byte[1024]
int len
while((len=bis.read(by))!=-1){

bos.write(arr,0,len);
}
bis.close();//只需要关闭BufferInputStream
bos.close();

JDK 1.7以下流的异常处理:

需要注意的是在做IO流的异常处理的时候,不能进行try catch.因为IO流是用来操作底层的数据,如果进行了try catch相当于把IO问题隐藏了,无法向上暴露,真确的做法是将IO异常抛出。

try{BufferedInputStream bis=new BufferedInputStream(new FileInputStrean("xxx.txt"));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("yyy.txt")
byte[]by=new byte[1024]
int len
while((len=bis.read(by))!=-1){

bos.write(arr,0,len);
}
}finally{
if(bis!=null){
bis.close();//只需要关闭Buffer
}
if(bos!=null){
bos.close();
}
}

JDK 1.7以上流的异常处理:

不需要手动关闭,程序自动关闭。

try(
BufferInputStream bis=new BufferInputStream(new FileInputStrean("xxx.txt"));
BufferOutputStream bos=new BufferOutputStream(new FileOutputStream("yyy.txt")
)
{
byte[]by=new byte[1024]
int len
while((len=bis.read(by))!=-1){

bos.write(arr,0,len);
}
}

字符流

————————————————————————————————————————————————————————————————————————————————————  FileReader:

FileReader fr=new FileReader("xxx.txt")
int c;
while((c=fr.read())!=-1){   //read()方法按照字符大小读取
System.out.print((char)c);
}
c.close();

FileWriter:

FileWriter fw=new FileWriter("xxx.txt")
fw.wrire("你好");  write()方法自动将字符装字节写入
fw.close();

字符流的拷贝:

FileReader fr=new FileReader("xxx.txt");
FileWriter fw=new FileWriter("zzz,txt");
int c;
while((c=fr.read())!=-1){

fw.writer(c);
}
fr.close();
fw.close();

字符流和字节流都可以拷贝文件,但是不推荐使用字符就拷贝文件,因为读取的时候要将字节流转换为字符流,写入的时候要将字符流转换位字节流,太过耗时!

当程序需要读写一段文本时,推荐使用字符流,因为它是按码读取,不会出现半个中文的情况,更加准确!写出时也不用转换为字节流。需要注意的是,使用字符流拷贝时,只能拷纯文本。在读的时候将字符转换为字节的时候可能找不到对应的字节,出现字节丢失。

自定义字节数组拷贝:

FileReader fr=new FileReader("xxx.txt");
FileWriter fw=new FileWriter("zzz.txt");
char[]by=new char[1024];
int len;
while((len=fr.read(by))!=-1){//将文件上的数据转到字符数组中

fw.write(by,0,len);//字符数组中的字符转到文件中
}
fr.close();
fw.close();

带缓冲的字节数组拷贝:

BufferedReader br=new BufferReader(new FileReader ("xxx.txt"));
BufferedWriter bw=new BufferWriter(new BufferWriter("zzz.txt"));
int c
while((c=br.read())!=-1){
bw.writer(c);
}
br.close();
bw.close();

BufferReader和BufferWriter:

BufferedReader br=new BufferReader(new FileReader("xxx.txt"));BufferedWriter bw=new BufferWriter(new FileWriter("zzz.txt"))
String line;
while((line=br.readLine())!=null){读取一行字符
bw.write(line);bw.nextLine();//换行

}
br.close();bw.close();

简单应用实现文本反转:

BufferedReader br=new BufferReader(new FileReader("xxx.txt"));

String line;
ArrayList<String>list=new ArrayList<>();
while((line=br.readLine())!=null){

list.add(line);

}br.close();
BufferedWriter br=new BufferReader(new FileWriter("zzz.txt"));for(int i=line.size();i>=0;i--){ bw.write(list.get(i)); bw.nextLine(); } bw.close();

IO流中的装饰设计模式————————————————————————————————————————————————————————————————————————————————————————

设计模式的来源:设计模式最早来源于建筑行业,为了让对象更加容进行推广,进行程序化操作。

装饰设计模式的实质就是对对象进行包装,让他更加具有操作性,在IO流中,Buffer就是一种装饰。装饰设计模式的好处是:耦合性不强,装饰类与被装饰类的变化无关。

时间: 2024-10-09 20:59:36

JAVA 中的IO流的相关文章

Java中的IO流

Java中的IO流是实现输入/输出的基础. 按照流的方向不同:分为输入流和输出流. 按照处理数据单位的不同:分为字节流(8位)和字符流(16位). 按照功能不同:分为节点流和处理流 所有面向字节的流类都继承于InputStream类(输入流) 或OutputStream类(输出流),这两个类是抽象类,我们可以利用它的子类来完成不同的功能. InputStream.OutputStream都是抽象类 InputStream抽象了应用程序读取数据的方式 OutputStream抽象类应用程序写出数据

Java中的IO流总结

Java中的IO流总结 1. 流的继承关系,以及字节流和字符流. 2. 节点流FileOutputStream和FileInputStream和处理流BufferedInputStream和BufferedOutputStream.以及对应的FileOutputWriter,FileInputReader,BufferedInputReader,BufferedOutputWriter. 3. 转换流InputStreamReader和OutputStreamWriter 一:流的继承关系 字节

Java中的IO流体系

Java为我们提供了多种多样的IO流,我们可以根据不同的功能及性能要求挑选合适的IO流,如图10-7所示,为Java中IO流类的体系. 注:这里只列出常用的类,详情可以参考JDK API文档.粗体标注为常用! 图10-7 Java中的IO流体系 从上图发现,很多流都是成对出现的,比如:FileInputStream/FileOutputStream,显然是对文件做输入和输出操作的.我们下面简单做个总结: 1. InputStream/OutputStream 字节流的抽象类. 2. Reader

Java中的IO流(五)

上一篇<Java中的IO流(四)>记录了一下Properties类,此类不属于IO流,它属于集合框架.接下来说一下IO流中的其它流 一,打印流PrintStream PrintStream为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式.并且此注永远不会抛出IOException. 此流的构造函数大致分三类 1,接收File文件类型的 2,接收OutputStream类型的 3,接收文件名形式的 下演示一下此流的两个方法 1 private static void functio

整理 JAVA中的IO流 (字符流和字节流两个大类)

java中的io流分为两类,字符和字节: OutputStream和InputStream字节流的父类,抽象.OutputStream有两个提供了实现的接口closable和flushable. Writer和Reader字符流的父类,抽象.实际上在流的操作中,底层与文件进行读写的都是字节流,因为即使是字符流的对象,其最终实现读写的也是用的字节流. 操作文件的字节子类FileOutputStream和FileInputStream.记住,这里面写出和读入的都是字节. class useByteS

Java中的IO流之输入流|乐字节

亲爱的乐字节的小伙伴们,小乐又来分享Java技术文章了.上一篇写到了IO流,这篇文章着重 谈谈输入流,再下次再说输出流. 点击回顾上一篇:乐字节Java之file.IO流基础知识和操作步骤 一. 输入流 字节流和字符流的操作方式几乎完全一样,只是操作的数据单元不同而已 .字节流可 以操作所有文件,字符流仅操作纯文本. 1.抽象类:InputStream 和 Reader InputStream和Reader是所有输入流的基类,它们是两个抽象类,是所有输入流的模版,其中定义的方法在所有输入流中都可

三、JAVA中的IO流,输出流

JAVA中java.io.*;提供数据的流式输入与输出的相关类,IO流是对于输入与输出的抽象,JAVA把这些不同来源和目标的数据都统一抽象为数据流.将输入与输出的数据统一为流的好处是程序不必关心要读取得是文件,还是网络中的数据,而是统一当作IO流来处理. IO流又分为字符流与字节流,主要区别 字节流 按字节处理(一次处理一个字节) 使用类OutputStream 字符流 按字符处理(一次处理一个字符即两个字节) 使用类Writer 其实字节流与字符流处理十分相似(即每次处理的单位不同),好多书上

Java中的IO流系统详解

Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换.而类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换.字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高

java中的IO流之文件复制

O(∩_∩)O哈哈~ 1.综述 一门成熟的语言肯定具备的几个模块:IO,通信,线程,UI...... Java作为一门成熟的程序语言,其IO流是比较复杂的.上个图大家感受下: 简单分析一下,IO分为两种流:字符流和字节流.字符流的父类Reader(读取到内存)和Writer(从内存输出),字节流的父类InputStream(读取到内存)和OutputStream(从内存输出),然后为了方便各种操作,比如为了文件操作,派生了文件流:为了对象操作,派生了对象流:等等.当初我也是傻傻分不清到底是Inp