Java——IO流(一)位元組流的讀寫
阿新 • • 發佈:2018-12-13
1.IO流的學習:IO流是用來處理裝置之間的資料傳輸 位元組流:位元組流可以操作任何資料,因為在計算機中任何資料都是以位元組的形式儲存的 位元組流的抽象父類:InputStream,OutputStream 字元流:字元流只能操作純字元資料,比較方便 字元流的抽象父類:Reader,Writer 2.IO程式的過程:使用前,匯入IO包中的類,使用時,進行異常處理,使用後,釋放資源 3.InputStream類:是一個抽象類,不能直接new物件,同理OutputStream也一樣
package pra_16; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class J_30 { public static void main(String[] args) throws IOException { //1.建立字元輸入流物件 FileInputStream fis =new FileInputStream("b.txt"); int x; while((x=fis.read())!=-1){ //從硬碟上讀取一個位元組,結束的標誌是-1 System.out.println(x); } fis.close(); //釋放資源 //2.建立位元組輸出流物件,如果沒有這個檔案,會直接建立,如果有則會清除裡面的資料 FileOutputStream fos=new FileOutputStream("b.txt"); fos.write(97); //寫出的是int數,但是到檔案的是一個位元組會自動去除前三個八位 fos.close(); //3.FileOutputStream的追加資料 FileOutputStream fos2=new FileOutputStream("b.txt",true); //追加資料,在第二個引數傳true fos2.write(99); fos2.close(); //4.逐個位元組地拷貝圖片 FileInputStream fis3=new FileInputStream("5.jpg"); FileOutputStream fos3=new FileOutputStream("5_01.jpg"); int z; while((z=fis3.read())!=-1){ fos3.write(z); } fis3.close(); fos3.close(); //5.一次將所有位元組拷貝,用available()方法,可以獲取所有位元組的個數(有可能導致記憶體溢位) FileInputStream fis4=new FileInputStream("5.jpg"); FileOutputStream fos4=new FileOutputStream("5_02.jpg"); byte[] arr=new byte[fis4.available()]; //建立與檔案一樣大小的位元組陣列 fis4.read(arr); //將檔案上的所有位元組讀到位元組陣列 fos4.write(arr); //將位元組陣列內容寫到檔案上 fis4.close(); fos4.close(); //6.定義小陣列拷貝(拷貝的標準格式) FileInputStream fis5=new FileInputStream("b.txt"); FileOutputStream fos5=new FileOutputStream("b_01.txt"); byte[] arr2=new byte[1024]; //一般取1024的整數倍 int length; while((length=fis5.read(arr2))!=-1){ //判斷還有沒有資料 fos5.write(arr2,0,length); } fis5.close(); fos5.close(); //7.使用(緩衝區)BufferedInputStream和BufferedOutputStream的拷貝 FileInputStream fis6=new FileInputStream("b.txt"); FileOutputStream fos6=new FileOutputStream("b_02.txt"); BufferedInputStream bis=new BufferedInputStream(fis6); //建立輸入緩衝區物件,對輸入流進行包裝 //BufferedInputStream bis=new BufferedInputStream(new FileInputStream("b.txt")); BufferedOutputStream bos=new BufferedOutputStream(fos6); //建立輸出緩衝區物件,對輸出流進行包裝 //BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("b_02.txt")); int k; while((k=bis.read())!=-1){ bos.write(k); } bis.close(); //只需要將緩衝區物件的流關閉即可 bos.close(); //8.位元組流讀寫中文(一箇中文佔用兩個位元組,所以位元組流在讀中文時會出現問題,由字元流來解決) FileInputStream fis7=new FileInputStream("k.txt"); byte[] arr4=new byte[4]; int len; while((len=fis7.read(arr4))!=-1){ System.out.println(new String(arr4,0,len)); } fis7.close(); FileOutputStream fos7=new FileOutputStream("k_01.txt"); fos7.write("我是一個大帥哥!".getBytes()); fos7.write("\r\n".getBytes()); fos7.write("我是一個大帥哥!".getBytes()); fos7.close(); } }
使用於jdk1.6版本及其以前的流的標準處理異常程式碼
package pra_16;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class J_31 {
/**
* @param args
*/
public static void main(String[] args) throws IOException{
FileInputStream fis=null; //這個null不能去掉
FileOutputStream fos=null;
try{
fis=new FileInputStream("k.txt");
fos=new FileOutputStream("k_02.txt");
int b;
while((b=fis.read())!=-1){
fos.write(b);
}
}finally{
//能關一個儘量關一個
try{
if(fis!=null)
fis.close();
}finally{
if(fos!=null)
fos.close();
}
}
}
}
使用於jdk1.7版本的流的標準處理異常程式碼
package pra_16;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class J_32 {
public static void main(String[] args) throws IOException{
//當把流物件放到try的小括號裡頭後,再執行大括號程式碼以後會自動呼叫流物件關閉的方法進行關閉
try(
FileInputStream fis=new FileInputStream("k.txt");//具備自動關閉的功能
FileOutputStream fos=new FileOutputStream("k_02.txt");
Mcloss mc=new Mcloss(); //已經關閉!
){
int b;
while((b=fis.read())!=-1){
fos.write(b);
}
}
}
}
class Mcloss implements AutoCloseable{
@Override
public void close(){
System.out.println("已經關閉!");
}
}