java流(IO流)的分類,檔案續寫、讀入
阿新 • • 發佈:2019-01-24
流(IO流)的分類,寫出流FileWriter
package com.qianfeng.test; import java.io.FileWriter; import java.io.IOException; /* * 流(IO流):input-output-stream。作用:實現兩個裝置之間的通訊。 * 裝置:記憶體,硬碟(磁碟 ),控制檯,鍵盤,檔案,網路。 * 網路:在網路上,你的主機之外的環境。 * * 流的分類: * 根據流的操作的方式分類:輸入流和輸出流 * 根據資料的型別分類:位元組流和字元流 * * 位元組流:傳輸的是位元組,可以傳輸任意型別的資料。----視訊,音訊,檔案,圖片等。 * 字元流:傳輸的也是位元組,不同點在於傳輸過程中加入了編碼的操作,讓我們在傳輸字元的時候更加便捷。----檔案。 * * 以記憶體為參考 * 位元組流:--對應的父類 * 位元組輸入流:InputStream * 位元組輸出流:OutputStream * * 字元流:--對應的父類 * 字元讀入流(將資料輸入記憶體):Reader * 字元寫出流(將資料從記憶體取出):Writer * * 先處理字元流: * 例項:以磁碟的儲存為例,將內容寫入檔案 * 分析: * 因為傳輸的是字元----字元流 * 因為是從記憶體傳出----寫出流--FileWriter * */ public class Demo2 { public static void main(String[] args) throws IOException { //建立寫出流物件 /* * 注意點一:關聯檔案的特點:如果之前不存在,程式會自動建立一個,如果已經存在,直接使用,但是會將原檔案的內容覆蓋。 * 注意點二:如果只寫名字,不寫具體的路徑,預設的路徑是當前的工程。 * 注意點三:我們可以指定自己的路徑,但是一定要保證路徑存在,否則報異常FileNotFoundException */ FileWriter fileWriter = new FileWriter("temp1.txt"); //呼叫寫出方法 /* * 注意點四:在執行write方法時,資料被臨時寫入了流物件的內部陣列中,這是一個位元組陣列,會預設去查編碼表。 */ fileWriter.write("bingbingAndChenchen"); //呼叫重新整理方法--會將內容真正的寫入檔案。 //fileWriter.flush(); //關閉流--a:將流關閉 b:重新整理 //注意點五:流使用完後必須關閉。 fileWriter.close(); //注意點六:當流物件關閉,不能再進行任何操作,否則報異常java.io.IOException: Stream closed //fileWriter.write("張三"); } }
檔案的續寫:FileWriter(String file,boolean value)
package com.qianfeng.test; import java.io.FileWriter; import java.io.IOException; /* * 檔案的續寫:FileWriter(String file,boolean value) * 當value為true的時候,不會將原來的內容刪除。 * * \:是轉義字元 \t:製表符 \\:普通的斜槓 * 實現換行:\r\n----window下的換行。 linux:\n * */ public class Demo3 { public static void main(String[] args) { FileWriter fileWriter = null; // 建立物件並關聯檔案 try { fileWriter = new FileWriter("temp2.txt", true); // 寫 fileWriter.write("bingbing"); fileWriter.write("\r\n"); fileWriter.write("zhangsan"); } catch (IOException e) { e.printStackTrace(); } finally { // 關閉 if (fileWriter != null) { try { fileWriter.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
檔案讀入,read()一個字元一個字元的讀
package com.qianfeng.test; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; /* * 例項:將資料從檔案中取出--檔案讀入流(FileReader) */ public class Demo4 { public static void main(String[] args) throws IOException { //建立物件並關聯檔案。關聯的檔案必須存在。 FileReader fileReader = new FileReader("temp2.txt"); //讀 /* * 兩種方式: * 第一種:read()----一個字元一個字元的讀 * 第二種:read(字元陣列)--一次可以讀取多個字元,將讀到的字元臨時儲存到了這個陣列中 */ //第一種:read()----一個字元一個字元的讀 //a:會將當前的字元讀出 b:將當前的指標後移一個字元 int data; // data = fileReader.read();//這裡得到的ASCII值 // System.out.println((char)data); // data = fileReader.read(); // System.out.println((char)data); // data = fileReader.read(); // System.out.println((char)data); // data = fileReader.read(); // System.out.println((char)data); // data = fileReader.read(); // System.out.println((char)data); // data = fileReader.read(); // System.out.println(data);//這裡返回的是-1,代表讀完了。 while((data = fileReader.read()) != -1){ System.out.println((char)data); } //關閉流 fileReader.close(); } }
檔案讀入,read(字元陣列)一次可以讀取多個字元
package com.qianfeng.test;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Demo5 {
public static void main(String[] args) throws IOException {
//建立物件並關聯檔案。關聯的檔案必須存在。
FileReader fileReader = new FileReader("temp2.txt");
//第二種:read(字元陣列)--一次可以讀取多個字元,將讀到的字元臨時儲存到了這個陣列中.
/*
* 陣列是臨時存放資料的地方,我們會將讀到的字元放到陣列中,陣列的大小決定了我們一次可以讀到的字元個數。
* 但是從記憶體的角度考慮,臨時陣列並不是越大越好,一般陣列的大小在1kb左右。
*
* 返回值:代表的是本次讀到的真實字元個數,如果返回值是-1代表讀完了。
*/
char[] arr = new char[2];
int num;
// num = fileReader.read(arr);
// System.out.println(new String(arr,0,num)+" "+num);
// num = fileReader.read(arr);
// System.out.println(new String(arr,0,num)+" "+num);
// num = fileReader.read(arr);
// System.out.println(new String(arr,0,num)+" "+num);//代表將字元陣列從下標0開始的num個字元轉成字串。
// num = fileReader.read(arr);
// System.out.println(new String(arr)+" "+num);//-1,說明讀完了
while((num=fileReader.read(arr))!=-1){
System.out.println(new String(arr,0,num)+" "+num);
}
//關閉流
fileReader.close();
}
}
相對路徑和絕對路徑,內容拷貝
package com.qianfeng.test;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/*
* 路徑的講解:
* 相對路徑和絕對路徑
* 例項:D:\\workspace\\32\\BigData1715N19\\src\\com\\qianfeng\\test\\Demo1.java 絕對路徑
* com\\qianfeng\\test\\Demo1.java 相對路徑
* 相對路徑:從路徑中間的某個部位開始一直到當前的檔名字。
* 絕對路徑:一個檔案的完整路徑,即從根目錄開始的路徑。
*
* 路徑中的/ \是轉義字元 \\==/
*
*/
public class Demo6 {
public static void main(String[] args) throws IOException, InterruptedException {
//例項:實現檔案的賦值
//要求:將Demo1的內容拷貝到temp3.txt
//1.建立讀入流和寫出流並關聯對應的檔案。
FileReader fileReader = new FileReader("src\\com\\qianfeng\\test\\Demo2.java");
FileWriter fileWriter = new FileWriter("temp3.txt");
//2.讀寫
//一次讀多個字元
// char[] arr = new char[10];
// int num;
// while((num=fileReader.read(arr))!=-1){
// //將字元陣列的部分內容寫入檔案
// fileWriter.write(arr,0,num);
// }
//一次讀一個字元
int num;
while((num=fileReader.read())!=-1){
fileWriter.write(num);//write()自帶了編碼
}
//3.關閉資源
fileReader.close();
fileWriter.close();
}
}