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

Java的基础知识5——流

2016-07-30 09:54 573 查看
1、流的分类:

按数据流的方向不同可以分为输入流和输出流

按处理数据单位不同可以分为字节流和字符流

按功能不同可以分为节点流和处理流

2、

\字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter
在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 s
d9fe
tatic 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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: