http://download.csdn.net/detail/qq285016127/7963747
Java对文件的操作API一般分为字节流 字符流 其为文件的读写API框架也是通过这个思想去扩展的.另外,在流的流向中也分为源流和宿流.如图(流的主体是根据流向决定,如输入InputStream/输出流OutPutStream)
<1>从整个框架上看,io流的主要知识点分为:
1.字节流(输入FileInputStream/输出FileOutputStream)
1)字节流的构造一般都会通过文件File类,或者文件的绝对路径
2)文件的读取需要FileInputStream类,其read()提供了3个方法,需要我们提供最基本的byte字节数组,该数组作为缓冲流数据默认情况下,没有参数的时候系统会默认一个只有长度1的数组.每次读完,即把数据放在缓冲区中.
3)FileInputStream提供了available()对象方法,返回未阻塞的数据长度.一般数据较小的情况下 ,我们可以声明缓冲区的长度为此长度.一次读入内存;
4)文件的写入需要FileOutputStream类,其write()也提供了上面三种类型的方法.
示例代码如下:
/**
* 字节流简单应用
*
* @author Lean @date:2014-9-22
*/
public class OutputStreamSample {
public static void main(String[] args) {
String filePath = "C:/Users/Administrator/Desktop/aa.txt";
String outFilePath = "C:/Users/Administrator/Desktop/bb.txt";
InputStream fis=null;
OutputStream fos=null;
int readNum=0;
//必须为2的n次方,因为数据可能存在字符
byte[] buff=new byte[2];
try {
fis=new FileInputStream(filePath);
//通过File,File全路径 或者文件描述器构造 如果没有文件 则自动创建
fos=new FileOutputStream(outFilePath);
while ((readNum=(fis.read(buff)))!=-1) {
//根据偏移量写入文件
fos.write(buff,0,readNum);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if (fos!=null) {
fos.close();
}
if (fis!=null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2.字符流,也有称为转换流(InputStreamReader/OutputStreamWriter)
1)字符转换流,沿用上面的思想,也提供了读取操作,只不过该缓冲区的定义数组为char[ ];
2)字符转换流为字节流的装饰器,集成了字节流的优势,效率较高.代码如下:
/**
* 字符流简单应用
*
* @author Lean @date:2014-9-22
*/
public class CharacterIOSample {
public static void main(String[] args) {
final String filePath = "C:/Users/Administrator/Desktop/aa.txt";
final String outFilePath = "C:/Users/Administrator/Desktop/bb.txt";
Writer writer=null;
Reader reader=null;
char[] buff=new char[512];
int readNum=0;
try {
reader=new InputStreamReader(new FileInputStream(filePath));
writer=new OutputStreamWriter(new FileOutputStream(outFilePath));
while ((readNum=reader.read(buff))!=-1) {
writer.write(buff,0,readNum);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if (writer!=null) {
writer.close();
}
if (reader!=null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
3.缓冲流(BufferedReader/BufferedWriter)
1)缓冲流为字符转换流的装饰器,集成了字符转换流的优势,效率有所较高,并提供了读取整行,写入整行的方法.
2)缓冲流,顾名思义就是内置了缓冲数据,我们不需要为此再写缓冲数据(char[] / byte[]);
/**
* 内置缓冲流简单应用
*
* @author Lean @date:2014-9-22
*/
public class BufferedIOSample {
public static void main(String[] args) {
final String filePath = "C:/Users/Administrator/Desktop/aa.txt";
final String outFilePath = "C:/Users/Administrator/Desktop/bb.txt";
BufferedWriter writer = null;
BufferedReader reader = null;
String appendStr =null;
try {
reader = new BufferedReader(new InputStreamReader(
new FileInputStream(filePath)));
writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(outFilePath)));
while ((appendStr = reader.readLine()) != null) {
System.out.println(appendStr);
writer.write(appendStr);
}
writer.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if (writer!=null) {
writer.close();
}
if (reader!=null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
4.对象流(ObjectOutputStream/ObjectInputStream)
1)该流可以把数据保存到文件中去,保存的对象需要实现Serializable接口,并实现序列码(修改该类有用)
2)如果保存的对象属性也为对象,也必须实现上面的接口.实现该接口的作用为支持持久化/网络传输
3)保存的对象文件乱码,无法直接打开.但如果想更加安全,必须实现另一个接口Externalizable实现自己的保存策略.
/**
*
*
* @author Lean @date:2014-9-22
*/
public class ObjectIOSample {
public static void main(String[] args) {
saveObject();
readObject();
}
public static void saveObject(){
String filePath="C:\\Users\\Administrator\\Desktop\\cc.txt";
ObjectOutputStream oos=null;
try {
oos=new ObjectOutputStream(new FileOutputStream(filePath));
oos.writeObject(new Student(1, "Lean", 82));
oos.writeObject(new Student(2, "Lucy", 62));
oos.writeObject(new Student(3, "Lout", 85));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if (oos!=null) {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void readObject(){
String filePath="C:\\Users\\Administrator\\Desktop\\cc.txt";
ObjectInputStream ios=null;
try {
ios=new ObjectInputStream(new FileInputStream(filePath));
Object object=null;
for (int i = 0; i < 3; i++) {
System.out.println(ios.readObject());
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if (ios!=null) {
try {
ios.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
/**
* @author Lean @date:2014-9-22
*/
public class Student implements Serializable{
private int id;
private String name;
private int score;
public Student(int id, String name, int score) {
this.id = id;
this.name = name;
this.score = score;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", score=" + score
+ "]";
}
}
(PS:另一章高级部分正在总结....)
分享到:
相关推荐
1.创建文件,文件位置为相较于当前工程的位置,不然会报FileNotFoundException 2.新建流:FileReader reader = new F
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
Java进阶IO流讲义大全.docx
Java进阶13天资料 day01-复习回顾、静态、继承、引用类型使用 day02-抽象类、接口、代码块,final、单例、枚举 day03-多态、包、权限修饰符、内部类,Object类,Date类 day04-常用API、正则表达式,泛型、Collection...
Java基础和Java进阶: 1、Junit使用流程 2、集合进阶(一) 3、集合框架(二) 4、Stream流 5、进阶测试 6、IO流 7、算法(部分) 8、多线程 9、网络编程 10、Java高级
主要介绍了Java进阶教程之IO基础,这里只是对Java IO的基本介绍,包含读取和写入等操作,需要的朋友可以参考下
├─1.06 Nginx进阶基础-IO多路复用及内部技术架构.mp4 ├─1.07 Nginx进阶基础-虚拟主机.mp4 ├─1.08 Nginx进阶基础-虚拟主机.mp4 ├─2.01 Nginx进阶常见配置-虚拟主机+PHP-FPM.mp4 ├─2.02 Nginx进阶-常见配置-...
本教程适合有一定编程语言基础的学员观看,主要讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师语言表达流利,思路清晰。...
27天实现java从入门到进阶 第一天:语言环境 第二天:常量变量 第三天:流程控制 第四、五天:方法与数组 第六天:类 第七天:对象的出生 第八天:类与类继承 第九天:具体到抽象的升华 第10天:权限内部类包 第11天...
该代码源码资源是一个用于讲解Java IO流的示例代码库。它包含了常见的IO类和方法的使用示例,旨在帮助理解和掌握Java中的输入输出操作。 包含: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、...
Java进阶课程代码包含文件读写IO流,递归算法思想,数组排序、生产模式(单体、工厂)
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
《O’reilly-Java IO》- 推荐* (包含Java IO编程的各个方面) 《O’reilly-Database Programming with JDBC》- 推荐* (JDBC编程) 《O’reilly-Java Programming with Oracle JDBC》- 参考* 三、Java Web编程 ...
您应该多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、线程。如果可能,希望您对JAVA的所有包都浏览一下,知道大概的API,这样您就发现其实您想实现的很多功能,通过JAVA的API都可以实现了,就不必自己费太...