您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“JavaSE IO流常用方法有哪些”,內容詳細,步驟清晰,細節處理妥當,希望這篇“JavaSE IO流常用方法有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
IO流這塊知識點碎且雜,但仍然有跡可循。
內容
創建一個字節輸入流管道
定義一個字節數組
循環中將字節數組轉成字符串打印出來
代碼
//1.直接創建一個字節輸入流管道和源文件對接接通 InputStream is = new FileInputStream("Day09Demo/src/dilei02.txt"); //2.必須使用循環,但是還是無法解決中文亂碼的問題 //a.定義一個字節數組代表桶 byte[] buffer = new byte[3]; int len;//存儲每次讀取的字節數 //3.循環,括號以及等號右邊有優先級,因此is.read(buffer)拿到桶后裝三滴水,返回3然后判斷不等于-1 while ((len = is.read(buffer))!=-1){ //讀多少倒多少! String rs = new String(buffer,0,len); System.out.print(rs);//不用換行 }
內容
寫一個字節
寫一個字節數組
寫部分字節數組
追加管道
關閉管道
代碼
//1.創建一個字節輸出流管道與目標文件接通,默認是數據覆蓋管道 //追加數據管道,可以追加數據,原來數據不清掉 //OutputStream os = new FileOutputStream("Day09Demo/src/dilei04.txt",true); OutputStream os = new FileOutputStream("Day09Demo/src/dilei04.txt");//不用自己再建文件,因為源碼中已經有創建文件 //2.寫一個字節出去(寫一滴水出去) os.write(97);//字節a os.write('b');//字節b //os.write('芬');//只會寫出中文的第一個字節,寫出去就是亂碼了! os.write("\r\n".getBytes());//加了\r是在哪個系統都可以換行 //3.寫一個字節數組出去(寫一個桶出去) byte[] bytes = new byte[]{34,54,65,76,87,6,54};//寫了一堆字節 os.write(bytes); byte[] bytes1 = "Java是最優美的語言".getBytes();//直接拿字符串調getbytes得到字節,默認以當前編碼UTF-8提取 System.out.println(bytes1.length);//看看長度 os.write(bytes1); os.write("\r\n".getBytes());//換行 //4.寫一個字節數組的一部分出去 byte[] bytes2 = "Java是最優美的語言".getBytes(); os.write(bytes2,0,19); os.write("\r\n".getBytes());//換行 //6.刷新或者關閉下 os.flush();//立即刷新數據到文件中去,刷新后管道可以繼續使用 os.close();//記得關閉資源管道,關閉包含了刷新,關閉后管道不能使用了
內容:一半字節流用來做文件復制的多,因為讀寫文件難避免中文字符出現亂碼的情況
建兩根輸入流和輸出流管道
循環先讀后寫
捕獲下異常
代碼
public static void main(String[] args) { //try后面小括號放置資源對象,用完會自動調用close關閉,省的finally里面寫了 try(//相當于常量,只能給一次初始值 //1.創建一個字節輸入流管道和源文件接通 InputStream is = new FileInputStream("C:\\Users\\CZyue\\Desktop\\壁紙\\girl.jpg"); //2.創建一個字節輸出流與目標文件接通 OutputStream os = new FileOutputStream("C:\\Users\\CZyue\\Desktop\\littlegirl.jpg"); ) { //3.創建一個字節數組作為桶 byte[] butter = new byte[1024]; //4.從字節輸入流讀取數據,寫到字節輸出流管道即可 //定義一個變量存儲每次桶讀取的字節數 int len; while ((len = is.read(butter))!=-1){ //讀取多少就倒出多少 os.write(butter,0,len); } System.out.println("復制完成!!"); }catch (Exception e){ e.printStackTrace(); } }
內容
和字節輸入流差不多,把字節byte換成字符char即可
代碼
//1.創建一個字符輸入流管道與源文件路徑接通 Reader fr = new FileReader("Day10Demo\\src\\dilei01.txt"); //2.使用循環讀取 char[] chars = new char[1024]; //定義一個整數記錄每次桶讀取的字符數據量 int len = 0; while((len = fr.read(chars))!=-1){ //讀多少倒出多少 System.out.print(new String(chars,0,len)); }
內容:
和字節輸出流差不多,字符可以隨意輸出啦
代碼
//1.創建字符輸出流管道通向目標文件路徑 //追加數據管道,表示不會清空數據 //Writer fw = new FileWriter("Day10Demo\\src\\dilei03.txt",true); Writer fw = new FileWriter("Day10Demo\\src\\dilei03.txt"); //2.寫一個字符出去: public void write(int a)/public void write(String c) fw.write(97);//字符a fw.write(98);//字符a fw.write('芬');//字符芬 fw.write("\r\n");//換行 //3.寫一個字符串出去: fw.write("Java是最優美的語言"); fw.write("\r\n");//換行 //4.寫一個字符數據數據出去:public void write(char[] butter) fw.write("我愛中國".toCharArray());//打印成字符數組 fw.write("\r\n");//換行 //5.寫字符串一部分出去:public void write(String c,int pos,int len) fw.write("Java是最優美的語言",0,9); fw.write("\r\n");//換行 //6.寫字符數組的一部分出去 fw.write("我愛中國".toCharArray(),0,2); fw.write("\r\n");//換行 fw.close();
內容:
new 一個字節緩沖輸入流,然后將原來的字節輸入流對象丟進去
代碼
public static void main(String[] args) throws Exception { //1.定義一個低級的字節輸入流與源文件接通 InputStream is = new FileInputStream("Day10Demo\\src\\dilei03.txt"); //2.把低級的字節輸入流包裝成一個高級的緩沖字節輸入流,多了個緩沖池 BufferedInputStream bis = new BufferedInputStream(is); //3.定義一個字節數組按照循環讀取 byte[] buffer = new byte[3]; int len; while((len=bis.read(buffer))!=-1){ String rs = new String(buffer,0,len); System.out.println(rs); } }
內容
new 一個字節緩沖輸出流,然后將原來的字節輸出流對象丟進去
代碼
public static void main(String[] args) throws Exception { //1.寫一個原始的字節輸出流 OutputStream os = new FileOutputStream("Day10Demo\\src\\dilei05.txt"); BufferedOutputStream bos = new BufferedOutputStream(os); //2.寫數據出去 bos.write('a'); bos.write(100); bos.write("我愛中國".getBytes()); bos.close(); }
內容:分別比較四種字節流的復制性能
使用一般的字節流一個一個字節形式的復制文件
使用一般的字節流一個一個字節數組形式的復制文件
使用高級的緩沖字節流一個一個字節形式的復制文件
使用高級的緩沖字節流一個一個字節數組形式的復制文件
代碼
public class CopyDemo { public static final String SRC_FILE="C:\\Users\\CZyue\\Desktop\\04_問題答疑.vip"; public static final String DEST_FILE="C:\\Users\\CZyue\\Desktop\\Hadoop\\"; public static void main(String[] args) { //一般的字節流一個一個字節形式的復制文件耗時141.218s //一般流一個一個字節復制,速度跟蝸牛有的一拼,直接淘汰,靜止使用! copy01(); //一般的字節流一個一個字節數組的復制文件耗時0.312s,速度較慢 copy02(); //高級的字節緩沖流一個一個字節形式的復制文件耗時0.309s,速度較慢 copy03(); //高級的字節緩沖流一個一個字節數組的復制文件耗時0.186s,速度極快,這流可以處! copy04(); } //1.使用一般的字節流一個一個字節形式的復制文件 public static void copy01(){ long startTimer = System.currentTimeMillis(); try{ //1.創建一個一般字節輸入流與源文件接通 InputStream is = new FileInputStream(SRC_FILE); //2.創建一個一般的字節輸出流和目標文件接通 FileOutputStream os = new FileOutputStream(DEST_FILE+"緩沖字節流復制的test1.vip"); //3.定義一個整形變量存儲讀取的字節 int ch; while ((ch = is.read())!=-1){ os.write(ch); } long endTimer = System.currentTimeMillis(); System.out.println("一般的字節流一個一個字節形式的復制文件耗時"+(endTimer-startTimer)/1000.0); }catch (Exception e){ e.printStackTrace(); } } //2.使用一般的字節流一個一個字節數組形式的復制文件 public static void copy02(){ long startTimer = System.currentTimeMillis(); try{ //1.創建一個一般字節輸入流與源文件接通 InputStream is = new FileInputStream(SRC_FILE); //2.創建一個一般的字節輸出流和目標文件接通 FileOutputStream os = new FileOutputStream(DEST_FILE+"緩沖字節流復制的test2.vip"); //3.定義一個字節數組存儲字節 byte[] butter = new byte[1024];//1KB //定義一個變量存儲每次讀取的字節數量 int len; while ((len=is.read(butter))!=-1){ os.write(butter,0,len); } long endTimer = System.currentTimeMillis(); System.out.println("一般的字節流一個一個字節數組的復制文件耗時"+(endTimer-startTimer)/1000.0); }catch (Exception e){ e.printStackTrace(); } } //3.使用高級的緩沖字節流一個一個字節形式的復制文件 public static void copy03(){ long startTimer = System.currentTimeMillis(); try{ //1.創建一個高級字節輸入流與源文件接通 InputStream is = new FileInputStream(SRC_FILE); BufferedInputStream bis = new BufferedInputStream(is); //2.創建一個高級的字節輸出流和目標文件接通 FileOutputStream os = new FileOutputStream(DEST_FILE+"緩沖字節流復制的test3.vip"); BufferedOutputStream bos = new BufferedOutputStream(os); //3.定義一個整形變量存儲讀取的字節 int ch; while ((ch = bis.read())!=-1){ bos.write(ch); } long endTimer = System.currentTimeMillis(); System.out.println("高級的字節緩沖流一個一個字節形式的復制文件耗時"+(endTimer-startTimer)/1000.0); }catch (Exception e){ e.printStackTrace(); } } //4.使用高級的緩沖字節流一個一個字節數組形式的復制文件 public static void copy04(){ long startTimer = System.currentTimeMillis(); try{ //1.創建一個低級字節輸入流與源文件接通 InputStream is = new FileInputStream(SRC_FILE); BufferedInputStream bis = new BufferedInputStream(is); //2.創建一個低級的字節輸出流和目標文件接通 FileOutputStream os = new FileOutputStream(DEST_FILE+"緩沖字節流復制的test4.vip"); BufferedOutputStream bos = new BufferedOutputStream(os); //3.定義一個字節數組存儲字節 byte[] butter = new byte[1024];//1KB //定義一個變量存儲每次讀取的字節數量 int len; while ((len=is.read(butter))!=-1){ os.write(butter,0,len); } long endTimer = System.currentTimeMillis(); System.out.println("高級的字節緩沖流一個一個字節數組的復制文件耗時"+(endTimer-startTimer)/1000.0); }catch (Exception e){ e.printStackTrace(); } }
內容
使用readLine()的方法:public String readLine()讀取一行數據返回,讀取完畢返回null
代碼
public static void main(String[] args) throws Exception { //1.定義一個原始的一般的字符輸入流 Reader fr = new FileReader("Day10Demo\\src\\dilei06.txt"); //2.把一般的字符輸入流包裝成高級的字符緩沖輸入流管道 BufferedReader br = new BufferedReader(fr); //3.定義一個字符串變量存儲每一行數據 String line; //使用一個循環讀取數據(經典代碼) while ((line = br.readLine())!=null){//有時候業務需要一行一行讀 System.out.print(line); } br.close();//代碼少直接close,規范的應該try的小括號關閉,這邊簡略些 }
內容:同字符緩沖流,new一個BufferedWriter,然后把字符輸出流對象丟進去
代碼
public static void main(String[] args) throws Exception { //1.定義一個一般的字符輸出流寫數據出去 //如果要追加,還是只能在原來的一般的字符輸出流中操作 //Writer fw = new FileWriter("Day10Demo\\src\\dilei07.txt",true); Writer fw = new FileWriter("Day10Demo\\src\\dilei07.txt"); //2.把一般的低級的字符輸出流包裝成高級的字符緩沖輸出流管道 BufferedWriter bw = new BufferedWriter(fw); //3.寫字符輸出,使用newLine()作為換行符 bw.write("學習IO流中~~"); bw.newLine(); //bw.write("\r\n");newLine就替代了這個呢 bw.write("今天Javase要全部結束啦,真棒!!!"); bw.close(); }
內容:可以把原始的字節流按照指定編碼轉換成字符輸入流
代碼
public static void main(String[] args) throws Exception { //代碼:UTF-8 文件:GBK //1.提取GBK文件的原始字節流 InputStream is = new FileInputStream("C:\\Users\\CZyue\\Desktop\\試試看.txt"); //2.把原始字節輸入流通過轉換流,轉換成字符輸入轉換流InputStreamReader //Reader isr = new InputStreamReader(is);//默認UTF-8 Reader isr = new InputStreamReader(is,"GBK");//默認UTF-8 //3.包裝成緩沖流 BufferedReader br = new BufferedReader(isr); //4.打印出來看看 String line; while ((line=br.readLine())!=null){ System.out.println(line); } }
內容:可以把原始的字節流按照指定編碼轉換成字符輸出流
代碼
public static void main(String[] args) throws Exception { //1.創建一個一般的字節輸出流 OutputStream os = new FileOutputStream("Day10Demo\\src\\dilei07.txt"); //2.把字節輸出流包裝成字符輸出流 //Writer osw = new OutputStreamWriter(os);//默認編碼字節輸出流轉換成字符輸出流 Writer osw = new OutputStreamWriter(os,"GBK");//按照GBK編碼字節輸出流轉換成字符輸出流 //3.寫看看 osw.write("abc我是中國人"); osw.close(); }
內容:可以實現打印啥出去,就是啥出去
代碼
public static void main(String[] args) throws Exception { //1.打印流PrintStream // OutputStream os = new FileOutputStream("Day10Demo\\src\\dilei08.txt"); // PrintStream ps = new PrintStream(os); //2.可以直接打印流通向文件路徑,以及兩者PrintStream和PrintWriter可以混用 PrintStream ps = new PrintStream("Day10Demo\\src\\dilei08.txt"); PrintWriter pw = new PrintWriter("Day10Demo\\src\\dilei08.txt");//可以直接通向文件,但是默認覆蓋了 //3.注意:不能丟給緩沖流,因為打印流底層基于緩沖流了,這流很厲害! //4.打印看看 ps.println(97);//可以打印各種數據,寫啥打啥,這邊97不是字母了,直接就是97 ps.println(99.8); ps.println(false); ps.println('芬'); ps.close(); }
內容:數據會流向打印流,打印流會流向文件
代碼
public static void main(String[] args) throws Exception { /1./這個流向控制臺 System.out.println("=====java0========"); //2.即下面的內容會流向打印流,打印流會流向文件 PrintStream ps = new PrintStream("Day10Demo\\src\\log.txt"); System.setOut(ps);//讓系統的輸出流向打印流,java提供的靜態方法 System.out.println("=====java1========"); System.out.println("=====java2========"); System.out.println("=====java3========"); System.out.println("=====java4========");
讀到這里,這篇“JavaSE IO流常用方法有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。