Java输入、输出流
一、文件字节输入流
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方法就顺序地读取文件中的其余内容,直到文件的末尾或文件字节输入流被关闭。
- int read() 从源中读取单个字节的数据,该方法返回字节值(0~255之间的一个整数),如果未读出字节就返回-1.
- int read(byte b[ ]) 从源中试图读取b.length个字节到字节数组b中,返回实际读取的字节数目。如果到达文件的末尾,则返回-1。
- 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方法就顺序地向文件写入内容,直到流被关闭。
- void write(int n) 向目的地写入单个字节。
- void write(byte b[ ]) 向目的地写入一个字节数组。
- void write(byte b[ ],int off,int len) 给定字节数组中起始于偏移量off处取len个字节写到目的地。
- 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输入、输出流相关推荐
- java输出流缓冲区内容清除,Java输入输出流与缓冲区的使用
Java输入输出流与缓冲区的使用,有需要的朋友可以参考下. 一,Input/Output流: 将外设中的数据读取到内存中就是输入. 将内存中的数据写入到外设中就是出. I/O流就是用来处理设备间的 . ...
- java实验10流_实验9 Java输入输出流
<实验9 Java输入输出流>由会员分享,可在线阅读,更多相关<实验9 Java输入输出流(14页珍藏版)>请在金锄头文库上搜索. 1.山 西 大 学 计 算 机 与 信 息 ...
- Java输入/输出流体系中常用的流分类
java输入/输出流体系中常用的流分类 分类 字节输入流 字节输出流 字符输入流 字符输出流 抽象基类 InputStream OutputStream Reader Writer 访问文件 File ...
- JAVA输入输出流学习心得
JAVA输入输出流 本文主要从以下几个方面总结JAVA输入输出流 1.什么是流?什么是输入输出流? 2.字节流与字符流 3.Scanner 什么是流? 举个例子,水龙头里流出的水流就是流.从水龙头里流 ...
- java输入流从指定字节读取,JAVA输入输出流-字节流篇
当前位置:我的异常网» 综合 » JAVA输入输出流-字节流篇 JAVA输入输出流-字节流篇 www.myexceptions.net 网友分享于:2013-08-14 浏览:8次 JAVA输入输 ...
- 【java开发系列】—— java输入输出流
前言 任何语言输入输出流都是很重要的部分,比如从一个文件读入内容,进行分析,或者输出到另一个文件等等,都需要文件流的操作.这里简单介绍下reader,wirter,inputstream,output ...
- Java输入输出流IO
1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...
- Java输入输出流和文件操作
操作系统中的文件和目录概念 文件与文件系统 文件是信息的一种组织形式,是存储在外部存储介质上的具有标志名的一组相关信息集合. 文件系统用文件概念来组织和管理存放在各种介质上的信息.文件系统提供目录机制 ...
- [转]Java输入输出流的使用详细介绍
出处:http://www.jb51.net/article/36138.htm 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进 ...
- Java基础知识每日总结(19)---Java输入输出流、文件、递归
输入输出流.文件.递归 在变量.数组和对象中存储数据是暂时的,程序结束后它们则会丢失.为了能够永久地保存程序创建的数据,需要将其保存在磁盘文件中.这样以后就可以在其他程序中使用它们.Java的I/O技 ...
最新文章
- Java高并发编程基础之AQS
- LAMP环境搭建之rpm软件包
- 使用jQuery for Asp.Net 我的开发环境配置
- 《深入理解 Java 内存模型》读书笔记(上)(干货,万字长文)
- 成功解决ImportError: Could not find 'msvcp140.dll'. TensorFlow requires that this DLL be installed in a
- Windows系统下oracle数据库每天定时备份
- 浅析 Linux 初始化系统(系统服务管理和控制程序/Init System) -- systemd
- Pytorch Fashion_MNIST直接离线加载二进制文件到pytorch
- 成为中国最好的Magento开发公司
- 1纸画图边框_日常手帐1月下半月总结:清新、复古、简约风日常手帐排版都有...
- c++ 终止 超时_c++超时问题
- 初级c 语言题库,初级计算机考试题库
- 功能测试——测试流程1
- 终于解决 k8s 集群中部署 nodelocaldns 的问题
- 【.bash_profile 与 .bashrc 的区别】
- Python自学电子书大全
- s7200cpu224xp手册_S7-200 PLC DC224XP DC DC DC的接线图说明
- 信息安全管理体系ISO27001IT服务管理体系ISO20000(转)
- H5页面点击图片自动全屏代码
- JAVA漫天星星之菱形