1、流的分类:
按数据流的方向不同可以分为输入流和输出流
按处理数据单位不同可以分为字节流和字符流
按功能不同可以分为节点流和处理流
2、
| \ | 字节流 | 字符流 |
|---|---|---|
| 输入流 | InputStream | Reader |
| 输出流 | OutputStream | Writer |
在Java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使OutputStream完成,输入使用的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。这四个都是抽象类。
3、DataInputStream和DataOutputStream分别继承自InputStream和OutputStream,它属于处理流,需要分别“套接”在InputStream和OutputStream类型的结点流上。DataInputStream 和DataOutputStream提供了可以存取与机器无关的Java原始类型数据(如:int,double等)的方法。
4、PrintWriter和PrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息。
PrintWriter和PrintStream有自动flush功能。
下面是一些简单的示例。
FileInputStream、FileOutputStream
import java.io.*;
public class Test{
public static void main(String args[]){
FileInputStream in = null;
FileOutputStream out = null;
int b;
try{
in = new FileInputStream("e:\\java\\Input.java");
out = new FileOutputStream("e:/java/Output.java");
}catch(FileNotFoundException e){
System.out.println("文件没有找到!");
System.exit(-1);
}
try{
while((b = in.read()) != -1){
out.write(b);
}
in.close();
out.close();
}catch(IOException e){
System.out.println("文件复制失败!");
System.exit(-1);
}
System.out.println("文件已复制。");
}
}
FileReader、FileWriter
import java.io.*;
public class Test {
public static void main(String args[]) {
FileReader in = null;
FileWriter out = null;
int b;
try {
in = new FileReader("e:\\java\\Input.java");
out = new FileWriter("e:/java/Output.java");
while ((b = in.read()) != -1) {
out.write(b);
}
in.close();
out.close();
} catch (FileNotFoundException e) {
System.out.println("文件没有找到!");
System.exit(-1);
} catch (IOException e) {
System.out.println("文件复制失败!");
System.exit(-1);
}
System.out.println("文件已复制。");
}
}
BufferedWriter、BufferedReader
import java.io.*;
public class Test {
public static void main(String args[]) {
try {
String s = null;
BufferedWriter bw = new BufferedWriter(new FileWriter("e:/java/Output.java"));
BufferedReader br = new BufferedReader(new FileReader("e:/java/Output.java"));
for(int i=0;i<10;i++){
bw.write(String.valueOf(Math.random()));
bw.newLine();
}
bw.flush();
while((s = br.readLine()) != null){
System.out.println(s);
}
bw.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
OutputStreamWriter、InputStreamReader
import java.io.*;
public class Test {
public static void main(String args[]) {
OutputStreamWriter osw = null;
InputStreamReader isr = null;
BufferedReader br = null;
int b = 0;
String s = null;
try {
osw = new OutputStreamWriter(new FileOutputStream("e:/java/Output.java"));
osw.write("Fern");
System.out.println(osw.getEncoding());
osw.flush();
osw = new OutputStreamWriter(new FileOutputStream("e:/java/Output.java",true),"ISO8859_1");
osw.write("\ngood girl");
System.out.println(osw.getEncoding());
osw.flush();
osw.close();
isr = new InputStreamReader(new FileInputStream("e:/java/Output.java"));
while((b = isr.read()) != -1){
System.out.print((char)b);
}
isr = new InputStreamReader(System.in);
br = new BufferedReader(isr);
s = br.readLine();
while(s != null){
if(s.equalsIgnoreCase("exit")){
System.out.println("退出程序。");
break;
}
System.out.println(s.toUpperCase());
s = br.readLine();
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件没有找到。");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ByteArrayOutputStream、ByteArrayInputStream、DataOutputStream、DataInputStream
import java.io.*;
public class Test {
public static void main(String args[]) {
ByteArrayOutputStream baos = null;
DataOutputStream dos = null;
ByteArrayInputStream bais = null;
DataInputStream dis = null;
try {
baos = new ByteArrayOutputStream();
dos = new DataOutputStream(baos);
dos.writeDouble(Math.random());
dos.writeBoolean(false);
dos.writeChar(65);
dos.flush();
bais = new ByteArrayInputStream(baos.toByteArray());
dis = new DataInputStream(bais);
System.out.println(dis.available());
System.out.println(dis.readDouble());
System.out.println(dis.readBoolean());
System.out.println(dis.readChar());
dos.close();
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
PrintStream
import java.io.*;
public class Test {
public static void main(String args[]) {
FileOutputStream fos = null;
PrintStream ps = null;
try {
fos = new FileOutputStream("e:/java/Output.java");
ps = new PrintStream(fos);
if(ps != null){
System.setOut(ps);
}
for(int i=1;i<=100;i++){
System.out.print(i + " ");
if(i%20 == 0){
System.out.println();
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
PrintWriter
import java.io.*;
import java.util.Date;
public class Test {
public static void main(String args[]) {
InputStreamReader isr = null;
BufferedReader br = null;
String s = null;
FileWriter fw = null;
PrintWriter pw = null;
try {
isr = new InputStreamReader(System.in);
br = new BufferedReader(isr);
br = new BufferedReader(isr);
fw = new FileWriter("e:/java/Output.java",true);
pw = new PrintWriter(fw);
while((s=br.readLine()) != null){
if(s.equalsIgnoreCase("exit")){
break;
}
pw.write(s);
pw.println();
}
pw.write("------"+new Date()+"------");
br.close();
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ObjectOutputStream、ObjectInputStream
import java.io.*;
public class Test {
public static void main(String args[]) {
FileOutputStream fos = null;
ObjectOutputStream oos = null;
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
Student s = new Student(110,"小蝶",18,'女');
fos = new FileOutputStream("e:/java/Output.java");
oos = new ObjectOutputStream(fos);
oos.writeObject(s);
oos.flush();
oos.close();
fis = new FileInputStream("e:/java/Output.java");
ois = new ObjectInputStream(fis);
s = (Student)ois.readObject();
System.out.println("学号:"+s.id+"\n姓名:"+s.name+"\n年龄:"+s.age+"\n性别:"+s.sex);
ois.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
class Student implements Serializable{
int id;
String name;
int age;
char sex;
public Student(int id,String name,int age,char sex){
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
}
如果要往文件中存储和读取多个对象的时候,可以使用下面的方法。(将多个对象存入数组中)
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
public class Test5 {
public static void main(String args[]) {
try {
ArrayList<Student> arrayOut = new ArrayList<Student>();
arrayOut.add(new Student(110,"Fern",18));
arrayOut.add(new Student(111,"Mike",29));
arrayOut.add(new Student(112,"Jack",78));
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e:/java/Output.java"));
oos.writeObject(arrayOut);
oos.flush();
oos.close();
ArrayList<Student> arrayIn = null;
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e:/java/Output.java"));
arrayIn = (ArrayList<Student>)ois.readObject();
ois.close();
Iterator<Student> i = arrayIn.iterator();
Student temp = null;
while(i.hasNext()){
temp = i.next();
System.out.println(temp);
}
System.out.println("\n第二种打印的方式(增强的for循环).\n");
for(Student s:arrayIn){
System.out.println(s);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
class Student implements Serializable{
int id;
String name;
int age;
Student(int id,String name,int age){
this.id = id;
this.name = name;
this.age = age;
}
public String toString(){
return("学号:"+this.id+" 姓名:"+this.name+" 年龄:"+this.age);
}
}
本文介绍了Java中的流分类,包括输入流、输出流、字节流、字符流、节点流和处理流。重点讲解了字节流中的OutputStream和InputStream,字符流中的Writer和Reader,以及DataInputStream和DataOutputStream的功能。此外,还提到了PrintWriter和PrintStream的特性,并给出了例如FileInputStream、FileOutputStream、BufferedReader和BufferedWriter等常见流的示例。

被折叠的 条评论
为什么被折叠?



