(1)io用於在裝置間進行資料傳輸的操作
(2)分類:
a:流向
輸入流讀取資料
輸出流寫出資料
b:資料型別
位元組流位元組輸入流 inputstream (fileinputstream bufferedinputstream)
位元組輸出流 outputstream (fileoutputstream bufferedoutputstream)
字元流字元輸入流 reader (filereader bufferedreader)
字元輸出流 writer (filewriter bufferedwriter)
注意:a:如果我們沒有明確說明按照什麼分,預設按照資料型別分。
b:除非檔案用windows自帶的記事本開啟我們能夠讀懂,才採用字元流,否則建議使用位元組流。
(3)fileoutputstream寫出資料
a:操作步驟
a:建立位元組輸出流物件
b:呼叫write()方法
c:釋放資源
b:**體現:
fileoutputstream fos = new fileoutputstream("fos.txt");
fos.write("hello".getbytes());
fos.close();
c:要注意的問題?
a:建立位元組輸出流物件做了幾件事情?
b:為什麼要close()?
c:如何實現資料的換行?
d:如何實現資料的追加寫入?
(4)fileinputstream讀取資料
a:操作步驟
a:建立位元組輸入流物件
b:呼叫read()方法
c:釋放資源
b:**體現:
fileinputstream fis = new fileinputstream("fos.txt");
//方式1
int by = 0;
while((by=fis.read())!=-1)
//方式2
byte bys = new byte[1024];
int len = 0;
while((len=fis.read(bys))!=-1)
fis.close();
(1)位元組流操作中文資料不是特別的方便,所以就出現了轉換流。
轉換流的作用就是把位元組流轉換字元流來使用。
(2)轉換流其實是乙個字元流
字元流 = 位元組流 + 編碼表
(3)編碼表
a:就是由字元和對應的數值組成的一張表
b:常見的編碼表
ascii
iso-8859-1
gb2312
gbkgb18030
utf-8
c:字串中的編碼問題
編碼string -- byte
解碼byte -- string
(4)io流中的編碼問題
a:outputstreamwriter
outputstreamwriter(outputstream os):預設編碼,gbk
outputstreamwriter(outputstream os,string charsetname):指定編碼。
b:inputstreamreader
inputstreamreader(inputstream is):預設編碼,gbk
inputstreamreader(inputstream is,string charsetname):指定編碼
c:編碼問題其實很簡單
編碼只要一致即可
(5)字元流
reader
|--inputstreamreader
|--filereader
|--bufferedreader
writer
|--outputstreamwriter
|--filewriter
|--bufferedwriter
(1)可以操作基本型別的資料
(2)流物件名稱
datainputstream
dataoutputstream
(1)有些時候我們操作完畢後,未必需要產生乙個檔案,就可以使用記憶體操作流。
(2)三種
a:bytearrayinputstream,bytearrayoutputstream
b:chararrayreader,chararraywriter
c:stringreader,stringwriter
(1)位元組列印流,字元列印流
(2)特點:
a:只操作目的地,不算子據源
b:可以操作任意型別的資料
c:如果啟用了自動重新整理,在呼叫println()方法的時候,能夠換行並重新整理
d:可以直接操作檔案
問題:哪些流可以直接操作檔案呢?
看api,如果其構造方法能夠同時接收file和string型別的引數,一般都是可以直接操作檔案的
(3)複製文字檔案
bufferedreader br = new bufferedreader(new filereader("a.txt"));
printwriter pw = new printwriter(new filewriter("b.txt"),true);
string line = null;
while((line=br.readline())!=null)
pw.close();
br.close();
(1)system類下面有這樣的兩個字段
in 標準輸入流
out 標準輸出流
(2)三種鍵盤錄入方式
a:main方法的args接收引數
b:system.in通過bufferedreader進行包裝
bufferedreader br = new bufferedreader(new inputstreamreader(system.in));
c:scanner
scanner sc = new scanner(system.in);
(3)輸出語句的原理和如何使用字元流輸出資料
a:原理
system.out.println("helloworld");
printstream ps = system.out;
ps.println("helloworld");
b:把system.out用字元緩衝流包裝一下使用
bufferedwriter bw = new bufferedwriter(new outputstreamwriter(system.out));
(1)可以按照檔案指標的位置寫資料和讀資料。
(2)案例:
a:寫資料
b:讀資料
c:獲取和改變檔案指標的位置
(1)把多個輸入流的資料寫到乙個輸出流中。
(2)構造方法:
a:sequenceinputstream(inputstream s1, inputstream s2)
b:sequenceinputstream(enumeration<? extends inputstream> e)
(1)可以把物件寫入文字檔案或者在網路中傳輸
(2)如何實現序列化呢?
讓被序列化的物件所屬類實現序列化介面。
該介面是乙個標記介面。沒有功能需要實現。
(3)注意問題:
把資料寫到檔案後,在去修改類會產生乙個問題。
如何解決該問題呢?
在類檔案中,給出乙個固定的序列化id值。
而且,這樣也可以解決黃色警告線問題
(4)面試題:
什麼時候序列化?
如何實現序列化?
什麼是反序列化?
(1)是乙個集合類,hashtable的子類
(2)特有功能
a:public object setproperty(string key,string value)
b:public string getproperty(string key)
c:public setstringpropertynames()
(3)和io流結合的方法
把鍵值對形式的文字檔案內容載入到集合中
public void load(reader reader)
public void load(inputstream instream)
把集合中的資料儲存到文字檔案中
public void store(writer writer,string comments)
public void store(outputstream out,string comments)
(4)案例:
a:根據給定的檔案判斷是否有鍵為"lisi"的,如果有就修改其值為100
b:寫乙個程式實現控制猜數字小遊戲程式不能玩超過5次
(1)jdk4出現的nio,對以前的io操作進行了優化,提供了效率。但是大部分我們看到的還是以前的io
(2)jdk7的nio的使用
path:路徑
paths:通過靜態方法返回乙個路徑
files:提供了常見的功能
複製文字檔案
把集合中的資料寫到文字檔案
Java基礎知識回顧 6
1 遍歷 jar zip 檔案中的資源 file jar newfile myfile.jar zipinputstream zis new zipinputstream newfileinputstream jar try finally 2 遍歷web應用中的資源。setsubresources...
基礎回顧 關於IO流
一.認識file類 關於file類的方法如下 1 檔名 getname 檔名 路徑名 getpath 路徑名 getabsolutefile 絕對路徑所對應的file物件 getabsolutepath 絕對路徑名 getparent 父目錄 相對路徑的父目錄,可能為null 如.刪除本身後的結果 ...
Java檔案Io基礎
file file2 new file d test.txt 建立檔案物件,file類中的構造方法中的引數為字串,表示的是檔案的位址,其中,在絕對路徑中,磁碟的編號後的斜桿可以為 windows系統中路徑標識 也可以為 跨平台 制定路徑之下建立的檔案物件,不代表著該路徑之下有這個檔案,也就是說fil...