第一種:字節流 FileInputStream FileOutputStream
1.1 讀取操做數組
//先建立一個和硬盤鏈接的流(打通硬盤和內存的通道)
FileInputStream fis = new FileInputStream("D:\\Demo.txt");
//建立緩存區大小是1k
byte[] bytes = new byte[1024];
int data = 0; //存儲有效字節數
StringBuffer sb = new StringBuffer();
//因爲文件大小一般遠遠大於緩衝區大小,因此要循環讀取
while((data = fis.read(bytes)) != -1){//返回-1則文件讀取完畢,中止循環讀取
String temp=new String(bytes,0,data);//讀取緩衝區的字節數,轉換成字符串
sb.append(temp);
System.out.printlb("====有效字節數===="+data);
}
System.out.printlb(sb.toString());
//關閉流
fis.close();
1.2 寫入操做緩存
//建立一個讀取文件的流
FileOutputStream fos = new FileOutputStream("E:\\Demo.txt");
String temp = "海內存知己,天涯若比鄰。";
//把字符串分解成字節,填到字節數組中
byte[] bytes = temp.getBytes();
//寫入到指定路徑,沒有則建立文件
fos.write(bytes);
//關閉流
fos.close();
System.out.println("寫入成功!");
第二種:字符流 char FileReader FileWriter
tips:在不一樣操做系統和編碼方式下,char和byte之間的關係不是固定的app
通常認爲:gbk/gb2312 2個byte編碼
utf-8 3個bytespa
2.1 讀取操做操作系統
Reader fr = new FileReader("E:\\Demo.txt"); char ch[] = new char[1024]; StringBuffer sbf = new StringBuffer(); int length = fr.read(ch); while (length != -1) { sbf.append(ch); length = fr.read(); } System.out.println(sbf.toString()); fr.close();
2.2 寫入操做code
Writer fr = new FileWriter("D:\\Demo.txt");
fr.write("有朋自遠方來,不亦樂乎");
fr.close();
第三種:帶緩衝區的字符讀取和寫入方案
BufferedReaderblog
BufferedWriter 緩衝區 存儲的數據量默認是1024byteip
3.1 讀取操做內存
Reader fr = new FileReader("D:\\Demo.txt");
BufferedReader br = new BufferedReader(fr);
String line = br.readLine();
while (line != null) {
System.out.println(line);
line = br.readLine();
}
br.close();
fw.close();
3.2 寫入操做
Writer fw = new FileWriter("D:\\Demo.txt",true);//true 爲連續追加
BufferedWriter bw = new BufferedWriter(fw);
bw.write("學而時習之,不亦説乎");
bw.close();
fw.close();
第四種:二進制方式的讀取和寫入方案
DataInputStream
DataOutputStream
讀寫操做:複製粘貼
InputStream is = new FileInputStream("E:\\春暖花開.jpg");
DataInputStream dis = new DataInputStream(is);
OutputStream ops = new FileOutputStream("D:\\春暖花開.jpg");
DataOutputStream dos = new DataOutputStream(ops);
byte[] bytes = new byte[1024]; int date = 0; while ((date = dis.read(bytes)) != -1) { dos.write(bytes,0,date); } dos.close(); ops.close(); dis.close(); is.close(); System.out.println("複製成功");