文件IO操作學習筆記
阿新 • • 發佈:2019-02-03
reader contains nta 用戶輸入 main bytes NPU ava 關閉流 練習一:高效字節輸出流寫出字節數據
描述:利用高效字節輸出流往C盤下的d.txt文件輸出一個字節數。
答案
操作步驟:
- 創建字節輸出流對象關聯文件路徑
- 利用字節輸出流對象創建高效字節輸出流對象
- 調用高效字節輸出流對象的write方法寫出一個字節
- 關閉高效流,釋放資源。
代碼:public class Test01_01 { public static void main(String[] args) throws IOException { // 創建字節輸出流FileOutputStream對象並指定文件路徑。 FileOutputStream fos = new FileOutputStream("c:\\d.txt"); // 利用字節輸出流創建高效字節輸出流對象 BufferedOutputStream bos = new BufferedOutputStream(fos); // 調用高效字節輸出流對象的write(int byte)方法寫出一個字節數據 bos.write(97); // 關閉流 bos.close(); } }
練習二:高效字節輸出流寫出字節數組數據
描述:利用高效字節輸出流往C盤下的e.txt文件寫出一個字節數組數據,如寫出:”i love java”
答案
操作步驟: - 創建字節輸出流對象關聯文件路徑
- 利用字節輸出流對象創建高效字節輸出流對象
- 定義字符串存放要輸出的數據,然後將字符串轉換為字節數組。
- 調用高效字節輸出流對象的write方法將字節數組輸出。
- 關閉高效流。
代碼:public class Test01_02 { public static void main(String[] args) throws IOException { // 創建字節輸出流FileOutputStream對象並指定文件路徑。 FileOutputStream fos = new FileOutputStream("c:\\e.txt"); // 利用字節輸出流創建高效字節輸出流對象 BufferedOutputStream bos = new BufferedOutputStream(fos); // 調用高效字節輸出流對象的write(byte[] buff)方法寫出一個字節數據 bos.write("i love java".getBytes()); // 關閉流 bos.close(); } }
練習三:高效流文件復制
描述:利用高效字節輸入流和高效字節輸出流完成文件的復制。
要求:
1.將C盤下的c.png文件復制到D盤下
2.一次讀寫一個字節數組方式復制
答案
操作步驟: - 創建字節輸入流對象並關聯文件路徑
- 利用字節輸入流對象創建高效字節輸入流對象
- 創建字節輸出流對象並關聯文件路徑
- 利用字節輸出流對象創建高效字節輸出流對象
- 創建字節數組用來存放讀取的字節數
- 利用高效字節輸入流循環讀取文件數據,每讀取一個字節數組,利用高效字節輸出流對象將字節數組的內容輸出到目標文件中。直到讀取到文件末尾。
- 關閉高效流對象
代碼:public class Test01_03 { public static void main(String[] args) throws IOException{ // 創建字節輸入流對象並關聯文件路徑 FileInputStream fis = new FileInputStream("c:\\c.png"); // 利用字節輸出流對象創建高效字節輸出流對象 BufferedInputStream bis = new BufferedInputStream(fis); // 創建字節輸出流對象並指定文件路徑。 FileOutputStream fos = new FileOutputStream("d:\\c.png"); // 利用字節輸出流創建高效字節輸出流對象 BufferedOutputStream bos = new BufferedOutputStream(fos); // 定義字節數組接收讀取的字節 byte[] buffer = new byte[1024]; // 定義變量接收讀取的字節數 int len = -1; // 循環讀取圖片數據 while((len = bis.read(buffer)) != -1) { // 每讀取一個字節的數據就寫出到目標文件中 bos.write(buffer,0,len); } // 關閉流 bis.close(); bos.close(); } }
練習四:高效字符流和集合的綜合使用
描述:
分析以下需求,並用代碼實現
實現一個驗證碼小程序,要求如下:- 在項目根目錄下新建一個文件:data.txt,鍵盤錄入3個字符串驗證碼,並存入data.txt中,要求一個驗證碼占一行;
- 鍵盤錄入一個需要被校驗的驗證碼,如果輸入的驗證碼在data.txt中存在:在控制臺提示驗證成功,如果不存在控制臺提示驗證失敗
答案代碼 public class Test01_04 { public static void main(String[] args) throws Exception { //鍵盤錄入3個字符串並寫入項目根路徑下的data.txt文件中 writeString2File(); //驗證碼驗證 verifyCode(); } /** * 驗證碼驗證 * @throws Exception */ private static void verifyCode() throws Exception { //創建ArrayList集合,用於存儲文件中的3個驗證碼 ArrayList<String>list = new ArrayList<>(); //創建高效字符緩沖輸入流對象,並和data.txt文件關聯 BufferedReader br = new BufferedReader(new FileReader(new File("data.txt"))); String line = null; //循環讀取每一行 while(null!=(line = br.readLine())) { //將讀到的每一行信息存入到list集合中 list.add(line); } //關閉流對象 br.close(); //創建鍵盤錄入對象 Scanner sc = new Scanner(System.in); //提示用戶輸入驗證碼 System.out.println("請輸入一個驗證碼"); String code = sc.nextLine(); if(list.contains(code)) { System.out.println("驗證成功"); } else { System.out.println("驗證失敗"); } } /** * 鍵盤錄入3個字符串並寫入項目根路徑下的data.txt文件中 * @throws Exception */ private staticvoid writeString2File() throws Exception { //創建高效字符緩沖輸出流對象並和data.txt文件關聯 BufferedWriter bw = new BufferedWriter(new FileWriter(new File("data.txt"))); String line = null; //創建鍵盤錄入對象 Scanner sc = new Scanner(System.in); for(inti = 0;i<3;i++) { System.out.println("請輸入第"+(i+1)+"個字符串驗證碼"); //讀取用戶鍵盤錄入的一行驗證碼信息 line = sc.nextLine(); //將讀取到的一行驗證碼寫入到文件中 bw.write(line); //寫入換行符 bw.newLine(); } //關閉流對象 bw.close(); } }
練習五:轉換輸出流的使用
描述:現有一字符串:”我愛Java”。將該字符串保存到當前項目根目錄下的a.txt文件中。
要求:使用gbk編碼保存。
註意:idea的默認編碼是utf-8,所以可以通過file?settings?file encodings設置為gbk格式,否則打開a.txt文件看到的將會是亂碼。
答案
操作步驟:
- 創建文件字節輸出流關聯目標文件
- 根據文件字節輸出流創建轉換輸出流對象,並指定編碼字符集為:gbk
- 調用流對象的方法將字符串寫出到文件中。
- 關閉流並釋放資源。
代碼:
public class Test01_05 {
public static void main(String[] args) throws IOException{
// 要保存的字符串
String content = "我愛Java";
// 創建字節輸出流對象
FileOutputStream fos = new FileOutputStream("a.txt");
// 創建轉換輸出流對象
OutputStreamWriter osw = new OutputStreamWriter(fos, "gbk");
// 調用方法寫出數據
osw.write(content);
// 關閉流釋放資源
osw.close();
}
}
練習六:轉換輸入流的使用
描述:利用轉換輸入流將當前項目根目錄下使用gbk編碼的a.txt文件的內容讀取出來,並打印在控制臺上。
要求:不能出現亂碼的情況。
答案
操作步驟:
- 創建字節輸入流對象指定文件路徑。
- 根據字節輸入流對象創建轉換輸入流對象並指定字符集編碼為:gbk
- 調用轉換輸入流對象的讀取方法讀取內容
- 關閉流釋放資源
代碼:public class Test01_06 { public static void main(String[] args) throws IOException{ // 創建字節輸入流對象並關聯文件 FileInputStream fis = new FileInputStream("a.txt"); // 創建轉換輸入流對象 InputStreamReader isr = new InputStreamReader(fis,"gbk"); // 定義字符數組存放讀取的內容 char[] buffer = newchar[1024]; // 定義變量接收讀取的字符個數 intlen = -1; while((len = isr.read(buffer)) != -1) { System.out.print(new String(buffer,0,len)); } // 關閉流 isr.close(); } }
文件IO操作學習筆記