文件输入输出流
来源:互联网 发布:手机淘宝在哪实人认证 编辑:程序博客网 时间:2024/06/05 06:29
一、对文件操作的流——基本知识
1.read()方法读取流中的数据是按照字节一个个读取,而且每次只读取一个字节。实践如下:
代码如下:
import java.io.FileInputStream;/** * 文件的输入输出流 * @author Administrator * */public class FileOperationTest {public static void main(String[] args) throws Exception {readFile("G:\\文件测试\\1.txt");}/** * 读取指定的文件 * @param fileName */public static void readFile(String fileName) throws Exception{//根据fileName构建文件输入流对象FileInputStream fis = new FileInputStream(fileName);//从此输入流中读取数据一个个读int i= fis.read();System.out .print((char)i);}}*read()方法如何实现字符串的输出
代码如下:
import java.io.FileInputStream;/** * 文件的输入输出流 * @author Administrator * */public class FileOperationTest {public static void main(String[] args) throws Exception {readFile("G:\\文件测试\\1.txt");}/** * 读取指定的文件 * @param fileName */public static void readFile(String fileName) throws Exception{//根据fileName构建文件输入流对象FileInputStream fis = new FileInputStream(fileName);//从此输入流中读取数据一个个读int i= fis.read();//用read()实现文件的完整输出while(i!=-1){System.out.print((char)i);i = fis.read();}}}*read()读取到文件末尾,返回-1。
2.read(byte[] b)按字节读取流中的数据,将读取到的数据存到byte[]数组中
代码如下:
import java.io.FileInputStream;/** * 文件的输入输出流 * @author Administrator * */public class FileOperationTest {public static void main(String[] args) throws Exception {readFile("G:\\文件测试\\1.txt");}/** * 读取指定的文件 * @param fileName */public static void readFile(String fileName) throws Exception{//根据fileName构建文件输入流对象FileInputStream fis = new FileInputStream(fileName);/*//从此输入流中读取数据一个个读int i= fis.read();//用read()实现文件的完整输出while(i!=-1){System.out.print((char)i);i = fis.read();}*///获取此流中的有效字节数int length=fis.available();//按块读byte[] buf= new byte[length];//刚好存满fis.read(buf);//此行代码执行完毕后文件中所有的字节都存到buf数组中String fileCountent = new String(buf);//用一个字符串接收这个数组System.out .println(fileCountent);//关闭流fis.close();}}*中文字符由两个字节组成,在对流数据进行读取时会将字符拆成字节一个个读取,造成乱码。
代码如下:
import java.io.FileInputStream;/** * 文件的输入输出流 * @author Administrator * */public class FileOperationTest {public static void main(String[] args) throws Exception {readFile("G:\\文件测试\\1.txt");}/** * 读取指定的文件 * @param fileName */public static void readFile(String fileName) throws Exception{//根据fileName构建文件输入流对象FileInputStream fis = new FileInputStream(fileName);//从此输入流中读取数据一个个读int i= fis.read();//用read()实现文件的完整输出while(i!=-1){System.out.print((char)i);i = fis.read();}/*//获取此流中的有效字节数int length=fis.available();//按块读byte[] buf= new byte[length];//刚好存满fis.read(buf);//此行代码执行完毕后文件中所有的字节都存到buf数组中String fileCountent = new String(buf);//用一个字符串接收这个数组System.out .println(fileCountent);//关闭流fis.close();*/}}通过read(byte[] b)方法将流中的数据整体保存在byte型数组中,用字符串接收这个数组,这串数据怎么解码的字符串在接收时又怎么拼接起来。
代码如下:
import java.io.FileInputStream;/** * 文件的输入输出流 * @author Administrator * */public class FileOperationTest {public static void main(String[] args) throws Exception {readFile("G:\\文件测试\\1.txt");}/** * 读取指定的文件 * @param fileName */public static void readFile(String fileName) throws Exception{//根据fileName构建文件输入流对象FileInputStream fis = new FileInputStream(fileName);/*//从此输入流中读取数据一个个读int i= fis.read();//用read()实现文件的完整输出while(i!=-1){System.out.print((char)i);i = fis.read();}*///获取此流中的有效字节数int length=fis.available();//按块读byte[] buf= new byte[length];//刚好存满fis.read(buf);//此行代码执行完毕后文件中所有的字节都存到buf数组中String fileCountent = new String(buf);//用一个字符串接收这个数组System.out .println(fileCountent);//关闭流fis.close();}}
写的操作与读的操作一一对应
三、实例,实现文件的复制粘贴
我们通过两种方式实现文件的复制粘贴,比较两种方式的效率。
第一种:用read()方法和write()方法实现复制粘贴。
第二种:创建缓冲区及byte型数组(用read(byte[])方法和write(byte[],int off,int len))实现复制粘贴。
*文件复制从G:\文件测试1\4.txt,复制到的G:\文件测试2\4.txt。
从实验可以看出第二种方法的效率高于第一种,代码如下:
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;/** * 文件的输入输出流 * @author Administrator * */public class FileOperationTest {public static void main(String[] args) throws Exception {String srcPath = "G:\\文件测试1\\4.txt";String destPath = "G:\\文件测试2\\4.txt";//计时器>计算复制粘贴文件所用的时间long start_time = System.currentTimeMillis();copyPaste(srcPath,destPath);long end_time = System.currentTimeMillis();System.out.println("拷贝用时:"+(end_time - start_time));} /** * * @param srcPath * @param destPath * @throws Exception */public static void copyPaste(String srcPath,String destPath) throws Exception {//构建文件输入输出流对象FileInputStream fis = new FileInputStream(srcPath);FileOutputStream fos = new FileOutputStream(destPath);//读取以及写入文件内容/*//用read()方法和write()方法实现复制粘贴int i =fis.read();while(i != -1){fos.write(i);//写i = fis.read();}*///创建缓冲区(用read(byte[])方法和write(byte[],int off,int len))实现复制粘贴byte[] buf = new byte[1024];//1024个字节大小的缓冲区//read(byte[])方法返回读取的字节的数量int i = fis.read(buf);while(i!=-1){//按块写入,每次写入1024个字节,最后一次写入len个字节fos.write(buf, 0, i);i = fis.read(buf);}fis.close();fos.close();}}
三种读写文件的操作总结:
* 1.一个一个字节读写,用read(),write()方法对数据拆分成字节而进行读写,优点是灵活,逻辑也比较简单,但并不适合大数据的读写。
* 3.一次性读写,用read(byte[] b),write(byte[] b,int off,int len)方法,与第二种方法相似,不同在于,write(byte[] b,int off,int len)会判断缓冲区里字节的数量,与第二种方法遇到最后一缓冲区里的字节数不够却写入空数据充数相比,这种方法会根据缓冲区里的字节数写入相应数量的数据。
二、在文件输入输出流的基础上,对字节进行包装而衍生的其他字节流,常见的如下:
*1.BufferedInputStream 缓冲字节流 BufferedOutputStream
*2.DataInputStream 原始数据流 DataOutputStream
*3.ObjectInputStream 对象流 ObjectOutputStream
*4.ByteArrayInputStream 内存流 ByteArrayOutputStream
应用如下:
代码如下:
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/** * 根据文件输入输出流来了解其他流 * @author Administrator * */public class Test {public static void main(String[] args) throws Exception {//Student stu = new Student();//stu.study();//计时器>计算复制粘贴文件所用的时间long start_time = System.currentTimeMillis();writeToFileBufferedStream("G:\\文件测试1\\《超神学院》第十集.flv","G:\\文件测试2\\《超神学院》第十集.flv");long end_time = System.currentTimeMillis();System.out.println("拷贝用时:"+(end_time - start_time));}/** * * @param srcPAth * @param destPath * @throws Exception */public static void writeToFileBufferedStream(String srcPath,String destPath) throws Exception {//构建输出流对象FileInputStream fis = new FileInputStream(srcPath);FileOutputStream fos = new FileOutputStream(destPath);//构建缓冲字节输入输出流BufferedInputStream bis = new BufferedInputStream(fis);BufferedOutputStream bos = new BufferedOutputStream(fos);//读写操作(复制粘贴的功能)int i= bis.read();while(i!=-1){bos.write(i);i = bis.read();}bos.flush();//清空缓冲区bos.close();bis.close();fos.close();fis.close();}}
- 输入输出文件流
- java文件输入输出流
- JAVA文件输入输出流
- java 文件输入输出流
- 文件输入输出流
- 关于文件输入输出流
- 文件的输入输出流
- 输入输出流读写文件
- C++ 文件输入输出流
- java文件输入输出流
- java文件输入输出流
- c++输入输出/文件流
- 文件输入输出流
- 文件输入输出流
- Java输入输出流--文件
- 文件输入输出流
- java 文件输入输出流
- JAVA文件输入输出流
- android利用PopupWindow实现点击工具栏弹出下拉菜单
- ES、PS、PES以及TS码流
- 第一天开博客,分享一篇有货的文章
- 可延展的矢量图.9图片制作
- 三十分钟掌握STL
- 文件输入输出流
- Spring AMQP实例 以及Spring 配置文件动态注入属性使用实战
- IE8下中文省略号垂直居中显示
- poj_2253
- hdu 5143 NPY and arithmetic progression
- 杭州阿波罗医院提醒患者不要被骗子骗人
- Ubuntu下设置root用户
- maven 学习笔记(二)-创建简单的eclipse+android+maven工程
- 写出float x 与“零值”比较的if语句——一道面试题分析