import java.io.FileInputStream;import java.io.FileOutputStream;/** * @author Hanlin Wang */public class FileStream { public static void main(String[] args) throws Exception { FileInputStream in = new FileInputStream("from.txt"); //準(zhǔn)備緩沖字節(jié)數(shù)組,大小為1024個字節(jié) byte[] buf = new byte[1024]; //開始時間 long start = System.currentTimeMillis(); //in讀取字節(jié),將讀取的字節(jié)保存到buf中。len為in向buf中保存的字節(jié)數(shù) int len = in.read(buf); //讀取完成之后,釋放資源 in.close(); //通過buf打印結(jié)果 System.out.PRintln(new String(buf, 0, len)); FileOutputStream out = new FileOutputStream("to.txt"); //將buf中的字節(jié)數(shù)組寫入到to.txt中 out.write(buf, 0, len); //釋放資源 out.close(); //結(jié)束時間 long end = System.currentTimeMillis(); //打印運行時間 System.out.println("運行時間為:"+(end - start)); }}
2、BufferedInputStream&BufferedOutputStream
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;/** * @author Hanlin Wang */public class BufferedStream { public static void main(String[] args) throws Exception { BufferedInputStream in = new BufferedInputStream( new FileInputStream("from.txt")); //字節(jié)數(shù)組 byte[] buf = new byte[1024]; //開始時間 long start = System.currentTimeMillis(); //len為已讀取的字節(jié)數(shù) int len = in.read(buf); //讀取完成后,釋放資源 in.close(); //打印讀取的數(shù)據(jù) System.out.println(new String(buf, 0, len)); BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("to.txt")); //寫入數(shù)據(jù)到to.txt out.write(buf, 0, len); //寫入完成后,釋放資源 out.close(); //結(jié)束時間 long end = System.currentTimeMillis(); //打印運行時間 System.out.println("運行時間為:"+(end - start)); }}
3、ByteArrayInputStream&ByteArrayOutputStream
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.FileOutputStream;/** * @author Hanlin Wang */public class ByteArrayStream { public static void main(String[] args) throws Exception{ //輸入流,通過構(gòu)造函數(shù)注入原始數(shù)據(jù) ByteArrayInputStream in = new ByteArrayInputStream("whataya want from me".getBytes()); //輸出流,接受輸入流的數(shù)據(jù) ByteArrayOutputStream out2 = new ByteArrayOutputStream(); int len; while ((len=in.read())!=-1) { out2.write(len); } //關(guān)閉資源 in.close(); //關(guān)閉資源 out2.close(); FileOutputStream out = new FileOutputStream("to.txt"); //將out2的數(shù)據(jù)通過toByteArray()方法位字節(jié)數(shù)組,然后out寫入to.txt out.write(out2.toByteArray()); //釋放資源 out.close(); }}
4、DataInputStream&DataOutputStream
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;/** * @author Hanlin Wang */public class DataStream { public static void main(String[] args) throws Exception{ //這里使用了三層裝飾 FileOutputStream des = new FileOutputStream("to.txt"); BufferedOutputStream buf = new BufferedOutputStream(des); DataOutputStream out = new DataOutputStream(buf); //運用DataOutputStream的相關(guān)方法寫數(shù)據(jù) out.writeBoolean(true);//寫入布爾值 out.writeByte(12);//寫入字節(jié)值 out.writeUTF("您好");//寫一個使用UTF-8編碼的字符串 out.writeChar('1');//寫入字符 out.close(); //讀取to.txt的數(shù)據(jù) FileInputStream des2 = new FileInputStream("to.txt"); BufferedInputStream buf2 = new BufferedInputStream(des2); DataInputStream in = new DataInputStream(buf2); //必須與之間寫入到to.txt的順序相同 System.out.println(in.readBoolean()); System.out.println(in.readByte()); System.out.println(in.readUTF()); System.out.println(in.readChar()); //釋放資源 in.close(); }}
5、ObjectInputStream&ObjectOutputStream
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;/** * @author Hanlin Wang */public class ObjectStream { public static void main(String[] args) throws Exception{ FileOutputStream out = new FileOutputStream("to.txt"); ObjectOutputStream objout = new ObjectOutputStream(out); //創(chuàng)建Person對象 Person p = new Person("張三", 19); //寫入to.txt objout.writeObject(p); //釋放資源 objout.close(); FileInputStream in = new FileInputStream("to.txt"); ObjectInputStream objin = new ObjectInputStream(in); //讀取to.txt中的數(shù)據(jù) Person p2 = (Person) objin.readObject(); System.out.println(p2.toString()); //釋放資源 objin.close(); }}//定義一個Person,實現(xiàn)Serializable接口,保證可序列化class Person implements Serializable{ private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String toString(){ return "姓名:" + name + " | 年齡:" + age; }}
6、SequenceInputStream
import java.io.ByteArrayInputStream;import java.io.FileOutputStream;import java.io.SequenceInputStream;import java.util.Enumeration;import java.util.Vector;/** * @author Hanlin Wang */public class SequenceStream { public static void main(String[] args) throws Exception{ //第一個inputstream ByteArrayInputStream in = new ByteArrayInputStream( "whataya want from me".getBytes()); //第二個inputstream ByteArrayInputStream in2 = new ByteArrayInputStream( "/nnever close our eyes".getBytes()); //釋放資源(因為in、in2不做讀寫操作) in.close(); in2.close(); //用一個集合封裝in、in2 Vector<ByteArrayInputStream> v = new Vector<ByteArrayInputStream>(); v.add(in); v.add(in2); Enumeration<ByteArrayInputStream> ele = v.elements(); //創(chuàng)建一個SequenceInputStream對象(SequenceInputStream ins = new SequenceInputStream(in, in2);亦可) SequenceInputStream ins = new SequenceInputStream(ele); FileOutputStream out = new FileOutputStream("to.txt"); //ins讀數(shù)據(jù),out寫數(shù)據(jù)。out將ins讀的數(shù)據(jù)寫入to.txt中 int len; while ((len=ins.read())!=-1) { out.write(len); } //釋放資源 ins.close(); out.close(); }}
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PipedInputStream;import java.io.PipedOutputStream;import java.io.PrintStream;/** * @author Hanlin Wang */public class PipedStream { public static void main(String[] args) throws Exception{ final PipedInputStream in = new PipedInputStream(); final PipedOutputStream out = new PipedOutputStream(); //連接 in.connect(out); //包裝out,用于向in寫入數(shù)據(jù) final PrintStream printer = new PrintStream(out); //從鍵盤中獲取數(shù)據(jù) final BufferedReader data = new BufferedReader( new InputStreamReader(System.in)); //reader包裝in,用于獲取數(shù)據(jù) final BufferedReader reader = new BufferedReader( new InputStreamReader(in)); //創(chuàng)建寫線程 new Thread(new Runnable() { public void run() { //將數(shù)據(jù)寫入out while (true) { try { String line = data.readLine(); System.out.println(Thread.currentThread().getName() + ",發(fā)送信息:"+line); System.out.println("/n發(fā)送中.../n"); Thread.sleep(5000); printer.println(line); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } }, "服務(wù)端線程").start(); //創(chuàng)建讀線程 new Thread(new Runnable() { public void run() { while (true) { try { System.out.println(Thread.currentThread().getName()+",收到信息:"+reader.readLine()); } catch (IOException e) { e.printStackTrace(); } } } }, "客戶端線程").start(); }}
8、PrintStream
import java.io.FileOutputStream;import java.io.PrintStream;/** * @author Hanlin Wang */public class PrintStream_ { public static void main(String[] args) throws Exception{ FileOutputStream out = new FileOutputStream("to.txt"); PrintStream printer = new PrintStream(out); //創(chuàng)建一個對象 Person p = new Person("李四", 24); //寫入to.txt, printer.println(p); printer.print("Hello, it's me"); //釋放資源 printer.close(); }}
字符流
1、FileReader&FileWriter
import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;/** * @author Hanlin Wang */public class FileReaderAndWriter { public static void main(String[] args) throws IOException { FileReader reader = new FileReader("from.txt"); //1024大小的字符數(shù)組 char[] buf = new char[1024]; //reader讀取字符,將讀取的字符存入buf中。len為讀取的字符數(shù)。 int len = reader.read(buf); //讀取完畢后。釋放資源 reader.close(); //打印讀取的信息 String str = new String(buf, 0, len); System.out.println(); FileWriter writer = new FileWriter("to.txt"); //將讀取的信息寫入to.txt writer.write(str); //寫入完成后,釋放資源 writer.close(); }}
2、BufferedReader&BufferedWriter
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;/** * @author Hanlin Wang */public class BufferedReaderAndWriter { public static void main(String[] args) throws Exception{ BufferedReader test = new BufferedReader(new FileReader("from.txt")); //BufferedReader中有一個readLine方法,返回一行字符串。循環(huán)打印 String line = null; while ((line=test.readLine())!=null) { System.out.println(line); } BufferedReader reader = new BufferedReader(new FileReader("from.txt")); char[] buf = new char[1024]; //len為寫入到buf的字符數(shù) int len = reader.read(buf); //讀取完成了,釋放資源 reader.close(); //通過buf字符獲取字符串 String str = new String(buf, 0, len); BufferedWriter writer = new BufferedWriter(new FileWriter("to.txt")); //寫入數(shù)據(jù)到to.txt writer.write(str); //寫入完成后,釋放資源 writer.close(); }}
3、CharArrayReader&CharArrayWriter
import java.io.CharArrayReader;import java.io.CharArrayWriter;import java.io.FileWriter;/** * @author Hanlin Wang */public class CharArrayReaderAndWriter { public static void main(String[] args) throws Exception{ //輸入流,通過構(gòu)造函數(shù)獲得原始數(shù)據(jù) CharArrayReader reader = new CharArrayReader("u make me wanna".toCharArray()); //輸出流,沒有目的地,寫入輸入流的數(shù)據(jù)到自己本身 CharArrayWriter writer2 = new CharArrayWriter(); //writer將reader中的數(shù)據(jù)寫入到自己本身,reader先讀取自己的數(shù)據(jù),復(fù)制給一個局部變量len int len; while ((len=reader.read())!=-1) { writer2.write(len); } //釋放資源 reader.close(); writer2.close(); FileWriter writer = new FileWriter("to.txt"); //將writer2轉(zhuǎn)換為字符數(shù)組,然后writer寫入之(轉(zhuǎn)換為字符串也可以) writer.write(writer2.toCharArray());//writer2.toString()亦可 //釋放資源 writer.close(); }}
4、PipedReader&PipedWriter
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PipedReader;import java.io.PipedWriter;import java.io.PrintWriter;/** * @author Hanlin Wang */public class PipedReaderAndWriter { public static void main(String[] args) throws Exception{ final PipedReader reader2 = new PipedReader(); final PipedWriter writer = new PipedWriter(); //連接 reader2.connect(writer); //讀取鍵盤數(shù)據(jù) final BufferedReader keyboard = new BufferedReader( new InputStreamReader(System.in)); //pw包裝writer final PrintWriter pw = new PrintWriter(writer); //reader包裝reader2,便于用readLine()方法讀取pw寫入的數(shù)據(jù) final BufferedReader reader = new BufferedReader(reader2); //寫數(shù)據(jù)線程 new Thread(new Runnable() { public void run() { while (true) { try { String line = keyboard.readLine(); System.out.println(Thread.currentThread().getName() + ",發(fā)送數(shù)據(jù):" + line); System.out.println("/n發(fā)送中.../n"); Thread.sleep(3000); pw.println(line); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } }, "服務(wù)端線程").start(); //讀數(shù)據(jù)線程 new Thread(new Runnable() { public void run() { while (true) { try { System.out.println(Thread.currentThread().getName() + ",收到數(shù)據(jù):"+reader.readLine()); } catch (IOException e) { e.printStackTrace(); } } } }, "客戶端線程").start(); }}
5、PrintWriter
import java.io.CharArrayReader;import java.io.CharArrayWriter;import java.io.FileWriter;import java.io.PrintWriter;/** * @author Hanlin Wang */public class PrintWriter_ { public static void main(String[] args) throws Exception{ CharArrayWriter writer = new CharArrayWriter(); PrintWriter pw = new PrintWriter(writer); pw.println("hahaha"); //釋放資源 pw.close(); CharArrayReader reader = new CharArrayReader(writer.toCharArray()); int len; while ((len=reader.read())!=-1) { System.out.print((char)len); } //釋放資源 reader.close(); }}
6、StringReader&StringWriter
import java.io.StringReader;import java.io.StringWriter;/** * @author Hanlin Wang */public class StringReaderAndWriter { public static void main(String[] args) throws Exception{ StringWriter writer = new StringWriter(); writer.write("whataya want from me"); writer.close(); StringReader reader = new StringReader(writer.toString()); int len; while ((len=reader.read())!=-1) { System.out.print((char)len); }//System.out.println(writer.toString()); reader.close(); }}