日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java输入输出流

發布時間:2023/12/31 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java输入输出流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java輸入輸出流


文章目錄

  • Java輸入輸出流
  • File類的使用
  • 字節流
  • 緩沖流
  • 字符流
  • 對象序列化
  • 作業 01
  • 作業 02
  • 作業 03

File類的使用

  • 什么是文件?
    • 文件可認為是相關記錄或放在一起的數據的集合
    • 在Java中,使用java.io.File類對文件進行操作。
package may10; import java.io.File; import java.io.IOException;public class Test {public static void main(String[] args) {// 創建File對象(3中方式)/*** c:\\JavaTest\\IO 絕對路徑* IO\1 相對路徑* File file1=new File("IO\\1");表示當前目錄開始* “。。\\”表示跳上一級目錄*///File file=new File("c:\\JavaTest\\IO\\1.txt");//File file=new File("c:\\JavaTest","IO\\1.txt");File file=new File("c:\\JavaTest");File file1=new File(file,"IO\\1");/*** 判斷是文件還是目錄*/System.out.println("content:"+file1.isDirectory());System.out.println("File:"+file1.isFile());// 創建目錄File file2=new File("c:\\JavaTest\\Set","HashSet");if (!file2.exists()){// 創建單目錄 mkdir 多級目錄mkdirs//file2.mkdir();file2.mkdirs();}// 創建文件if (!file1.exists()){try {file1.createNewFile();/*** 判斷是否是絕對路徑isAbsolute()* 獲取相對路徑:getPath()* 獲取絕對路徑:getAbsolutePath()* 獲取文件名:getName()*/System.out.println(file1.isAbsolute());} catch (IOException e) {e.printStackTrace();}}System.out.println(file1.getAbsolutePath());System.out.println(file1.getPath());} }

字節流

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.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException;public class Test3 {/* public static void main(String[] args) {// FileOutputSreamFileOutputStream fos;FileInputStream fis;try {// append:true 不覆蓋源文件fos=new FileOutputStream("src\\may10\\imooc.txt",true);fis=new FileInputStream("src\\may10\\imooc.txt");fos.write(50);fos.write('a');System.out.println(fis.read());System.out.println((char) fis.read());fos.close();fis.close();} catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e){e.printStackTrace();}}*/public static void main(String[] args) {// 文件拷貝FileInputStream fis;FileOutputStream fos;try {fis=new FileInputStream("src\\image\\happy.gif");fos=new FileOutputStream("src\\image\\happycopy.gif");int n=0;byte[] b=new byte[1024];while ((n=fis.read(b))!=-1){fos.write(b,0,n);}} 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、再判斷其是文件還是目錄;判斷文件是否可讀、可寫:
    方法:請用適當的方法創建文件,判斷是文件還是目錄;以及判斷文件的可讀性。

package homework.File;import java.io.File; import java.io.IOException;public class Test {public static void main(String[] args) {// 創建文件File file=new File("src\\homework\\file\\Monday.docx");if (!file.exists()){try {file.createNewFile();System.out.println("文件創建成功!");System.out.println("文件名稱:"+file.getName());System.out.println("文件上一級目錄:"+file.getParent());} catch (IOException e) {e.printStackTrace();}}if (file.exists()){System.out.println("文件絕對路徑"+file.getAbsolutePath());}System.out.print("文件/目錄:");if (file.isFile()){System.out.println("這是文件");}else if (file.isDirectory()){System.out.println("這是目錄");}if (file.canRead() && file.canWrite()){System.out.println("文件是可讀、可寫");}else if (file.canRead()){System.out.println("文件是可讀");}else if (file.canWrite()){System.out.println("文件是可寫");}} }
  • 效果圖

作業 02

  • 老師讓程序員小馬統計英文演講稿speech.txt文件中共有多少個字符,并顯示所有內容以便在演講開始前
    有個準備,假如你是小馬,請完成老師教給你的任務。
  • 文本內容: abcdefghijklmnopqrst
  • 統計結果: speech. txt文件中共有20個字節。
  • 任務要求:
    • 1、實例化FileInputStream對象
    • 2、設置while循環讀取speech.txt文件內容
    • 3、在循環中設置計數器count, 每讀取一個字節,count加1
package homework.File;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException;public class test02 {public static void main(String[] args) {FileInputStream fis ;try {fis =new FileInputStream("src\\homework\\file\\speech.txt");int n,count=0;System.out.print("文件內容:");while ((n=fis.read())!=-1){count++;System.out.print((char) n);}System.out.println();System.out.print("統計結果:speech有多少"+count+"字節");fis.close();} catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e){e.printStackTrace();}} }
  • 效果圖

作業 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循環一次寫入一 個。
package homework.File;import java.io.*;public class test03 {public static void main(String[] args) {int i=0;FileOutputStream fos;BufferedOutputStream bos;System.out.println("one.txt不使用緩沖流來寫");try {long startTime=System.currentTimeMillis();fos =new FileOutputStream("src\\homework\\file\\1.txt");while (i<10000){fos.write(i++);}long endTime=System.currentTimeMillis();System.out.println("用時:"+(endTime-startTime));fos.close();} catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e){e.printStackTrace();}System.out.println("one.txt使用緩沖流來寫");try {long startTime=System.currentTimeMillis();fos=new FileOutputStream("src\\homework\\file\\1.txt");bos=new BufferedOutputStream(fos);while (i<10000){bos.write(i++);}bos.flush();long endTime=System.currentTimeMillis();System.out.println("用時:"+(endTime-startTime));fos.close();bos.close();} catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e){e.printStackTrace();}} }

總結

以上是生活随笔為你收集整理的Java输入输出流的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。