
IO流分类
按照数据流方向不同,分为 输入流,输出流
按照处理单位的不同,分为 字节流,字符流
按照功能的不同,可以分为 节点流,处理流
常用处理流:
缓冲流:BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter
转换流:字节流转换为字符流 InputStreamReader,OutputStreamWriter
数据流:DataInputStream,DataOutputStream 可以直接写入java中的数据类型writeInt(0 writeLong等等
Print流:PrintWriter(字符流) PrintStream(字节流) 不抛异常,自动flush();
print流常用代码:
/**
* 通过printstream写入到本地文件
*/
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class PrintIO {
public static void main(String[] args) {
PrintStream ps = null;
try {
FileOutputStream fos = new FileOutputStream("C:\\a.txt");
ps = new PrintStream(fos);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.setOut(ps);
System.out.println("dddddd");
}
}
/**
* 通过命令行传一个文件路径,打印出文件的内容
*/
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
public class PrintIO {
public static void main(String[] args) {
String filePath = args[0];
list(filePath, System.out);
}
private static void list(String filePath, PrintStream out) {
try {
BufferedReader br = new BufferedReader(new FileReader(filePath));
String s = null;
while ((s = br.readLine()) != null) {
out.println(s);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}}
/**
* 一个简单接受键盘输入的的日志类
*/
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Date;
public class PrintIO {
public static void main(String[] args) {
// 定义一个缓冲流从键盘接受信息(标准输入流,字符流),通过转换流转换成字节流
String s = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 定义一个输出流,把输入的信息写入到文件
try {
FileWriter fw = new FileWriter("c:\\log.txt");
// 定义一个PrintWriter工具流来帮忙
PrintWriter log = new PrintWriter(fw);
// 使用一个while循环,来多次输入信息,输入exit则输入结束
while ((s = br.readLine()) != null) {
if (s.equalsIgnoreCase("exit")) {
break;
}
log.println("----------------------------------------");
System.out.println(s.toUpperCase());
log.println(s.toUpperCase());
log.flush();
}
log.println("====" + new Date() + " ====");
log.flush();
log.close();
System.out.println("输入结束");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}}
Object流:直接将Object写入或者读出 既序列化
transient关键字
serializable接口
extenalizable接口:手动控制序列化,是serializable的子接口,其中有readExtenal方法和writeExternal方法要实现
示例:
/**
* 一个简单的java object流示例
*/
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class PrintIO {
public static void main(String[] args) {
T t=new T();
//定义一个基本的输出流
try {
//对象写入硬盘
FileOutputStream fos=new FileOutputStream("c:\\saveObject");
//创建一个基于fos的对象输出流
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(t);
//对象从硬盘读取
FileInputStream fis=new FileInputStream("c:\\saveObject");
//创建一个基于fis的对象输入流
ObjectInputStream ois=new ObjectInputStream(fis);
T t2=(T)ois.readObject();
System.out.println(t2);
} catch (Exception e) {
e.printStackTrace();
} }}
class T implements Serializable{
int a=1;
int b=2;
transient int c=3;
@Override
public String toString(){
return "a="+a+"\tb="+b+"\tc="+c;
}}
浙公网安备 33010602011771号