android基礎學習-java篇day10-step3-第六節:java輸入輸出流
主要內容
- File類的使用
- 位元組流
- 字元流
- 物件的序列化和反序列化
輸出流:
將資料寫入到輸出裝置當中
輸入流 :
從輸入裝置當中讀取資料,將資料讀取到程式當中
File類
什麼是檔案?
檔案可認為是相關記錄或放在一起的資料的集合
在java中,使用java,io.File類對檔案進行操作。
File相關方法:
建立目錄、建立檔案的簡單使用
package com.demo.day10.file;
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) {
// 建立File物件
//File file=new File("/Users/mac/Documents/java/demo/aa.txt");
//File file=new File("/Users/mac/Documents/java","demo/aa.txt");
File file=new File("/Users/mac/Documents/java");
File file1=new File(file,"demo/aa.txt");
//判斷是檔案還是目錄
System.out.println("是否是目錄"+file1.isDirectory());
System.out.println("是否是檔案"+file1.isFile());
//建立目錄
//File file2=new File("/Users/mac/Documents/java","demo2");
File file2=new File("/Users/mac/Documents/java","demo3/demo3_3");
if(!file2.exists()) {//判斷demo2是否存在
//file2.mkdir();//建立demo2目錄
file2.mkdirs();//建立多級目錄, demo3/demo3_3
}
//建立檔案
File file3=new File("/Users/mac/Documents/java","demo2/bb.txt");
if(!file3.exists()) {
try {
file3.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
位元組流
- 位元組輸入流InputStream
- 位元組輸出流OutpunStream
FileInputStream
- 從系統中的某個檔案中獲得輸入字元
- 用於讀取諸如影象資料之類的原始位元組流
常用方法:
方法名 | 描述 |
public int read() | 從輸入流中讀取一個資料位元組 |
public int read(byte[] b) | 從輸入流中將最大b.length個位元組的資料讀入一個byte陣列中 |
public int read(byte[] b,int off,int len) | 從輸入流中將最大len個位元組的資料讀入byte陣列中 |
public void close() | 關閉此檔案輸入流並釋放與此流有關的額所以系統資源 |
如果返回值為-1.則表示已經到達檔案的末尾。
常用方法使用案例:
package com.demo.day10.file;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/*
* aa.txt
* 裡面的內容是 Hello,World!
*/
public class FileInputStreamDemo {
public static void main(String[] args) {
// 建立一個FileInputStream的物件
try {
FileInputStream fis=new FileInputStream("/Users/mac/Documents/java/demo/aa.txt");//絕對路徑
// int n=fis.read();//讀取aa.txt檔案的一個位元組的資料
// System.out.println((char)n);//輸出H
int n;
//迴圈讀取檔案的資料
while((n=fis.read())!=-1) {//當讀取返回值是-1說明是到末尾了
System.out.print((char)n);//輸出H
}
fis.close();//關閉輸入流
System.out.println("\n=====下面是read(b,off,len)的使用====");
FileInputStream fis2=new FileInputStream("/Users/mac/Documents/java/demo/aa.txt");//絕對路徑
byte[] b=new byte[100];
//fis2.read(b);
fis2.read(b, 0, 5);//偏移量,從第0個開始讀,長度為5
System.out.println(new String (b));//將位元組陣列轉字串物件輸出
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
輸出結果:
Hello,World!
=====下面是read(b,off,len)的使用====
Hello
FileOutputStream
檔案輸出流
常用方法:
方法名 | 描述 |
public int write() | 從輸入流中讀取一個資料位元組 |
public int write(byte[] b) | 從輸入流中將最大b.length個位元組的資料讀入一個byte陣列中 |
public int write(byte[] b,int off,int len) | 從輸入流中將最大len個位元組的資料讀入byte陣列中 |
public void close() | 關閉此檔案輸入流並釋放與此流有關的額所以系統資源 |
字元的新增、圖片拷貝簡單實現:
package com.demo.day10.file;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamDemo {
public static void main(String[] args) {
//建立一個FileOutputStream物件
try {
//檔案輸出流
FileOutputStream fos=new FileOutputStream("/Users/mac/Documents/java/demo/aa.txt");
//檔案輸入流
FileInputStream fis=new FileInputStream("/Users/mac/Documents/java/demo/aa.txt");
//照片拷貝
//檔案輸出流
FileOutputStream fos1=new FileOutputStream("/Users/mac/Documents/java/demo/pigcopy.jpg");
//檔案輸入流
FileInputStream fis1=new FileInputStream("/Users/mac/Documents/java/demo/pig.jpg");
try {
//文字讀寫
fos.write(50);
fos.write('a');
int n;
while((n=fis.read())!=-1) {
System.out.print((char)n);
}
// System.out.println(fis.read());
// System.out.println((char)fis.read());
fos.close();
fis.close();
//圖片拷貝 是個讀寫過程
byte[] b=new byte[1024];
int n1;
while((n1=fis1.read(b))!=-1)//從11.jpg中讀取資料放到陣列b中
{
fos1.write(b,0,n1);
}
fos1.close();
fis1.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
位元組緩衝流
- 緩衝輸入流BufferedInputStream
- 緩衝輸出流BufferedOuputStream
為什麼要用緩衝流
- 檔案讀寫,從硬碟中讀取資料,讀寫速度較慢
- 緩衝流是從記憶體中讀取資料 ,可以提供讀寫速度。
- 與檔案輸入輸出流進行結合使用
- 其過程就是:在檔案讀寫的基礎上再嫁接一個緩衝流,執行緩衝讀寫後,資料會放到一個指定大小的緩衝區內。如果緩衝區滿了,則自動寫到文件裡面顯示;如果沒滿,要呼叫flush()方法:重新整理釋放緩衝區的資源。
package com.demo.day10.file;
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 BufferedDemo {
public static void main(String[] args) {
try {
// 建立FilesInputStream的物件 輸入流
FileInputStream fis=new FileInputStream("/Users/mac/Documents/java/demo/aa.txt");
// 建立FilesOutputStream的物件 輸出流
FileOutputStream fos=new FileOutputStream("/Users/mac/Documents/java/demo/aa.txt");
// 建立BufferedInputStream的物件 輸入流
BufferedInputStream bis=new BufferedInputStream(fis);
// 建立BufferedInputStream的物件 輸出流
BufferedOutputStream bos=new BufferedOutputStream(fos);
try {
//輸出流寫操作 //寫入資料到目標
bos.write('a');
bos.write(50);
bos.flush();//重新整理釋放緩衝區資源,如果緩衝器沒滿則釋放
bos.close();
long startTime=System.currentTimeMillis();//獲取系統時間
//輸入流讀操作:從輸入裝置中讀取資料
System.out.println((char)bis.read());
System.out.println(bis.read());
bis.close();
long endTime=System.currentTimeMillis();
System.out.println(endTime-startTime);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
輸出:
a
50
1
字元位元組轉換流
用於處理位元組流和字元流直接的轉換
- InputStreamReader
- OutputStreamReader
字元流緩衝區
- BufferReader
- BufferWriter
package com.demo.day10.file;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class InputStreamReaderDemp {
public static void main(String[] args) {
// 建立一個FileInputStream的物件
try {
//位元組輸入流
FileInputStream fis=new FileInputStream("/Users/mac/Documents/java/demo/abc.txt");
InputStreamReader isr=new InputStreamReader(fis);
BufferedReader br=new BufferedReader(isr);//字元讀緩衝輸入流
FileOutputStream fos=new FileOutputStream("/Users/mac/Documents/java/demo/abc_copy.txt");
OutputStreamWriter osr=new OutputStreamWriter(fos);
BufferedWriter bw=new BufferedWriter(osr);//字元讀緩衝輸出流
char[] b=new char[10];
int n=0;
// while((n=isr.read(b))!=-1) {
// System.out.print((char)n);
// }
//方法二
// while((n=isr.read(b))!=-1) {
// String s=new String(b,0,n);
// System.out.print(s);
// }
//寫入到新的檔案當中
while((n=isr.read(b))!=-1) {
osr.write(b,0,n);
osr.flush();
}
fis.close();
fos.close();
isr.close();
osr.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
物件序列化與反序列化
- 序列化:把java物件轉換為位元組序列的過程
- 反序列化:吧位元組序列恢復為java物件的過程
物件輸入流ObjectInputStream
物件輸出流ObjectOut'putStream
步驟:
- -建立一個類,繼承Serializable介面
- -建立物件
- -將物件寫入檔案
- -從檔案讀取物件資訊
Goods.java
package com.demo.day10.file;
import java.io.Serializable;
/*
* 分析商品資訊類
* 屬性:
* -商品編號:id
* -商品名稱:name
* -商品價格:price
* 方法:
* -構造方法
* -獲取和設定屬性值的方法
* -其他方法
*/
public class Goods implements Serializable{
private String goodsId;
private String goodsName;
private double goodsPrice;
public Goods(String goodsId,String goodsName,double goodsPrice) {
this.setGoodsId(goodsId);
this.setGoodsName(goodsName);
this.setGoodsPrice(goodsPrice);
}
public String getGoodsId() {
return goodsId;
}
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public double getGoodsPrice() {
return goodsPrice;
}
public void setGoodsPrice(double goodsPrice) {
this.goodsPrice = goodsPrice;
}
//toString方法
public String toString() {
String str="商品編號:"+goodsId+" "+"商品名稱:"+goodsName+" "+"商品價格:"+goodsPrice;
return str;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
GoodTest.java
package com.demo.day10.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class GoodsTest {
public static void main(String[] args) {
Goods goods1=new Goods("s001","電腦",3000);
try {
//建立一個goods.txt檔案
File file= new File("/Users/mac/Documents/java/demo/goods.txt");
if(!file.exists()) {//如果goods.txt不存在
try {
file.createNewFile();//建立這個檔案
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 建立一個字元輸出流物件寫入資料
FileOutputStream fos=new FileOutputStream(file);
// 建立一個字元輸入流物件讀取資料
FileInputStream fis=new FileInputStream(file);
try {
ObjectOutputStream oos=new ObjectOutputStream(fos);
ObjectInputStream ois=new ObjectInputStream(fis);
oos.writeObject(goods1);
Goods goods2=(Goods)ois.readObject();
System.out.println(goods2);
oos.flush();
oos.close();
ois.close();
fis.close();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
相關文章
- Java基礎輸入輸出Java
- Java 輸入輸出流Java
- JAVA輸入輸出流Java
- Java&Android 基礎知識梳理(6) 位元組輸入輸出流JavaAndroid
- 【Java基礎知識】IO流--標準輸入輸出流、列印流PrintStreamJava
- 重學java中的輸入輸出流Java
- python基礎篇-輸入和輸出Python
- 詳解Java中的IO輸入輸出流!Java
- Java中資料輸入輸出流——DataInputStream和DataOutputStreamJavaAI
- java中基本輸入輸出流的解釋Java
- [java IO流]之 基本資料型別輸入輸出流Java資料型別
- [java IO流]之 鍵盤顯示器輸入輸出流(System)Java
- 輸入輸出流
- Java I/O系統學習系列二:輸入和輸出Java
- Java —— 標準輸入輸出Java
- android基礎學習-java篇day7-step3-第三節:java字串AndroidJava字串
- android基礎學習-java篇day8-step3-第四節:java集合AndroidJava
- Java零基礎學java之IO流--05InputStream位元組輸入流Java
- 輸入和輸出基礎語法
- Java------簡單的輸入/輸出Java
- JAVA筆記(12)——輸入和輸出Java筆記
- Java中的輸入輸出總結Java
- java_檔案輸入與輸出Java
- android基礎學習-java篇day9-step3-第五節:java執行緒AndroidJava執行緒
- c++入門:輸入輸出流C++
- Java基礎 第三節 第六課Java
- 直播app原始碼,Java的輸入輸出APP原始碼Java
- java基礎學習_io流之FileInputStreamJava
- java基礎學習之十二:控制流Java
- JAVA基礎學習篇之反射Java反射
- 零基礎學Java第六節(物件導向二)Java物件
- [java IO流]之 萬能輸出流列印流printWriterJava
- java學習筆記--輸出本月日曆Java筆記
- C++中的檔案輸入/輸出(3):掌握輸入/輸出流 (轉)C++
- [C++]輸入/輸出流類庫C++
- Java IO輸入輸出及亂碼問題Java
- IO流的位元組輸入輸出流(InputStream,OutputStream)
- Java基礎之IO轉換流學習Java