Java輸入/輸出流體系詳解
在用java的io流讀寫文件時(shí),總是被它的各種流能得很混亂,有40多個(gè)類,理清啦,過一段時(shí)間又混亂啦,決定整理一下!以防再忘
Java輸入/輸出流體系
1.字節(jié)流和字符流
字節(jié)流:按字節(jié)讀取。字符流:按字符讀取。
字符流讀取方便,字節(jié)流功能強(qiáng)大,當(dāng)不能用字符流時(shí),可以用字節(jié)流。
字節(jié)流基類:InputStream、OutputStream
InputStream方法:
OutputStream方法:
字符流基類:Reader、Writer
Reader方法:
Writer方法:
2.輸入輸出流體系
3.轉(zhuǎn)換流
InputStreamReader:字節(jié)輸入流->字符輸入流的轉(zhuǎn)換
OutputStreamWriter:字節(jié)輸出流->字符輸出流的轉(zhuǎn)換
例如:字節(jié)輸入流->字符輸入流的轉(zhuǎn)換
字節(jié)流使用不方便,而普通的Reader讀取也不太方便,轉(zhuǎn)換成BufferReader,利用BufferReader的readLine(),一次讀取一行。
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String result = ""; String line = ""; while((line = reader.readLine())!= null){ result = result+ line; } System.out.println(result);
InputStream to String:
private static String changeInputeStream(InputStream inputStream,String encode) { //通常叫做內(nèi)存流,寫在內(nèi)存中的 ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] data = new byte[1024]; int len = 0; String result = ""; if(inputStream != null){ try { while((len = inputStream.read(data))!=-1){ outputStream.write(data, 0, len); } //result是在服務(wù)器端設(shè)置的doPost函數(shù)中的 result = new String(outputStream.toByteArray(),encode); outputStream.flush(); outputStream.close(); inputStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return result; }
InputStream->StringBuffer:
StringBuffer buffer = new StringBuffer(); InputStreamReader reader =new InputStreamReader(request.getInputStream(),"utf-8"); char[] requestchar = new char[5]; if(reader != null){ System.out.println("默認(rèn)編碼:"+reader.getEncoding());//默認(rèn)編碼:UTF8 } //buffer reader.readLine() while((temp = reader.read(requestchar))!=-1){ buffer.append(requestchar, 0, temp); System.out.println(buffer.toString()); } String result = buffer.toString();
4.文件讀寫:
class Kaoshi {public static void main(String[] args){ Scanner in=new Scanner(System.in); int score=0; //分?jǐn)?shù); StringBuffer answer=new StringBuffer();//存放用戶答案,動態(tài)字符串; String result="ACDD"; //正確答案; try{ FileReader file=new FileReader("Test.txt"); //打開文件; BufferedReader intw=new BufferedReader(file); //緩沖流,按行讀; String s=null; while((s=intw.readLine())!=null){ //判斷不為空; if(!s.startsWith("*")){ System.out.println(s); } else{ System.out.println("請輸入正確答案:"); String str=in.next(); char c= str.charAt(0);//收集答案; answer.append(c); } } }catch(IOException e){ e.printStackTrace(); } for(int i=0;i<result.length();i++){ if(result.charAt(i)==answer.charAt(i)|| result.charAt(i)==answer.charAt(i)-32){ score+=25; } } System.out.println(score); } }
總結(jié)
以上就是本文關(guān)于Java輸入/輸出流體系詳解的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Java基礎(chǔ)強(qiáng)化訓(xùn)練輸入錯誤即結(jié)束進(jìn)程、Java控制臺輸入數(shù)組并逆序輸出的方法實(shí)例、Java輸出鏈表倒數(shù)第k個(gè)節(jié)點(diǎn)等,如有不足之處,歡迎留言指出,期待您的寶貴意見。
相關(guān)文章
Springboot?+redis+谷歌開源Kaptcha實(shí)現(xiàn)圖片驗(yàn)證碼功能
這篇文章主要介紹了Springboot?+redis+?歌開源Kaptcha實(shí)現(xiàn)圖片驗(yàn)證碼功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01Spring工廠方法創(chuàng)建(實(shí)例化)bean實(shí)例代碼
這篇文章主要介紹了Spring工廠方法創(chuàng)建bean實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Mybatis_plus基礎(chǔ)教程(總結(jié)篇)
這篇文章主要介紹了Mybatis_plus基礎(chǔ)教程(總結(jié)篇),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09form表單回寫技術(shù)java實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)form表單回寫技術(shù)的相關(guān)資料,需要的朋友可以參考下2016-04-04maven tomcat plugin實(shí)現(xiàn)熱部署
這篇文章主要介紹了maven tomcat plugin實(shí)現(xiàn)熱部署,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07Spring中的@EnableScheduling定時(shí)任務(wù)注解
這篇文章主要介紹了Spring中的@EnableScheduling注解,@EnableScheduling是 Spring Framework 提供的一個(gè)注解,用于啟用 Spring 的定時(shí)任務(wù)功能,通過使用這個(gè)注解,可以在 Spring 應(yīng)用程序中創(chuàng)建定時(shí)任務(wù),需要的朋友可以參考下2024-01-01