一.randomaccessfile
new randomaccessfile(file,「rw」);
常用:int read()->讀單位元組
int read(byte)->返回有效長度,讀的內容放入byte陣列
int read(byte,off,len)->返回有效長度,讀的內容放入byte陣列off位置開始
void write(int)->寫單位元組
write (byte)->將byte陣列寫入檔案
write(byte,off,len)->將byte陣列從off位置開始寫入檔案,寫len個
long getfilepointer()//獲取當前指標位置
seek(int)//跳到指定指標位置
skipbytes(int)//跳過對應位元組數
一般用來檔案加密
加密randomaccessfile raf=new randonaccessfile(「t.txt」,「rw」);
int len=-1;
bytearr=new int[1024];
while((len=raf.read(arr))!=-1)
bis.close();
bos.close();
位元組流:位元組為單位,不是用來讀寫可視內容
通常用來複製檔案
又因為緩衝流效率高,所以複製檔案用緩衝流
底層流就是用來生成其它高階流的
三.字元流:單位是字元-有字符集 預設字符集/指定字符集(gbk/utf-8)
1.reader/writer
inputstreamreader(inputstream,charset)
int read()-讀單個字元
int read(char)-返回讀取的有效個數,讀出來的字元存入字元陣列中
int read(char,off,len)-返回讀取的有效個數,讀出來的字元存入字元陣列從off開始
outputstreamwriter(outputstream,charset)
writer osw =new outputstreamwriter(new fileoutputstream(「a.txt」,true),"「gbk」);
write(int)-寫單個字元
write(『a』);
write(char)-寫字元陣列/字串
osw.write(new char);
osw.write(「哈哈\n」);
write(char,off,len)寫字元陣列一部分/字串一部分
osw.write(new char,3,2);
osw.write(「hello」,3,2);
flush()/close();
reader isr=new inputstreamreader(new fileinputstream(「a.txt」),「gbk」);//指定字符集
char c=(char)isr.read();//讀單個字元,字元本身就沒有負數
charcs=new char[10];
int len=isr.read(cs);//讀若干字元,存入字元陣列中,最多讀cs.length個
len=isr.read(cs,2,4);//讀若干,存入字元陣列從off開始的位置
2.緩衝流
printwriter/bufferedreader
printwriter pw=new printwriter(new outputstreamwriter(fileoutputstream(「a.txt」,true),「gbk」),true);
//指定編碼gbk,指定檔案是否追加
//指定true,開啟自動行重新整理
pw.println(「哈哈哈哈」);
pw.print(「嘻嘻」);
pw.flush();
pw.close();
bufferedreader br=new bufferedreader(new inputstreamreader(new fileinputstream(「a.txt」,「utf-8」));
string str=br.readline();//讀取一整行,返回null,讀到檔案結束
四.objectinputstream/objectoutputstream–
操作物件,位元組為單位
寫:現將物件轉換成位元組(序列化),寫入檔案
讀:讀位元組,將位元組轉換成物件(反序列化)
使用場景:
深轉殖:複製 物件+引用
使用場景:跨主機
淺轉殖:object.clone()複製引用
serializable:可序列化的-空介面
序列化:將物件轉換成位元組,要求物件必須是可序列化的
目的:僅用於標識可序列化的語義
serialversionuid->類的版本號,預設情況下,通常修改內容會修改版本號
objectoutputstream oos=new objectoutputstream(new fileoutputstream(「obj.txt」));
//物件流擁有位元組流所有的方法
//向檔案中寫入物件
oos.writeobject(「嘿嘿」);
oos.close();
objectinputstream ois=new objectinputstream(new fileinputstream(「obj.txt」));
//從檔案中讀取物件
object obj=ois.readobject();
ois.close();
五.properties-key-value鍵值對
配置檔案,避免硬編碼,動態載入資訊
.properties
.xml
連伺服器:ip,埠port
www.baidu.com:網域名稱->ip
dnsproperties pro=new properties();//建立物件
inputstream in=new fileinputstream(propertiesdemo.class.getresource(「config.properties」).getfile());//讀配置檔案
pro.load(in);//載入配置檔案
string ip=pro.getproperty(「ip」);//獲取配置檔案內容 key-value
string port=pro.getproperty(「port」);
總結:位元組流:inputstrem/outputstream
fileinputstream/fileoutputstream
bufferedinputstream/bufferedoutputstream
字元流:reader/writer
inputstreamreader/outputstreamwriter
bufferedreader/printwriter
檔案複製:
bufferedinputstream/bufferedoutputstream
內容讀寫:
bufferreader/printwriter
底層流:
包裝高階流
Java學習筆記 IO流
inputstream和outputstream是抽象類,他們是所有位元組輸入流和輸出流的父類。public static void main string args throws ioexceptionpublic static void main string args throws ioexc...
Java學習筆記 IO流
流按操作型別分為兩種 位元組流與字元流。位元組流可以操作任何資料,字元流只能操作純字元資料,比較方便 位元組流 基本操作與字元流相同,位元組流可以操作任意型別資料 位元組流和字元流的區別 1 位元組流用來讀取位元組資料 2 字元流用來讀取字元資料 3 由於計算機中儲存和傳輸資料是以位元組的形式,所以...
Java學習筆記 IO流
強制重新整理 os.flush 釋放資源,關閉流,遵循先開啟後關閉原則 os.close is.close public class test catch filenotfoundexception e catch ioexception e finally catch ioexception e ...