1.input 輸入罗标,從硬盤到程序秋柄;output輸出获枝,從程序到硬盤
2.字節(jié)輸出流outputstream
- 字節(jié)類寫任何文件均可以,字節(jié)是最基本存儲單元
- 抽象類骇笔,是輸出類所有類超類io包中
- 每次僅操作一個字節(jié)write(int)省店;write(byte[])寫入字節(jié)數組;
write(byte[],int a,int b),從byte數組a索引開始寫入b個元素 - close()笨触,關閉資源懦傍,必寫
- java操作對象都是調用操作系統(tǒng)完成
- 類命名都是前半部分是功能后半部分是父類:ByteArrayOutputStream
3.fileoutputstream
- 構造方法綁定一個輸出目的,參數有file和String(文件名)
- 三步旭旭,創(chuàng)建綁定目的地谎脯,write葱跋,close
- 所有io異常均是ioexception
FileOutputStream fo=new FileOutputStream("c:\\a.txt");
fo.write(100);
fo.close();
輸出是d持寄,會查詢編碼表
若在文本中輸出100則是三個數1,0,0源梭,三個字節(jié)
漢字是兩個字節(jié)
想要字符串寫入可以:“hello”.getBytes()
流對象會創(chuàng)建新文件,若文件已存在則會全部覆蓋
- 續(xù)寫和換行在構造方法里new FileOutputStream("c:\a.txt"稍味,true);true是在文件末尾寫废麻,flase是在開頭寫入
- \r\n換行
- close寫在finally中,有異常拋出停止,文件創(chuàng)建失敗則不需要close
if (foS!=null) {
try {
foS.close();
} catch (IOException ix) {
ix.printStackTrace();
throw new RuntimeException("釋放資源失敗");
}
io出現問題軟件解決不了模庐,直接拋出異常就好
4.字節(jié)輸入流FileInputStream
- read()讀一個字節(jié)
- read(byte[])讀一定量字節(jié)byte一般1024容量或者整數倍烛愧,但不可以太大
int lon=0;
byte[] arr=new byte[1024];
while ((lon=fiS.read(arr))!=-1) {
foS.write(arr, 0, lon);
}
同樣會按照ascii編碼表轉碼想看到原文件就char強轉
只能以lon來第三方替換,因為read一次就會換位讀到不同字節(jié)
read返回的數是讀到幾個字節(jié)掂碱,裝進arr數組會不停覆蓋之前讀進去的元素
如果new byte[2]
讀abcde怜姿,第三次就會讀到e,但是顯示最后一次是[e,d],d是上一次留下的
讀到末尾結束標記疼燥,jvm就會直接返回-1
- 復制
FileInputStream fiS=null;
FileOutputStream foS=null;
try {
fiS=new FileInputStream("C:\\Users\\Desktop\\java\\eclipse-SDK-3.7.2-win32.zip");
foS=new FileOutputStream("C:\\User\\Desktop\\a.zip");
int lon=0;
byte[] arr=new byte[1024];
while ((lon=fiS.read(arr))!=-1) {
foS.write(arr, 0, lon);
}
} catch (IOException ix) {
ix.printStackTrace();
throw new RuntimeException("復制失敗");
}finally
{
if (foS!=null) {
try {
foS.close();
} catch (IOException ix) {
ix.printStackTrace();
throw new RuntimeException("釋放資源失敗");
}finally
{
try {
if (fiS!=null) {
fiS.close();
}
} catch (IOException ix) {
ix.printStackTrace();
throw new RuntimeException("復制失敗");
}
}
}
}
單個字節(jié)復制太慢沧卢,用byte[]
為確保fis也可以close成功,需要在fos.close在使用一次finally
5.字符編碼表
- ascii一個字節(jié)7個位醉者,最高位(首位)是0沒有正負之分
- 漢字兩個字節(jié)但狭,第一個字節(jié)負數,第二個可能正數
- “abc”.getbyte()轉成編碼撬即,String(byte[])數字轉字符是解碼
6.字符流filewriter立磁,filereader
- 和字節(jié)流一樣,把byte[]變成char[]
- 每一次write之后需要調用flush()刷新剥槐,close也有刷新功能唱歧,但一起堆到close再刷新會耗時耗內存(不刷時候臨時數據都在內存)
int lon=0;
char[] arr=new char[1024];
while ((lon=fiS.read(arr))!=-1) {
foS.write(arr, 0, lon);
foS.flush();
}
打開能看懂的都是文本文件
字符流僅能用于文本編輯,復制圖片什么的都是壞的
僅有字符流在close之前需要使用flush才沧,別的都不需要