1:其他的流
1: DataOutputStream ;多了一些操作基本數(shù)據(jù)類型的功能
DataInputStream:讀取文件。
用DataOutputStream流寫進去的數(shù)據(jù),就用DataInputStream流來讀取。

1 import java.io.DataInputStream; 2 3 import java.io.DataOutputStream; 4 5 import java.io.FileInputStream; 6 7 import java.io.FileOutputStream; 8 9 import java.io.IOException;10 11 12 13 public class DateIODemo1 {14 15 16 17 public static void main(String[] args) throws IOException {18 19 20 21 FileOutputStream fos = new FileOutputStream("e://cc.txt");22 23 /*24 25 * 數(shù)據(jù)輸出流是一種處理流,所以應該傳入一個節(jié)點流作為參數(shù)26 27 * 數(shù)據(jù)輸出流寫到文本上的內(nèi)容是不是按照程序中的原樣寫進文件中的28 29 */30 31 DataOutputStream dos = new DataOutputStream(fos);32 33 34 35 dos.writeInt(123);//4字節(jié)36 37 dos.writeBoolean(false);//1字節(jié)38 39 dos.writeDouble(12.34);//8字節(jié)40 41 42 43 //數(shù)據(jù)輸出流是一種處理流,所以應該傳入一個節(jié)點流作為參數(shù)44 45 FileInputStream fis = new FileInputStream("e://cc.txt");46 47 DataInputStream dis = new DataInputStream(fis);48 49 50 51 //按順序讀取才能讀到正確的數(shù)據(jù)52 53 System.out.PRintln(dis.readInt());54 55 System.out.println(dis.readBoolean());56 57 System.out.println(dis.readDouble());58 59 60 61 dis.close();62 63 dos.close();64 65 66 67 }68 69 }View Code
2:關于內(nèi)存的流:不用制定硬盤中的某個文件路徑,因為所有的數(shù)據(jù)都是寫入到內(nèi)存上的,所以這些數(shù)據(jù)不會被永久保存。
2.1 ByteArrayOutputStream;內(nèi)存寫入流。如果不是字符,則可以調(diào)用toByteArray方法獲得內(nèi)存中的數(shù)據(jù)。

 1 import java.io.ByteArrayOutputStream; 2  3 import java.io.IOException; 4  5   6  7 public class ByteArrayOutputDemo1 { 8  9  10 11          public static void main(String[] args) throws IOException, InterruptedException {12 13                    ByteArrayOutputStream bos = new ByteArrayOutputStream();14 15                    bos.write("我寫的這些東西真的放到了內(nèi)存里面了".getBytes());16 17  18 19                    String str = bos.toString();20 21                    System.out.println(str);22 23                   24 25          }26 27 }28 29  View Code2.2 ByteArrayInputStream:內(nèi)存讀取流。

 1 import java.io.ByteArrayInputStream; 2  3 import java.io.IOException; 4  5   6  7 public class ByteArrayInputStreamDemo1 { 8  9          public static void main(String[] args) throws IOException {10 11                    byte[] b = "我真的真的在內(nèi)存里面".getBytes();12 13                    ByteArrayInputStream bis = new ByteArrayInputStream(b);14 15                    byte[] b2 = new byte[1024];16 17                    int len = -1;18 19                    while((len = bis.read(b2)) != -1){20 21                             System.out.println(new String(b2, 0, len));22 23                    }       24 25          }26 27 }View Code3:打印流: PrintStream 打印的所有字符都使用平臺的默認字符編碼轉(zhuǎn)換為字節(jié)。在需要寫入字符而不是寫入字節(jié)的情況下,應該使用 PrintWriter 類。
PrintStream
PrintWriter

 1 import java.io.BufferedReader; 2  3 import java.io.InputStream; 4  5 import java.io.InputStreamReader; 6  7 import java.io.PrintStream; 8  9 //接收鍵盤錄入,寫到文件中。10 11 public class PrintStreamDemo2 {12 13          public static void main(String[] args)throws Exception {14 15                    InputStream is = System.in;16 17                    BufferedReader br = new BufferedReader(new InputStreamReader(is));18 19                    //打印流。20 21                    PrintStream ps = new PrintStream("f://aaa.txt");22 23                    String str = null;24 25                    while(true){26 27                             str = br.readLine();28 29                             if("886".equals(str)){30 31                                      break;32 33                             }34 35                             ps.println(str);//將數(shù)據(jù)和換行寫到目的地中。36 37                    }38 39                    br.close();40 41          }42 43  44 45 }View Code4:RandomaccessFile:隨機流。這個流并不是像平時說的那樣“隨機”,只是程序員可以使用這個類類讀取文件中指定位置的數(shù)據(jù),或者在文件中指定是位置寫入數(shù)據(jù)。關鍵的方法就是seek();

 1 import java.io.FileNotFoundException; 2  3 import java.io.IOException; 4  5 import java.io.RandomAccessFile; 6  7   8  9 public class RandomAccessFiileDemo1 {10 11         12 13          public static void main(String[] args) throws IOException {14 15                    RandomAccessFile raf = new RandomAccessFile("e://cc.txt", "rw");16 17                    raf.writeBoolean(true);18 19                    raf.writeBytes("he");20 21 //               raf.writeFloat(123.99f);22 23                    raf.write(123);24 25                   26 27                    raf.seek(0);//可以讓指針指向文件的某個位置28 29                    System.out.println(raf.readBoolean());30 31                    System.out.println(raf.read());32 33                    System.out.println(raf.readInt());34 35                    //System.out.println(raf.readInt());36 37                   38 39                    raf.close();40 41                   42 43          }44 45         46 47  48 49 }View Code5:對象流. Object 操作對象的流
這里會涉及到一個關鍵字transient(中文:短暫的,臨時的),用來修飾成員變量。被static或者transient修飾的成員變量時改變量的值不會被對象流寫出去的,也不會被讀取到。對象流操作對象必須事項序列化接口Serializable,要不會出現(xiàn)java.io.InvalidClassException 無效的類型異常。

 1 import java.io.FileInputStream; 2  3 import java.io.FileOutputStream; 4  5 import java.io.IOException; 6  7 import java.io.ObjectInputStream; 8  9 import java.io.ObjectOutputStream;10 11  12 13 import com.java.domain.Student;14 15  16 17 public class WriterObjectDemo1 {18 19         20 21          public static void main(String[] args) throws IOException, ClassNotFoundException {22 23                    FileOutputStream fos = new FileOutputStream("e://stu.txt");24 25                    ObjectOutputStream oos = new ObjectOutputStream(fos);26 27                   28 29                    oos.writeObject(new Student("zzz", 12));30 31                    oos.close();32 33                   34 35                    // java.io.InvalidClassException 無效的類型異常36 37                   38 39                    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e://stu.txt"));40 41                    System.out.println(ois.readObject());42 43                    ois.close();44 45                   46 47                   48 49          }50 51  52 53 }View Code
import java.io.Serializable; public class Student implements Serializable {         //使用對象         private static final long serialVersionUID = 1L;         private String name;         //private static int age;         private transient int age;//      private int age;                 public Student() {                   super();                   // TODO Auto-generated constructor stub         }         public Student(String name, int age) {                   super();                   this.name = name;                   this.age = age;         }         @Override         public String toString() {                   return "Student [name=" + name + ", age=" + age + "]";         }         public void test(){                           }        }Student類6:文件類. File
6.1:File:表示文件或者目錄。
6.2 常用的一些方法
delete() 刪除文件或目錄。
exists() 判斷文件或目錄是否存在。
getAbsoluteFile() 返回路徑名的絕對路徑名形式。返回值-File
getAbsolutePath() 返回路徑名的絕對路徑名字符串。返回值-String
getName() 返回由路徑名表示的文件或目錄的名稱。
boolean isDirectory() 路徑名表示的文件是否是一個目錄。
boolean isFile() 路徑名表示的文件是否是一個標準文件。
length() 返回路徑名表示的文件的長度。
String[]  | list()返回一個字符串數(shù)組,這些字符串指定此抽象路徑名表示的目錄中的文件和目錄。  | 
String[]  | list(FilenameFilterfilter)返回一個字符串數(shù)組,這些字符串指定此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。  | 
File[]  | listFiles()返回一個抽象路徑名數(shù)組,這些路徑名表示此抽象路徑名表示的目錄中的文件。  | 
File[]  | listFiles(FileFilterfilter)返回抽象路徑名數(shù)組,這些路徑名表示此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。  | 
File[]  | listFiles(FilenameFilterfilter)返回抽象路徑名數(shù)組,這些路徑名表示此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。  | 
mkdir() 創(chuàng)建此抽象路徑名指定的目錄(只能創(chuàng)建一層)。
mkdirs() 創(chuàng)建此抽象路徑名指定的目錄(可創(chuàng)建多層)。
經(jīng)典示例:
// 遍歷所有文件
 1   public static void getFiles(String path) { 2  3   4  5                    File file = new File(path); 6  7                    if (!file.exists()) { 8  9                             System.out.println("沒有找到該路徑或者文件");10 11                             return;12 13                    }14 15                    if (file.isFile()) {16 17                             System.out.println(file.getAbsolutePath());18 19                    } else {20 21                             System.out.println(file.getAbsolutePath());22 23                             File[] files = file.listFiles();24 25                             // 遍歷文件26 27                             for (File file2 : files) {// 遞歸遍歷28 29                                      // 如果是目錄在重新調(diào)用自己30 31                                      getFiles(file2.getAbsolutePath());32 33                             }34 35                    }36 37          }// 刪除所有文件
 1   public static void deleteFile2(String path) { 2  3                    File file = new File(path); 4  5                    if (!file.exists()) { 6  7                             return; 8  9                    }10 11                    if (file.isFile()) {12 13                             file.delete();14 15                    } else {16 17                             File[] files = file.listFiles();18 19                             for (File file2 : files) {20 21                                      deleteFile2(file2.getAbsolutePath());22 23                             }24 25                             file.delete();26 27                    }28 29          }新聞熱點
疑難解答