您的位置:首页 > 编程语言 > Java开发

【Java基础】IO流操作

2013-01-16 00:00 836 查看

一、IO流概念:

输入输出流,也就是可以用来读写数据,以及上传下载数据。

二、分类:

1、从流的对象来分:

1)高端流:所有程序或者内存中的流都称为高端流。

2)低端流:所有外界设备中的流都是低端流。

如何区分到底是高端流还是低端流:

一般来说流的对象的后缀包含reader或者writer一般都是高端流,否则是低端流。(除了PrintStream,PrintStream也是高端流)

2、从数据的流向来分:

1)输入流:从外界设备-->程序,也就是读数据的动作。

2)输出流:从程序-->外界设备,也就是写数据的动作。

3、从数据的格式来分:

1)字节流:是用来处理声音或者图片等等二进制信息的流。

2)字符流:用来处理字符数据的流。

4、从流的对象是否需要包装来分:

1)原始流:流在实例化过程中,不需要通过另外一个流来包装自己的流。

2)包装流:流在实例化过程中,需要通过另外一个流来包装自己的流。

原始流都是低端流,包装流都是高端流。

三、常用IO流:

1、文件操作

字节流:
1)FileOutputStream
2)FileInputStream
字符流:
3)FileWriter
4)FileReader
区别:
(1)字节流的操作是直接与文件本身关联,不使用缓冲区;
(2)字符流的操作是通过缓冲区与文件关联。
一般都使用字节流,中文操作采用字符流。

2、内存操作流(多用于Java web)

5)ByteArrayOutputStream 内存向程序输出
6)ByteArrayInputStream 程序向内存输入

package io.demo;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
public class ByteArrayDemo {
public static void main(String[] args) {
String str = "Hello World";
ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes()); // 内存输入流,将str输入保存在内存中
ByteArrayOutputStream bos = new ByteArrayOutputStream(); // 内存输出流,内容输出
int temp = 0;
while ((temp = bis.read()) != -1) {
bos.write((char) temp);
}
System.out.println(bos.toString());// bos.toString()取出内存输出内容
}
}

3、BufferReader:缓冲区读取

package io.demo;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class BufferReaderIODemo {
public static void main(String[] args) {
//输出c:\demo.txt文件的内容
File file = new File("C:" + File.separator + "demo.txt");
if (file.exists())
try {
InputStreamReader isr = new InputStreamReader(
new FileInputStream(file));
BufferedReader buf = new BufferedReader(isr);

while (true ) {
String str=buf.readLine();
if(null ==str){
break;
}
System. out.println(str);
}
buf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

4、java提供两个类用于字节-字符流的转换

7)InputStreamReader:将字节的输入转换为字符流
8)OutputStreamWriter:将字符的输出流转换为字节流的输出

5、对象序列化:Serializable

9)ObjectOutputStream:对象序列化
10)ObjectInputStream:对象反序列化
首先需要实现序列化的对象必须实现 java.io.Serializable接口。

package io.demo;
import java.io.Serializable;
//Person類要實現 Serializable接口
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
public Person(String name, int age) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return this .name + ":" + this.age ;
}
private String name;
private int age ;
}
package io.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class ObjIODemo {
public static void main(String[] args) throws ClassNotFoundException {
File file = new File("c:" + File.separator + "demo.txt");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
// 輸出流,以對象的形式寫入文件c:\demo.txt
ObjectOutputStream objo = null;
try {
objo = new ObjectOutputStream(new FileOutputStream(file));
objo.writeObject( new Person("諸葛亮" , 22));
objo.writeObject( new Person("魯樹" , 23));
objo.writeObject( new Person("孔明" , 25));
objo.writeObject( new Person("valiate" , 26));
objo.close();
} catch (Exception e) {
e.printStackTrace();
}
// 從c:\demo.txt以對象的形式讀出
ObjectInputStream obji = null;
try {
obji = new ObjectInputStream(new FileInputStream(file));
while (true ) {
Person per = (Person) obji.readObject();
if (null == per)
break;
System. out.print(per + " " );
per = (Person) obji.readObject();
}
obji.close();
} catch (Exception e) {
// 讀到文件結束符EOF會拋出EOFException異常,屏蔽異常信息輸出
// e.printStackTrace();
}
}
}
//諸葛亮:22 魯樹:23 孔明:25 valiate:26
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐