1. 程式人生 > >簡單Java程序向實用程序的過度:二進制文件的讀寫

簡單Java程序向實用程序的過度:二進制文件的讀寫

har finally exc min 過度 對象 writer dos int

File I/O中常見的文件讀寫:

1.字節流讀寫文本文件

FileInputStream;

FileOutputStream;

2.字符流讀寫文本文件

FileReader;

FileWriter;

BufferedReader;

BufferedWriter;

3.二進制讀寫文件

DataInputStream;

DataOutputStream;

這裏重點介紹二進制文件的讀寫:

一、使用字節流類DataInputStream讀寫二進制文件

DataInputStream類是FileInputstream的子類,它是FileInputStream類的擴展。

利用DataInputStream類讀取二進制文件要使用到FileInputStream類。

具體操作步驟:

1)引入相關的類

2)構造一個數據流對象

3)利用數據輸入流類的方法讀取二進制文件的數據

dis.read();//讀取字節數據

4)關閉數據輸入流

dis.close();//關閉數據輸入流

二、使用字節流類DataOutputStream寫二進制文件

DataOutputStream類是FileOutputStream的子類,需要用到FileOutputStream類。

具體操作步驟:

1)引入相關的類

2)構造一個數據輸出流對象

3)利用數據輸出流類的方法寫二進制文件的數據

out.write(1);//將指定字節數據寫入二進制文件

4)關閉數據輸出流

out.close();

三、編寫一個Java程序讀取windows目錄下的win.ini文件,並輸出其內容

 1 import java.io.DataInputStream;
 2 import java.io.FileInputStream;
 3 import java.io.FileNotFoundException;
 4 import java.io.IOException;
 5 
 6 /**
 7  * 編寫一個Java程序讀取windows目錄下的win.ini文件,並輸出其內容
 8  * @author Administrator
 9  *
10  */
11 public class Test041 {
12 
13     public static void main(String[] args) {
14 DataInputStream dis = null; 15 try { 16 /*創建二進制輸入流*/ 17 dis = new DataInputStream(new FileInputStream("C:\\windows\\win.ini")); 18 19 /*循環讀取並輸出信息*/ 20 int temp; 21 while((temp=dis.read())!=-1){ 22 System.out.print((char)temp); 23 } 24 } catch (FileNotFoundException e) { 25 e.printStackTrace(); 26 } catch (IOException e) { 27 e.printStackTrace(); 28 } 29 finally{ 30 if (dis!=null) { 31 try { 32 dis.close(); 33 } catch (IOException e) { 34 e.printStackTrace(); 35 } 36 } 37 } 38 39 } 40 41 }

四、DataInputStream類與DataOutputStream類搭配使用,可以按照與平臺無關的方式從流中讀取基本數據類型的數據

1.DataInputStream的readUTF()方法能讀取采用utf-8字符編碼的字符串;

2.DataOutputStream的writeUTF()方法能寫入采用utf-8字符編碼的字符串;

test:復制圖片

 1 import java.io.DataInputStream;
 2 import java.io.DataOutputStream;
 3 import java.io.FileInputStream;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6 
 7 /**
 8  * 復制圖片(二進制字節流)
 9  * @author Administrator
10  *
11  */
12 public class Test004 {
13 
14     public static void main(String[] args) {
15         FileInputStream fis = null;
16         FileOutputStream fos = null;
17         DataInputStream dis = null;
18         DataOutputStream dos = null;
19         try {
20             //創建輸入流
21             fis = new FileInputStream("D:\\tengyicheng\\timg.jpg");
22             dis = new DataInputStream(fis);
23             //創建輸出流
24             fos = new FileOutputStream("D:\\tengyicheng\\myFile\\timg.jpg");
25             dos = new DataOutputStream(fos);
26             //循環讀取錄入
27             int temp;
28             while((temp = dis.read())!=-1){
29                 dos.write(temp);
30             }
31         } catch (IOException e) {
32             e.printStackTrace();
33         }
34         finally{
35             try {
36                 if (fis!=null) {
37                     fis.close();
38                 }
39                 if (fos!=null) {
40                     fos.close();
41                 }
42                 if (dis!=null) {
43                     dis.close();
44                 }
45                 if (dos!=null) {
46                     dos.close();
47                 }
48             } catch (IOException e) {
49                 e.printStackTrace();
50             }
51         }
52 
53     }
54 
55 }

簡單Java程序向實用程序的過度:二進制文件的讀寫