注:本博客内容来自马士兵javase教程中的IO节
字节流
字节型的输入输出
FileInputOutputStreamTest.java
package com.dao.chu;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileInputOutputStreamTest{
@SuppressWarnings("resource")
public static void main(String[] args) throws IOException {
try {
//读取文件
FileInputStream in = new FileInputStream("K:\\css\\style.css");
//写入文件
FileOutputStream out = new FileOutputStream("K:\\css\\style2.css");
int b=0;
while ((b=in.read())!=-1) {
System.out.print((char)b);
out.write((char)b);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
字符流
字符型的输入输出 (2个字节的读取,不会有将中文读出一半的现象)
FileReaderWriterTest
package com.dao.chu;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderWriterTest {
public static void main(String[] args) throws IOException {
FileReader read = new FileReader("K:\\css\\style.css");
FileWriter writer = new FileWriter("K:\\css\\style3.css");
int c=0;
while ((c=read.read())!=-1) {
System.out.print((char)c);
writer.write((char)c);
}
read.close();
writer.close();
}
}
处理流
包在别的流上的流
1.缓冲流,套接在相应的节点流之上,对读写提供缓冲的功能。提高读写效率,减少IO读写次数,保护硬盘。
BufferedReader提供readLine()用于读取一行字符串
BufferedWriter提供newLin()写一个行分隔符
BufferedReaderWriterTest
package com.dao.chu;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedReaderWriterTest {
@SuppressWarnings("resource")
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("K:\\css\\style.css"));
BufferedWriter bw = new BufferedWriter(new FileWriter("K:\\css\\style6.css"));
String a=null;
while ((a =br.readLine())!=null) {
System.err.println(a);
bw.write(a);
bw.newLine();
}
bw.flush();
br.close();
bw.close();
}
}
转换流
功能:把字节流转换为字符流,把字符流转换为字节流。
TransFormIOTest
package com.dao.chu;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class TransFormIOTest {
public static void main(String[] args) throws IOException {
//将字节流转换为字符流
InputStreamReader isReader = new InputStreamReader(new FileInputStream("K:\\css\\style.css"));
OutputStreamWriter otWriter = new OutputStreamWriter(new FileOutputStream("K:\\css\\style7.css"));
int a;
while ((a=isReader.read())!=-1) {
System.out.print((char) a);
otWriter.write((char) a);
}
isReader.close();
otWriter.close();
}
}
TransFormTest2
将输入的小写字母转为大写,输入exit则退出
package com.dao.chu;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TransFormTest2 {
public static void main(String[] args) throws IOException {
//转换流 字节流转换为字符流
InputStreamReader isReader = new InputStreamReader(System.in);
//缓冲流
BufferedReader br = new BufferedReader(isReader);
String s = br.readLine();
while (null!=s) {
if (s.equalsIgnoreCase("exit")) {
break;
}else {
System.out.println(""+s.toUpperCase());
s=br.readLine();
}
}
br.close();isReader.close();
}
}
数据流
用于存储和机器无关的java原始类型
DataAndByteArrayTest
package com.dao.chu;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class DataAndByteArrayTest {
public static void main(String[] args) throws IOException {
//字节数组处理输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//数据输出流
DataOutputStream dops = new DataOutputStream(baos);
dops.writeDouble(Math.random());
dops.writeBoolean(true);
//字节数组处理输入流
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
//数据输入流
DataInputStream dis = new DataInputStream(bais);
System.out.println(dis.available());
System.out.println(dis.readDouble());
System.out.println(dis.readBoolean());
baos.close();dops.close();bais.close();dis.close();
}
}
输出(第一行的意思是一共写了9个字节进去):
9
0.7450755910301042
true
打印流
(只有输出流,无输入流)
PrintStreamTest
package com.dao.chu;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
public class PrintStreamTest {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("K:\\css\\hello.data");
PrintStream ps = new PrintStream(fos);
if (null!=ps) {
//System默认输出在console中,这里设置在新的文件中,输出内容将在hello.data中
System.setOut(ps);
}
for (int i = 0; i < 65536; i++) {
System.out.print((char)i);
}
fos.close();
ps.close();
}
}
Object流
直接将Object写入或读出
该Object需序列化 implements Serializable
序列化的意思是直接将对象转换为字节流写入硬盘上
ObjecrtIOTest
package com.dao.chu;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class ObjecrtIOTest {
@SuppressWarnings("resource")
public static void main(String[] args) throws IOException, ClassNotFoundException {
//写入文件中
FileOutputStream out = new FileOutputStream("K:\\css\\style9.css");
ObjectOutputStream oos = new ObjectOutputStream(out);
T t = new T(5,5,"black");
oos.writeObject(t);
//从文件中读取
FileInputStream in = new FileInputStream("K:\\css\\style9.css");
ObjectInputStream ois = new ObjectInputStream(in);
T t2=(T)ois.readObject();
System.out.println(t2.toString());
out.close();
oos.close();
in.close();
}
}
class T implements Serializable{
private int hight;
private int with;
private String colorString;
public T(int hight, int with, String colorString) {
super();
this.hight = hight;
this.with = with;
this.colorString = colorString;
}
public int getHight() {
return hight;
}
public void setHight(int hight) {
this.hight = hight;
}
public int getWith() {
return with;
}
public void setWith(int with) {
this.with = with;
}
public String getColorString() {
return colorString;
}
public void setColorString(String colorString) {
this.colorString = colorString;
}
@Override
public String toString() {
return "T [hight=" + hight + ", with=" + with + ", colorString="
+ colorString + "]";
}
}
输出:
T [hight=5, with=5, colorString=black]