Java输入输出流
Java輸入輸出流
文章目錄
- Java輸入輸出流
- File類的使用
- 字節流
- 緩沖流
- 字符流
- 對象序列化
- 作業 01
- 作業 02
- 作業 03
File類的使用
- 什么是文件?
- 文件可認為是相關記錄或放在一起的數據的集合
- 在Java中,使用java.io.File類對文件進行操作。
字節流
package may10;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException;public class Test2 {/*** 字節流* 字節輸入流:InputStream* FileInputStream* BufferedInputStream* 字節輸出流:OutputStream* FileOutputStream* BufferedOutputStream 緩沖*/public static void main(String[] args) {/*** FileInputStream.* 從文件中獲取字節* 用于讀取圖像原始字節流*/ // // 創建FileInputStream對象 // try { // FileInputStream fis=new FileInputStream("src\\may10\\imooc.txt"); // //int n=fis.read(); // // read -1:end int n=0; while (n!=-1){ System.out.print((char) n); n= fis.read(); } // int n=0; // while ((n=fis.read())!=-1){ // System.out.print((char) n); // } // fis.close(); // System.out.println((char) n); // } catch (FileNotFoundException e) { // e.printStackTrace(); // }catch (IOException e){ // e.printStackTrace(); // }// 創建FileInputStream對象try {FileInputStream fis = new FileInputStream("src\\may10\\imooc.txt");byte[] b=new byte[100]; // fis.read(b); // System.out.println(new String(b));fis.read(b,0,5);System.out.println(new String(b));// read 讀取過后在讀取不會在從頭開始int n=fis.read();System.out.println((char) n);fis.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} }- 文件寫入 拷貝
緩沖流
package may10;import java.io.*;/*** 緩沖流*/ public class Test4 {public static void main(String[] args) {FileOutputStream fos;FileInputStream fis;BufferedOutputStream bos;BufferedInputStream bis;try {// 加入緩沖流速度更快fos = new FileOutputStream("src\\may10\\imooc.txt");bos = new BufferedOutputStream(fos);fis = new FileInputStream("src\\may10\\imooc.txt");bis = new BufferedInputStream(fis);long startTime=System.currentTimeMillis();bos.write(50);bos.write('a');bos.flush(); //強制清空,寫入System.out.println(bis.read());System.out.println((char) bis.read());long endTime=System.currentTimeMillis();System.out.println(endTime-startTime);bos.close(); //數據也寫進去了bis.close();fis.close();fos.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} }字符流
package may10;import java.io.*;/*** 字符流 不是二進制流* Reader* writer* 字節字符轉換流* InputStreamReader*/ public class Test5 {public static void main(String[] args) {FileInputStream fis;InputStreamReader isr;FileOutputStream fos;OutputStreamWriter osw;// 加入緩沖區提高轉換效率BufferedReader br;BufferedWriter bw;try {// 讀寫要保持編碼一致fis = new FileInputStream("src\\may10\\imooc.txt");isr = new InputStreamReader(fis,"GBK");fos = new FileOutputStream("src\\may10\\imooc1.txt");osw = new OutputStreamWriter(fos,"GBK");br=new BufferedReader(isr);bw=new BufferedWriter(osw);int n = 0;char[] cbuf = new char[10];//1 // while ((n=isr.read())!=-1){ // System.out.print((char) n); } // 2while ((n = br.read(cbuf)) != -1) {//String s=new String(cbuf,0,n);// System.out.print(s);bw.write(cbuf, 0, n);bw.flush();}fis.close();fos.close();isr.close();osw.close();br.close();bw.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} }對象序列化
package may10;import java.io.*;/*** 對象序列化:將Java對象轉換成字節序列化的過程 反序列化:就是轉成Java對象* 創建一個類,繼承Serializable接口* 創建對象* 將對象寫入文件* 從文件讀取對象信息** 對象輸入流與輸出流*/ public class Test6 {public static void main(String[] args) {// 定義Goods對象Goods goods=new Goods("s01","電腦",3000);try {FileOutputStream fos=new FileOutputStream("src\\may10\\imooc.txt");ObjectOutputStream oos=new ObjectOutputStream(fos);FileInputStream fis=new FileInputStream("src\\may10\\imooc.txt");ObjectInputStream ois=new ObjectInputStream(fis);// 將對象信息寫入文件oos.writeObject(goods);oos.writeBoolean(true);oos.flush();// 讀取文件信息Goods goods1=(Goods) ois.readObject();System.out.println(goods1);System.out.println(ois.readBoolean());oos.close();fos.close();fis.close();ois.close();} catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e){e.printStackTrace();}catch (ClassNotFoundException e){e.printStackTrace();}} }作業 01
-
創建一個File類對象,判斷指定文件或目錄是否存在,若存在判斷其是文件還是目錄,是否可讀、可寫。
-
效果圖:
-
任務要求:
-
1、先在File文件下創建一個Monday.docx的文件。 判斷文件是否創建成功,若成功返回文件名稱和父目錄。
-
2、先判斷文件是否存在,若存在就先獲取其路徑或名稱。
-
3、再判斷其是文件還是目錄;判斷文件是否可讀、可寫:
方法:請用適當的方法創建文件,判斷是文件還是目錄;以及判斷文件的可讀性。
- 效果圖
作業 02
- 老師讓程序員小馬統計英文演講稿speech.txt文件中共有多少個字符,并顯示所有內容以便在演講開始前
有個準備,假如你是小馬,請完成老師教給你的任務。 - 文本內容: abcdefghijklmnopqrst
- 統計結果: speech. txt文件中共有20個字節。
- 任務要求:
- 1、實例化FileInputStream對象
- 2、設置while循環讀取speech.txt文件內容
- 3、在循環中設置計數器count, 每讀取一個字節,count加1
- 效果圖
作業 03
- 編寫一個Java程序,將100000個字符分別寫入文件one.txt和文件two.txt, one用不加緩沖的文件輸出流
來寫,two用緩沖文件輸出流來寫,比較用時的多少。 - 效果圖:
- one . txt不使用緩沖流來寫
- 用時為: 98
- two. txt使用緩沖流來寫
- 用時為: 2
- 節省時間: 96ms
- 任務要求:
- 1、用FileOutputStream寫one;
- 2、用BufferedOutputStream寫two;
- 3、寫100000個字符,可以使用for循環一次寫入一 個。
總結
- 上一篇: linux删除进程
- 下一篇: TMDB 5000电影数据集