Java中的輸入輸出流


流的概念:

1.對字節進行操作的 InputStream.OutputStream 類

  in是進行讀數據,out是往出輸出數據,這個號容易進行搞混的.

  InputStream和OutputStream最常用的子類

  FileInputStream 和 FileOutputStream對字節數據進行操作

  DataInputStream可以進行二進制操作

2.對字符串操作的 Reader.Writer類

  Reader.Writer的子類BufferedReader.BufferedWrite可以對字符串操作

 

-----------------------接下來對兩個概念詳細解說----------------------------

 

  • InputStream的體系結構
  • InputStream方法
  • OutputStream的體系結構
  • OutputStream方法

InputStream體系結構

InputStream方法

InputStream方法
int read() 從輸入流中讀取單個字節,返回讀取字節數據
int read(byte[] b)  從輸入流中讀取最多b.leng長度的字節,儲存在字節數組b中,返回時間讀取的字節數.
int read(byte[] b, int off, int len)  從輸入流中讀取做多len長度的字節,保存到字節數組b中,保存的位置從off開始
void close() 關閉輸入流
int available() 返回可以從輸入流讀取的字節書面
skip(long n) 從輸入流中跳過參數n制定數目的字節
mark(int readlimit) 標記輸入流當前位置,一遍用reset()方法復位到改標記的位置
void reset() 講當前位置復位為上次調用mark()方法標記的位置
   

FileInputStream的構造方法

FileInputStream(File file)

file指定文件數據源頭
FileInputStream(String name) name指定文件數據源,包含路徑信息

 

 

示例代碼

 

 1 /* package whatever; // don't place package name! */
2
3 import java.util.*;
4 import java.lang.*;
5 import java.io.*;
6
7 /* Name of the class has to be "Main" only if the class is public. */
8 class InputStream
9 {
10 public static void main (String[] args) throws java.lang.Exception
11 {
12 FileInputStream fis = new FileInputStream("H:\\app\\test.txt");
13
14 int data;
15
16 System.out.println("可讀取的字節數:"+fis.available());
17
18 //將字節轉換成字符串
19 while((data = fis.read())!=-1){
20
21 char c = (char)data;
22
23 System.out.println(c);
24 }
25
26 fis.close();
27 }
28 }

 

 

OutputStream體系結構

OutputStream方法

void write(int c) 將指定的字節輸出到輸入流中

void write(byte[] buf) 將字節數組的輸出到輸出流中

void write(byte[] b, int off, int len) 將字節數組中off位置開始,長度為len的字節數據輸出到輸出流中

void close() 關閉輸出流

void flush() 強制吧任何被緩沖的已寫數據輸出到輸出流

 

FileOutputStream方法

FileOutputStream(File file)  file文件名指定文件接收數據對象

FileOutputStream(String name) name指定接收對象,包含路徑信息

FileOutputStream(String name, boolean append) append 若為 true,則在文件末尾添加數據.

 

示例代碼

 1 import java.util.*;
2 import java.lang.*;
3 import java.io.*;
4
5 /* Name of the class has to be "Main" only if the class is public. */
6 class OutputStream
7 {
8 public static void main (String[] args)
9 {
10
11 try{
12
13 String str = "這是輸出流的示例"
14
15 byte[] words = str.getBytes();//將str字符串解碼放入字節數組中.
16
17 FileOutputStream fos;
18
19 fos = new FileOutputStram("H:\\app\\test.txt");
20
21 fos.write(words,0,words.length);
22
23 System.out.println("提示文件已經更新");
24 //記得關閉輸出流
25 fos.close();
26
27 }catch(FileNotFoundException e){
28 e.printStackTrace();
29 }catch(IOException e){
30 Sysout.out.println("創建文件時出錯");
31 }
32
33 }
34 }

 

 

Reader體系結構

Reader方法

int read() 從輸入流中讀取單個字符,返回所讀取的字符數據

int read(char[] c) 從輸入流中讀取c.length長度的字符,保存到字符數組c中,返回實際讀取的字符數

int read(char[] c, int off, int len) 從輸入流中讀取最多len的長度字符,保存到字符數組c中,保存的位置從

               off位置開始,返回實際讀取的字符串長度

void close() 關閉流

boolean ready() 如果要讀的流已經准備好,返回true,否則false

skip(long n) 從輸入流中跳過參數 n 指定數目的字符

mark( int readlimit ) 標記輸入流中當前的位置,以便用reset()復位到該標記

void reset() 將當前位置復位為上次調用mark()方法標記的位置

 

BufferedReader的構造方法

BufferedReader(Reader in) 參數in指定被裝飾的Reader類

BufferedReader(Reader in, int sz) 參數sz指定緩沖區的大小,字符 為單位.

 

示例代碼

 1 class CharReder
2 {
3 public static void main (String[] args)
4 {
5 try{
6
7 FileReader fr = new FileReader("H:\\app\\test.txt");
8
9 BuferedReader br = new BufferedReader(fr);
10
11 String line = br.readLine();
12 while(line!=null){
13
14 System.out.println(line);
15 line = br.readLine();
16
17 }
18 br.close();
19 fr.close();
20 }catch(IOException e){
21 Sysout.out.println("文件不存在");
22 }
23 }
24 }

 

 

BufferedWriter的構造方法

BufferedWriter(Writer out) 參數out指定被裝飾的Writer類

BufferedWriter(Writer out, int sz) 參數sz 指定緩存區的大小,字符為單位

 

示例代碼

 1 class CharWriter
2 {
3 public static void main (String[] args)
4 {
5 try{
6
7 FileWriter fw;
8
9 fw = new FileWriter("H:\\app\\test.txt");
10
11 BufferedWriter bw = new BufferedWriter(fw);
12 bw.write("你好,騷年");
13 bw.write("我是....");
14 bw.flush();
15 fw.close();
16 }catch(IOException e){
17 Sysout.out.println("文件不存在");
18 }
19 }
20 }

 

 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com