1. 程式人生 > >Java IO流總結(二)-示例

Java IO流總結(二)-示例

一行 spa ascii 路徑名 指向 每次 字節數 判斷 pri

1.使用文件操作的9大方法完成文件的判斷

判斷文件或目錄是否存在 : exits() 返回值boolean型
* 判斷是否是文件: isFile() boolean
* 判斷是否是目錄: isDiectory() boolean
* 返回此對象表示的文件的相對路徑: getPath() String
* 返回此對象表示的文件的絕對路徑: getAbsolutePath() String
* 返回此對象表示的文件或目錄的名稱: getName() String
* 刪除此對象指定的文件或目錄: delete() boolean
* 創建名稱的空文件(不是文件夾): createNewFile() blloean


* 返回文件的長度 單位為字節,如果文件不存在,則返回0L :length() long

技術分享圖片
 1 package cn.filetest;
 2 
 3 import java.io.File;
 4 import java.util.Scanner;
 5 
 6 public class TestFileMethods {
 7 
 8     /**案例1,使用文件操作的9大方法完成文件的判斷
 9      * @param args
10      * 判斷文件或目錄是否存在 : exits()  返回值boolean型
11      * 判斷是否是文件: isFile()  boolean
12 * 判斷是否是目錄: isDiectory() boolean 13 * 返回此對象表示的文件的相對路徑: getPath() String 14 * 返回此對象表示的文件的絕對路徑: getAbsolutePath() String 15 * 返回此對象表示的文件或目錄的名稱: getName() String 16 * 刪除此對象指定的文件或目錄: delete() boolean 17 * 創建名稱的空文件(不是文件夾): createNewFile() blloean 18 * 返回文件的長度 單位為字節,如果文件不存在,則返回0L :length() long
19 */ 20 public static void main(String[] args) { 21 try { 22 fileClassMeth(); 23 } catch (Exception e) { 24 e.printStackTrace(); 25 } 26 } 27 28 public static void fileClassMeth() throws Exception{ 29 30 //將異常拋出,由調用者處理!!! 31 //1.實例化對象,指定判斷的路徑 32 File file = new File("aa\\bb\\3.txt"); 33 //2.判斷1.txt是否存在 exits() 34 if(file.exists()) { 35 if(file.isDirectory()) { 36 //判斷如果是目錄,輸出當前路徑是文件夾 37 System.out.println("當前路徑是文件夾"); 38 } else { 39 System.out.println("當前路徑是文件"); 40 System.out.println("當前文件存在"); 41 System.out.println("文件的絕對完整路徑:" + file.getAbsolutePath() + file.getName()); 42 System.out.println("文件名為:" + file.getName()); 43 System.out.println("文件的相對路徑:" + file.getPath()); 44 System.out.println("文件的上一級目錄:" + file.getParent()); 45 System.out.println("文件的長度:" + file.length()); 46 } 47 System.out.println("請按1完成刪除操作:"); 48 Scanner input = new Scanner(System.in); 49 if(input.nextInt() ==1) { 50 boolean bool = file.delete(); 51 if(bool) { 52 System.out.println("刪除成功"); 53 } 54 } 55 56 } else { 57 System.out.println("當前文件不存在"); 58 //3.當文件不存在,創建文件 59 boolean bool = file.createNewFile(); 60 if(bool) { 61 System.out.println("創建文件成功"); 62 } 63 } 64 65 66 } 67 }
View Code

2.字節流的讀寫操作:

FileInputStream fin = new FileInputStream("D:\\temp\\aa.txt");

byte[] b = new byte[fin.available()]; // fin.available() 可讀取的字節數

fin.read(b); // 從內容索引號為1的位置讀取2個字符並保存在字節數組b中,讀取第一個字節數據並轉換為該字節數據的ASCII碼

FileOutputStream fo = new FileOutputStream("D:\\temp\\b.txt",true); // true:追加, false :覆蓋
fo.write(b);

技術分享圖片
 1 package cn.filetest;
 2 
 3 import java.io.FileInputStream;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6 
 7 public class TestFileMthods1 {
 8 
 9     /**
10      * 案例1 字節流的讀寫操作 字節流的讀: int asz = fin.read();
11      * 
12      */
13     public static void main(String[] args) {
14         fileReaderMehtod1(); // main()方法直接調用本類靜態方法
15     }
16 
17     public static void fileReaderMehtod1() {
18         FileInputStream fin = null;
19         FileOutputStream fo = null; // 為了能夠在該靜態方法任何位置訪問,放在try語句外面
20         try {
21             // 1.實例化輸入流,指向 1.txt文件,該文件必須事先存在!否則拋出fileNotFoundException
22             fin = new FileInputStream("D:\\temp\\aa.txt");
23             /*FileInputStream類的構造方法FileInputStream(String name)
24              * 通過打開一個到實際文件的連接來創建一個 FileInputStream,該文件通過文件系統中的路徑名 name 指定 */
25             System.out.println("可讀取字節個數為:" + fin.available());    // 2.定義一個字節數組(中轉數組)
26             byte[] b = new byte[fin.available()]; // fin.available() 可讀取的字節數
27             // 3.從輸入流指向的地址1.txt中讀取字節,存儲在字節數組中
28             // 讀取一個字節到字節數組b中;fin.read()則是讀取第一個字節數據並轉換為該字節數據的ASCII碼
29             fin.read(b); // 從內容索引號為1的位置讀取2個字符並保存在字節數組b中
30             // 4.輸出每個字節,輸出結果是字母對應的ASCII碼!!!!!fin.read(b)返回的是int類型!!!但寫入的文件中會正常顯示,而不是顯示ASCII碼
31             for (byte c : b) {
32                 System.out.print(c + "-" + (char) c + "\n");
33             }
34             // 5.將字節輸出到指定的路徑下:
35             fo = new FileOutputStream("D:\\temp\\b.txt",true);    // true:追加, false :覆蓋
36             fo.write(b);// 將字符數組b中的字節寫入2.txt中
37             System.out.println("\n寫入成功");
38         } catch (Exception e) {
39             e.printStackTrace();
40         } finally {// 6.關閉輸入輸出流
41             try {
42                 if (fo != null) {
43                     fo.close();
44                 }
45                 if (fin != null) {
46                     fin.close();
47                 }
48             } catch (IOException e) {
49                 e.printStackTrace();
50             }
51 
52         }
53     }
54 
55 }
View Code

3.BufferedReader 、 BufferedWriter、 FileReader、FileWriter

(1)BufferedReader類是Reader類的子類,它與FileReader類的區別在於BufferedReader帶有緩沖區,可以先把一批數據讀到緩沖區,接下來的讀操作都是從緩沖區內獲取數據,避免每次都從數據源讀取數據進行字符換貨,從而提高讀取操作的效率:

BufferedReader br2 = new BufferedReader(new FileReader(new File("D:\\temp\\aa.txt")));

String line = br.readLine(); // BufferedReader類的readLine()方法返回一個字符串!!!每執行該語句一次,讀取一行的內容

(2)BufferedWriter類把一批數據寫到緩沖區,當緩沖區寫滿時,再把緩沖區的數據寫到字符輸出流中,可以避免每次都執行物理寫操作,提高輸入輸出操作的效率

BufferedWriter bw = new BufferedWriter(new FileWriter(new File("D:\\temp\\2.txt")));

bw.write("ddd");

bw.flush(); // 刷新緩沖區寫入

技術分享圖片
  1 package cn.filetest;
  2 
  3 import java.io.BufferedReader;
  4 import java.io.BufferedWriter;
  5 import java.io.File;
  6 import java.io.FileNotFoundException;
  7 import java.io.FileReader;
  8 import java.io.FileWriter;
  9 import java.io.IOException;
 10 import java.io.Reader;
 11 import java.io.Writer;
 12 
 13 public class TestFileMethod2 {
 14 
 15     /**
 16      * BufferedReader 
 17      * BufferedWriter
 18      * FileReader
 19      * @param args
 20      */
 21     public static void main(String[] args) {
 22         charReader();
 23         BufReader();
 24         charWriter();
 25     }
 26 
 27     /**
 28      * 字符流的寫(寫入磁盤上的文件中)
 29      */
 30     public static void charWriter() {
 31         // 1.定義一個寫入接口變量,將其子類FileWriter對象實例化
 32         Writer wr = null;
 33         BufferedWriter bw = null;
 34         // 2.實例化一個文件寫入類的子類
 35         try {
 36             File fi = new File("D:\\temp\\2.txt");
 37             wr = new FileWriter(fi); // 創建一個FileWriter對象; 寫入目的源為2.txt
 38             bw = new BufferedWriter(wr); // 創建一個BufferedWriter對象
 39             // 3.寫入的內容
 40             wr.write(97); // 將AISIC碼值為97的字符(a)寫入2.txt
 41             wr.write("你好");
 42             wr.write(48);// 寫入0
 43             bw.write("ddd");
 44             char[] zf = { ‘a‘, ‘b‘, ‘1‘ };
 45             wr.write(zf); // 寫入字符數組
 46             bw.flush(); // 刷新緩沖區,才能寫入
 47             System.out.println("寫入成功");
 48         } catch (IOException e) {
 49             e.printStackTrace();
 50         } finally {
 51             if (wr != null) {
 52                 try {
 53                     wr.close();// 關閉流
 54                 } catch (IOException e) {
 55                     e.printStackTrace();
 56                 }
 57             }
 58         }
 59 
 60     }
 61 
 62     /**
 63      * BufferedReader
 64      */
 65     public static void BufReader() {
 66         // 1.導入IO包
 67         // 2.定義Reader接口的引用變量,只能實例化其子類對象FileReader
 68         Reader reader = null;
 69         BufferedReader br = null;
 70         try {
 71             // 3.實例化讀取器
 72             File fi = new File("D:\\temp\\aa.txt");
 73             reader = new FileReader(fi);
 74             // 創建一個使用默認大小輸入緩沖區的緩沖字符輸入流對象br,將reader讀取到的內容放在該緩沖區對象中。
 75             br = new BufferedReader(reader); // 使用字符流類BufferedReader和FileReader讀取文本文件
 76             // 4.字符流,需要存儲在一個字符數組中,定義一個字符數組
 77             String line = br.readLine(); // BufferedReader類的readLine()方法返回一個字符串!!!每執行該語句一次,讀取一行的內容
 78             while (line != null) {
 79                 System.out.println("line:" + line);
 80                 line = br.readLine(); // 每執行該語句一次,讀取一行的內容
 81             }
 82         } catch (Exception e) {
 83             e.printStackTrace();
 84         } finally {
 85             try {
 86                 if (reader != null) {
 87                     reader.close();
 88                 }
 89                 if (br != null) {
 90                     br.close();
 91                 }
 92             } catch (IOException e) {
 93                 e.printStackTrace();
 94             }
 95         }
 96 
 97     }
 98 
 99     /**
100      * 字符流的讀:FileReader
101      */
102     public static void charReader() {
103         // 1.導入IO包
104         // 2.定義Reader接口的引用變量,只能實例化其子類對象FileReader
105         Reader reader = null;
106         StringBuffer sbu = new StringBuffer();// 存放到StringBuffer裏面
107         try {
108             // 3.實例化讀取器
109             File fi = new File("D:\\temp\\aa.txt");
110             reader = new FileReader(fi);
111             // 4.字符流,需要存儲在一個字符數組中,定義一個字符數組
112             char[] ch = new char[(int) fi.length() - 2];
113             // 5.讀取字符到字符數組中
114             reader.read(ch);
115             sbu.append(ch);// 追加
116             System.out.println("追加後的字符串為:" + sbu);
117         } catch (Exception e) {
118             e.printStackTrace();
119         } finally {
120             try {
121                 if (reader != null) {
122                     reader.close();
123                 }
124             } catch (IOException e) {
125                 e.printStackTrace();
126             }
127         }
128 
129     }
130 
131 }
View Code

4.二進制文件讀寫 : DataInputStream、DataOutputStream

技術分享圖片
 1 package cn.filetest;
 2 
 3 import java.io.DataInputStream;
 4 import java.io.DataOutputStream;
 5 import java.io.FileInputStream;
 6 import java.io.FileOutputStream;
 7 import java.io.IOException;
 8 
 9 public class TestFileMethods3 {
10 
11     /**
12      * @param args
13      */
14     public static void main(String[] args) {
15         dataFileMethod();
16     }
17 
18     public static void dataFileMethod() {
19         // 1、實例化二進制輸入流
20         FileInputStream fis = null;
21         DataInputStream dts = null;
22         // 2、實例化文件和二進制輸出流
23         FileOutputStream fou = null;
24         DataOutputStream dos = null;
25         // 3、實例化對象
26         try {
27             fis = new FileInputStream("D:\\java\\Animal.class");
28             dts = new DataInputStream(fis);
29 
30             fou = new FileOutputStream("d:/java/aaa.class");
31             dos = new DataOutputStream(fou);
32             // 4、讀取並寫入
33             int temp;
34             while ((temp = dts.read()) != -1) {
35                 dos.write(temp);// 把每次讀取的二進制數據循環寫入到文件中
36             }
37         } catch (Exception e) {
38             e.printStackTrace();
39         } finally {
40             try {
41                 if (dts != null) {
42                     dts.close(); // 關閉輸入流
43                 }
44                 if (dos != null) {
45                     dos.close(); // 關閉輸出流
46                 }
47                 if (fis != null) {
48                     fis.close();
49                 }
50                 if (fou != null) {
51                     fou.close();
52                 }
53             } catch (IOException e) {
54                 e.printStackTrace();
55             }
56         }
57 
58     }
59 }
View Code

Java IO流總結(二)-示例