黑马程序员---Java基础---IO流(一)
来源:互联网 发布:小米网络助手是什么 编辑:程序博客网 时间:2024/05/18 18:45
</pre>------<a target=_blank target="_blank" href="http://www.itheima.com">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------<p></p><p>一.IO(Input Output)</p><p><span style="white-space:pre"></span>1. IO流概念</p><p> IO流用来处理设备之间的数据传输。</p><p> Java对数据的操作通过流的方式</p><p> Java用于操作流的类都在IO包中</p><p> 流按流向分为两种:输入流、输出流</p><p> 流按操作类型分为两种:字节流与字符流。字节流可以操作任何数据,字符流只能操作纯字符数据,比较方便。</p><p> 2.输入输出流</p><p> 在Java程序读取写出数据时, 需要使用输入流和输出流</p><p> 输入流(InputStream)用来读取数据, InputStream的各个子类可以从各种数据源中读取数据</p><p> 输出流(OutputStream)用来写出数据, OutputStream的各个子类可以向各种数据目的地写出数据</p><p> 3.FileInputStream读取文件</p><p> 创建FileInputStream对象, 关联一个文件</p><p><span style="white-space:pre"></span> FileIntputStream <span style="color:#6A3E3E">fos</span> = <strong><span style="color:#7F0055">new</span></strong> FileIntputStream(<span style="color:#2A00FF">"F:\\file.txt"</span>);</p><p> 调用read()方法可以读取一个字节, 如果读到末尾返回-1</p><p> fis.read();</p><p> 调用close()方法关闭流, 释放资源</p><p> fis.close();</p><p> 4.FileOutputStream写出文件</p><p> 创建FileOutputStream对象, 关键一个文件. 文件如果不存在就创建, 文件存在则清空. 如果需要追加, 构造函数中多传一个true.</p><p> FileOutputStream <span style="color:#6A3E3E">fos</span> =<strong><span style="color:#7F0055">new</span></strong> FileOutputStream(<span style="color:#2A00FF">"F:\\file.txt"</span>);</p><p> 调用write()方法可以写出一个字节.</p><p> fos.write();</p><p> 调用close()方法关闭流, 释放资源.</p><p> fos.close();</p><p> 5.拷贝文件</p><p> a.逐个字节: 使用FileInputStream.read()和FileOutputStream.write(int)</p><p><span style="white-space:pre"></span> 循环读取, 读取到一个字节, 判断是否是文件末尾, 不是末尾就写出,由于操作文件速度较慢, 逐个字节读取效率很低. </p><p></p><pre name="code" class="java">package it.io;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class IoTest {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("F:\\file.txt");FileOutputStream fos = new FileOutputStream("F:\\file1.txt");int b ;while((b = fis.read()) != -1) {System.out.println((char)b);fos.write(b);}fis.close();fos.close();}}
b.自定义数组: 使用FileInputStream.read(byte[])和FileOutputStream.write(byte[], int, int)
自定义一个数组当作缓冲区, 一次拷贝一个数组(多个数据), 一次写出一个数组(多个数据)这样做减少了操作文件的次数, 提高了效率.
package it.io;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class IoTest {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("F:\\file.txt");FileOutputStream fos = new FileOutputStream("F:\\file1.txt");byte[] arr = new byte[1024];int len;while ((len = fis.read(arr)) != -1)fos.write(arr, 0, len);fis.close();fos.close();}}
c.自带缓冲区: 使用BufferedInputStream.read()和BufferedOutputStream.write(int), Java提供了带有缓冲功能的类.
如果用BufferedInputStream来读取一个字节, 其内部会先读取一批用来缓冲, 返回给程序一个, 下次再读取时不再从文件中读取.
如果用BufferedOutputStream来写出一个字节, 其实这个字节不会直接写出到文件, 是写出到缓冲区中, 直到缓冲区写满或者关闭流时才会写到文件.
这样的机制也是为了尽量少的操作文件, 提高效率.
package it.io;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class IoTest {public static void main(String[] args) throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream("F:\\file.txt"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("F:\\file.txt"));int b ;while ((b = bis.read()) != -1)bos.write(b);bis.close();bos.close();}}
6.标准化代码
使用IO流的时候是必须关闭流的, 而使用IO流的代码通常都是会抛出异常的, 如果程序运行过程中某行代码出现异常, 下面代码不会再执行.
为了避免关闭流的代码被异常中断掉, 通常关闭流的代码都是写在finally代码块中的.
而如果有多个流需要关闭, 每个关闭流的代码都要单独放在try和fianlly中, 因为关流的代码通常也会抛出异常.
package it.io;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class IoTest {public static void main(String[] args) throws IOException {BufferedInputStream bis = null;BufferedOutputStream bos = null;try {bis = new BufferedInputStream(new FileInputStream("F:\\file.txt"));bos = new BufferedOutputStream(new FileOutputStream("F:\\file.txt"));int b;while ((b = bis.read()) != -1)bos.write(b);} finally {try {bis.close();} finally {bos.close();}}}}
</pre>------<a target=_blank target="_blank" href="http://www.itheima.com">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------<pre name="code" class="html">
- 黑马程序员-------java基础 IO流<一>
- 黑马程序员---------------JAVA基础-----------------IO流一
- 黑马程序员-----Java基础-----IO流(一)
- 黑马程序员--java基础--IO流(一)字符流
- 黑马程序员——JAVA基础-IO流(一)
- 黑马程序员---Java基础---IO流(一)
- 黑马程序员--java基础--IO 流(一)
- 黑马程序员——Java基础--IO流(一)
- 黑马程序员--java基础--IO流(一)
- 黑马程序员——Java基础--------IO流(一)
- 黑马程序员——JAVA基础----IO流(一)
- 黑马程序员--Java基础--09IO(一)
- 黑马程序员---Java IO流(一)
- 黑马程序员-java基础8--IO流(一)
- 黑马程序员——Java基础---IO流(一)
- 黑马程序员——java基础--IO流(篇一)
- 黑马程序员-----十一、java基础IO流技术总结一
- 黑马程序员-----Java基础(IO(一))
- C语言的存储类别
- Rotate Image
- 解析 Nginx 负载均衡
- MySql数据库日期操作
- 学习C#感受
- 黑马程序员---Java基础---IO流(一)
- (ZT)Linux版本之挑选适合服务器的OS发行版
- R语言学习之六
- 编写一个程序,输入月份号,输出该月的英文月名
- Log4j 详细配置
- 时间格式
- 历届试题 翻硬币
- android 分享的光荣事迹 分享的大坑
- [Java初学] 第一次作业 hello.java直接调用同根目录下的其他类 A.java 、B.java、C.java