一、文件字节输入流

1. 构造方法

FileInputStream(String name);
FileInputStream(File file);

参数name和file指定的文件称为输入流的源
FileInputStream输入流打开一个到达文件的通道,当创建输入流时,可能会抛出IOException(IO异常)。

//使用构造函数
//FileInputStream(String name);
try {FileInputStream input = new FileInputStream("f:/1.txt");
}catch (IOException e){e.printStackTrace();
}
//FileInputStream(File file);
File file = new File("f:/1.txt");
try {FileInputStream input = new FileInputStream(file );
}catch (IOException e){e.printStackTrace();
}

2.使用输入流读取字节

输入流的目的是提供读取源中数据的通道,程序可以通过这个通道读取源中的数据。
文件字节流可以调用从父类继承的read方法顺序读取文件,只要不关闭流,每次调用read方法就顺序地读取文件中的其余内容,直到文件的末尾或文件字节输入流被关闭。

  1. int read() 从源中读取单个字节的数据,该方法返回字节值(0~255之间的一个整数),如果未读出字节就返回-1.
  2. int read(byte b[ ]) 从源中试图读取b.length个字节到字节数组b中,返回实际读取的字节数目。如果到达文件的末尾,则返回-1。
  3. int read(byte b[ ],int off,int len) 从源中试图读取len个字节到字节数组b中,并返回实际读取的字节数目。如果到达文件的末尾,则返回-1,参数off指定从字节数组的某个位置开始存放读取的数据。

3.关闭流

输入流都提供了关闭方法close(),虽然程序结束时会自动关闭所有打开的流,显示地关闭仍是一个良好的习惯。

4.测试

public class FileRead {public void write(String file) throws Exception{FileInputStream input = new FileInputStream(file);byte[] buf = new byte[256];int length = 0;while((length=input.read(buf))!=-1){String s = new String(buf,0,length);System.out.println(s);}input.close();}
}

二、文件字节输出流

1.构造方法

FileOutputStream(String name);
FileOutputStream(File file);

参数name和file指定的文件称为输出流的目的地。
如果输出流指向的文件不存在,Java就会创建该文件,如果指向的文件是已存在的文件,输出流将刷新该文件(使得文件长度为0)。

FileOutputStream(String name,boolean append);
FileOutputStream(File file,boolean append);

如果参数append取值true,输出流不会刷新所指向的文件,将从文件的末尾开始向文件写入数据。

2.使用输出流写字节

文件字节流可以调用从父类继承的write方法顺序地写文件。FileOutputStream流顺序地向文件写入内容,即只要不关闭流,每次调用write方法就顺序地向文件写入内容,直到流被关闭。

  1. void write(int n) 向目的地写入单个字节。
  2. void write(byte b[ ]) 向目的地写入一个字节数组。
  3. void write(byte b[ ],int off,int len) 给定字节数组中起始于偏移量off处取len个字节写到目的地。
  4. void close() 关闭输出流。

3.关闭流

需要注意的是,在操作系统把程序写到输出流的那些字节保存到磁盘上之前,有时被存放在内存缓冲区中,通过调用close()方法,可以保证操作系统把流缓冲区的内容写到它的目的地,即关闭输出流可以把该流所用的缓冲区的内容洗掉。

4.测试

public class FileWrite {public void write() throws Exception{byte[] a = "Haley, ".getBytes();byte[] b = "happy new year!".getBytes();FileOutputStream outputStream = new FileOutputStream("f:/1.txt");outputStream.write(a);outputStream = new FileOutputStream("f:/1.txt",true);outputStream.write(b);outputStream.close();}
}

三、文件字符输入、输出流

1.构造方法

FileReader(String filename);
FileReader(File filename);
FileWriter(String filename);
FileWriter(String filename);
FileWriter(String filename,boolean append);
FileWriter(File filename,boolean append);

字符输入流和输出流的read和write方法使用字符数组读写数据,即以字符为基本单位处理数据。

2.测试

public class FileRead {public void write() throws Exception{FileReader reader = new FileReader("f:/1.txt");FileWriter writer = new FileWriter("f:/2.txt");char[] c = new char[256];int length = 0;while((length=reader.read(c))!=-1){writer.write(c,0,length);}writer.flush();writer.close();reader.close();}
}

四、缓冲流

BufferedReader 和 BufferedWriter 类创建的对象称为缓冲输入、输出流,二者增强了读写文件的能力。

1.构造方法

BufferedReader(Reader in);
BufferedWriter(Writer out);

关闭输出流时要首先关闭缓冲输出流,然后关闭缓冲输出流指向的流,即先关闭上层流再关闭底层流。在编写代码时只需要关闭上层流,那么上层流的底层流将自动关闭。

2.测试

public class FileRead {public void write() throws Exception{FileReader reader = new FileReader("f:/1.txt");FileWriter writer = new FileWriter("f:/2.txt");BufferedReader bufferedReader = new BufferedReader(reader);BufferedWriter bufferedWriter = new BufferedWriter(writer);String string = null;while((string = bufferedReader.readLine())!=null){bufferedWriter.write(string);bufferedWriter.newLine();}bufferedWriter.flush();bufferedWriter.close();bufferedReader.close();writer.close();reader.close();}
}

五、随机流

RandomAccessFile类创建的流称作随机流,随机流的指向既可以作为流的源,也可以作为流的目的地。

1.构造方法

RandomAccessFile(String name,String mode);
RandomAccessFile(File file,String mode);

参数mode取r(只读)或rw(可读写)

RandomAccessFile流指向文件时,不刷新文件。

RandomAccessFile类中有一个方法seek(long a)用来定位RandomAccessFile流的读写位置,其中参数a确定读写位置距离文件开头的字节个数。另外流还可以调用getFilePointer()方法获取流的当前读写位置。

2.测试

public class FileRead {public void write() throws Exception{int[] data = {1,2,3,4,5,6,7,8,9};RandomAccessFile inAndOut = new RandomAccessFile("f:/2.txt","rw");for(int i=0;i<data.length;i++){inAndOut.writeInt(data[i]);}for(int i=data.length-1;i>=0;i--){long position = 4*i;inAndOut.seek(position);System.out.println(inAndOut.readInt());}}
}

六、数组流

1.字节数组流

//源是参数buf指定的数组的全部字节单元
ByteArrayInputStream(byte[] buf);
//源是buf指定的数组从offset处按顺序
ByteArrayInputStream(byte[] buf,int offset,int length);ByteArrayOutputStream();
ByteArrayOutputStream(int size);

2.字符数组流

CharArrayReader
CharArrayWriter

七、数据流

1.构造方法

DataInputStream(InputStream in);
DataOutputStream(OutputStream out);

它们允许程序按着机器无关的风格读取Java原始数据。也就是说,当读取一个数值时,不必关心这个数值应当是多少个字节。

2.测试

public class Test {public static void main(String[] args){try {FileOutputStream outputStream = new FileOutputStream("f:/1.txt");DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeInt(12);dataOutputStream.writeInt(13);dataOutputStream.writeInt(14);FileInputStream inputStream = new FileInputStream("f:/1.txt");DataInputStream dataInputStream = new DataInputStream(inputStream);System.out.println(dataInputStream.readInt());System.out.println(dataInputStream.readInt());System.out.println(dataInputStream.readInt());}catch (IOException e){e.printStackTrace();}}
}

八、对象流

1.构造方法

ObjectInputStream(InputStream in);
ObjectOutPutStream(OutputStream out);

当使用对象流写入或读入对象时,要保证对象是序列化的。这是为了保证能把对象写入到文件,并能再把对象正确读回到程序中。
一个类如果实现了Serializable接口,那么这个类创建的对象就是序列化的对象。

Java输入、输出流相关推荐

  1. java输出流缓冲区内容清除,Java输入输出流与缓冲区的使用

    Java输入输出流与缓冲区的使用,有需要的朋友可以参考下. 一,Input/Output流: 将外设中的数据读取到内存中就是输入. 将内存中的数据写入到外设中就是出. I/O流就是用来处理设备间的 . ...

  2. java实验10流_实验9 Java输入输出流

    <实验9 Java输入输出流>由会员分享,可在线阅读,更多相关<实验9 Java输入输出流(14页珍藏版)>请在金锄头文库上搜索. 1.山 西 大 学 计 算 机 与 信 息 ...

  3. Java输入/输出流体系中常用的流分类

    java输入/输出流体系中常用的流分类 分类 字节输入流 字节输出流 字符输入流 字符输出流 抽象基类 InputStream OutputStream Reader Writer 访问文件 File ...

  4. JAVA输入输出流学习心得

    JAVA输入输出流 本文主要从以下几个方面总结JAVA输入输出流 1.什么是流?什么是输入输出流? 2.字节流与字符流 3.Scanner 什么是流? 举个例子,水龙头里流出的水流就是流.从水龙头里流 ...

  5. java输入流从指定字节读取,JAVA输入输出流-字节流篇

    当前位置:我的异常网» 综合 » JAVA输入输出流-字节流篇 JAVA输入输出流-字节流篇 www.myexceptions.net  网友分享于:2013-08-14  浏览:8次 JAVA输入输 ...

  6. 【java开发系列】—— java输入输出流

    前言 任何语言输入输出流都是很重要的部分,比如从一个文件读入内容,进行分析,或者输出到另一个文件等等,都需要文件流的操作.这里简单介绍下reader,wirter,inputstream,output ...

  7. Java输入输出流IO

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  8. Java输入输出流和文件操作

    操作系统中的文件和目录概念 文件与文件系统 文件是信息的一种组织形式,是存储在外部存储介质上的具有标志名的一组相关信息集合. 文件系统用文件概念来组织和管理存放在各种介质上的信息.文件系统提供目录机制 ...

  9. [转]Java输入输出流的使用详细介绍

    出处:http://www.jb51.net/article/36138.htm 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进 ...

  10. Java基础知识每日总结(19)---Java输入输出流、文件、递归

    输入输出流.文件.递归 在变量.数组和对象中存储数据是暂时的,程序结束后它们则会丢失.为了能够永久地保存程序创建的数据,需要将其保存在磁盘文件中.这样以后就可以在其他程序中使用它们.Java的I/O技 ...

最新文章

  1. Java高并发编程基础之AQS
  2. LAMP环境搭建之rpm软件包
  3. 使用jQuery for Asp.Net 我的开发环境配置
  4. 《深入理解 Java 内存模型》读书笔记(上)(干货,万字长文)
  5. 成功解决ImportError: Could not find 'msvcp140.dll'. TensorFlow requires that this DLL be installed in a
  6. Windows系统下oracle数据库每天定时备份
  7. 浅析 Linux 初始化系统(系统服务管理和控制程序/Init System) -- systemd
  8. Pytorch Fashion_MNIST直接离线加载二进制文件到pytorch
  9. 成为中国最好的Magento开发公司
  10. 1纸画图边框_日常手帐1月下半月总结:清新、复古、简约风日常手帐排版都有...
  11. c++ 终止 超时_c++超时问题
  12. 初级c 语言题库,初级计算机考试题库
  13. 功能测试——测试流程1
  14. 终于解决 k8s 集群中部署 nodelocaldns 的问题
  15. 【.bash_profile 与 .bashrc 的区别】
  16. Python自学电子书大全
  17. s7200cpu224xp手册_S7-200 PLC DC224XP DC DC DC的接线图说明
  18. 信息安全管理体系ISO27001IT服务管理体系ISO20000(转)
  19. H5页面点击图片自动全屏代码
  20. JAVA漫天星星之菱形

热门文章

  1. 电脑开关机的正确操作。
  2. 一起玩转算法面试,保姆级攻略(附高清无码算法总结导图),建议收藏
  3. 24脉冲整流的Matlab仿真
  4. 聊城大学计算机学院格创,聊城大学计算机学院第九届科技学术节活动方案(9页)-原创力文档...
  5. MVP模式的Android 调用系统拍照,相册,剪裁,适配到7.0,修复拍照图片旋转问题
  6. 4种解决线程安全问题的方式
  7. 2023年最新前端面试题(数组相关)
  8. 鲸会务助力企业会议数字化升级,2021年重庆油气论坛夏季峰会成功举办
  9. 小红书如何推广 方法总结
  10. 计算机等级模拟题库二三级(免费免积分)