I/O流中的字節流的讀取與輸入
(用於讀取寫入二進制文件,如圖片、聲音、影響等類型文件)
1.對於文件的讀取,輸入流InputStream下的子類FileInputStream
有一個read()可以讀取數據,read(byte[])這個方法需要傳入一個參數
這個參數是一個byte型的數組,用於存儲讀取到的數據
2.把byte數組轉化爲string類型的數據方便使用
String str=new String(by)(by是byte型數組的名稱)
讀取完文件後需要關閉輸入流,以免佔用內存空間
3.完整的過程需要用try/catch來包住,以免程序發生錯誤而終止不了
讀取文件代碼示例:
public Static String getMsg(){
byte msg[]=new byte[100];
String str=null;
try{
InputStream is=new FileInputStream("src/a.txt");
is.read(msg);
str=new String(msg);
is.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
return str;
}
方法寫入數據到指定文件,write()方法需要傳入一個byte[]數組,如果你想
傳入String類型的數據,String類型數據有可以轉化爲byte[]的方法
寫入文件代碼示例:
public Static String putMsg(){
String msg=getMsg();
try{
OutputStream os=new FileOutputStream("src/b.txt",
true);
os.write(13);
os.wirte(10);
//在windows系統下,換行符用ASCII碼錶示是13 10,這裏是
換行的意思
os.write(msg.getBytes());
//把String類型數據轉化爲byte[]數組
os.flush();
//刷新輸出流
os.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
5.上面是對於文本類型文件的讀取與寫入,但是圖片、聲音、影響文件不會把讀取的數據轉爲String類型數據,而是直接用byte數組來存儲數據,然後全寫入另一個文件,相當於複製粘貼一個文件,這裏需要注意的是讀取與寫入的文件類型要一致,即文件的後綴名需要一致。
代碼示例演示覆制粘貼並打開聲音文件:
public static void get(){
try{
InputStream is=new FileInputStream("E:\音樂\金娜英 -
說出心聲.mp3");
OutputStream os=new FileInputStream("E:\Youku Files
\mymusic.mp3");
byte music[]=new byte[1024*10];
int len=0;
while((len=is.read(music))!=-1){
os.write(music);
}
is.close();
os.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String cmd="cmd /c\"文件路徑.mp3\"";
Runtime run=Runtime.getRuntime();
try{
run.exec(cmd);
}catch (IOException e) {
e.printStackTrace();
}
//打開文件
}