java IO(四):鍵盤錄入

来源:https://www.cnblogs.com/f-ck-need-u/archive/2017/12/31/8159057.html
-Advertisement-
Play Games

要讀取鍵盤輸入的數據,需要使用輸入流,可以是位元組輸入流,也可以是位元組輸入流轉換後的字元輸入流。 關於鍵盤輸入,有幾點註意的是:(1).鍵盤輸入流為System.in,其返回的是InputStream類型,即位元組流。(2).位元組流讀取鍵盤的輸入時,需要考慮回車符(\r:13)、換行符(\n:10)。( ...


要讀取鍵盤輸入的數據,需要使用輸入流,可以是位元組輸入流,也可以是位元組輸入流轉換後的字元輸入流。

關於鍵盤輸入,有幾點註意的是:
(1).鍵盤輸入流為System.in,其返回的是InputStream類型,即位元組流。
(2).位元組流讀取鍵盤的輸入時,需要考慮回車符(\r:13)、換行符(\n:10)。
(3).按行讀取鍵盤輸入時,需要指定輸入終止符,否則輸入將被當作here String文本,而非document。
(4).System.in位元組流預設一直處於打開狀態,可不用對其close(),但如果close()了,後續將不能使用in流。

例如,以位元組輸入流讀取輸入,此時只能輸入ascii碼中的符號。如果需要讀取中文字元,使用位元組流則需要加很多額外的代碼來保證中文字元的位元組不會被切分讀取。

import java.io.*;

public class KeyB {
    public static void main(String[] args) throws IOException {
        InputStream in = System.in;
        int ch = in.read();
        System.out.println(ch);
        int ch1 = in.read();
        System.out.println(ch1);
        int ch2 = in.read();
        System.out.println(ch2);
        int ch3 = in.read();
        System.out.println(ch3);
        int ch4 = in.read();
       System.out.println(ch4);
    }
}

以上示例中,將讀取鍵盤上輸入的5個位元組,例如輸入"ab"回車後,將輸出"ab\r\n"的ascii碼(97-98-13-10),並繼續等待輸入下一個位元組才退出。

要想一次性讀取一行,可以將它們讀取到位元組數組中,並以回車符、換行符判斷一行讀取完畢,再將位元組數組轉換為字元串輸出。雖然用位元組流能夠完成這樣的操作,但顯然,如果使用字元流,則更輕鬆。

import java.io.*;

public class KeyB {
    public static void main(String[] args) throws IOException {

        //InputStream in = System.in   //鍵盤輸入位元組流
        //InputStreamReader isr = new InputStreamReader(in);   //橋梁,將位元組流轉換為字元流
        //BufferedReader bufr = new BufferedReader(isr);       //以BufferReader的readLine()讀取行
        BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

        String line = null;
        //line = bufr.readLine();System.out.println(line);   //輸入一行立即退出
        while((line = bufr.readLine())!=null) {      //迴圈輸入多行,直到輸入終止符時才退出
            if (line.equals("quit")) {   //定義鍵盤輸入終止符quit
                break;
            }
            System.out.println(line);
        }
    }
}

註意,BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));幾乎是涉及到鍵盤錄入時的一條固定代碼,屬於可以直接背下來的。

以下是一個示例,需求是將鍵盤輸入的結果保存到文件d:\myjava\a.txt中。

import java.io.*;

public class Key2File {
    public static void main(String[] args) throws IOException {
        //1.源:鍵盤輸入,目標:文件
        //2.輸入中可能包含中文字元,所以採用字元流,輸出也採用字元流
        //3.需要使用Buffered流來提高效率並使用其提供的行操作方法
        BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufw = new BufferedWriter(new FileWriter("d:/myjava/a.txt"));

        String line = null;
        while((line=bufr.readLine())!=null) {
            if(line.equals("quit")) {
                break;
            }
            bufw.write(line);
            bufw.newLine();
            bufw.flush();
        }
        bufw.close();
    }
}

註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現在正式開始第一篇博客。 先看一個式子: x+y+z=5 2*x+3*y+z=11 x+4*y+z=11 如果問人怎麼解,人家肯定會告訴你,消元啦~ 實際上消元有兩種:加減消元和帶入消元 在電腦上編程實現的話,加減消元會簡單一些。 這樣就有了我們的高斯消元法。 高斯消元就是有多個加減消元構成的,能夠 ...
  • 1.Java I/O 概述 2.Java I/O File類 3.Java I/O 獲取文件目錄並寫入到文本 4.Java I/O 輸入與輸出 5.Java I/O 複製文本文件 6.Java I/O 添加屬性和有用的介面 7.Java I/O Reader & Writer(字元流) 8.Java ...
  • 位元組流、字元流涉及的類比較多,比較容易混淆。因此,有必要針對何時使用位元組流、何時使用字元流、何時使用Buffer類的流做一個歸納。要歸納它們,無需過多的語言,只需抓住它們的重點和特性即可。 在決定何時使用何種類時,以下幾個問題需要考慮清楚。 數據源:表示輸入,或稱為讀。可提供使用的兩個父類為Inpu ...
  • 一、原理 Spring MVC基於模型-視圖-控制器(Model-View-Controller,MVC)模式實現,它能夠幫你構建像Spring框架那樣靈活和松耦合的Web應用程式,將請求處理的邏輯和視圖中的渲染實現解耦。 1、DispatcherServlet是Spring MVC的核心 。Spr ...
  • 本人一直在走.NET技術路線,考慮到後期公司搞JAVA項目,也算是進行技術災備,開始對JAVA技術進行關註。萬事開頭難,也是上來一頭包。沒辦法,頂著上吧。上面開始分給我任務了。就是對後期項目報表進行方案選型。哥們兒花了兩周的時間總算是提供了幾個方案,以供相關人員選擇。特將此次過程整理如下: 一、萬事 ...
  • 一、Spring MVC 驗證 JSR 303 是ajvaEE6 中的一項子規範 ,叫 Bean Validation 用於對javaBean中的欄位進行校驗。 官方的參考實現是: Hibernate Validator ,此實現和 Hibernate ORM 沒有任何關係 //http://hib ...
  • ##importlogginglogging.debug('debug message')logging.info('info message')logging.warning('warning message') # WARNING:root:warning messagelogging.erro ...
  • 註意迭代器和可迭代對象不同#迭代器:1、有iter方法,2、有next方法li=[1,2,3,4,5]d=iter(li) # 等於li.__iter__()print(d) # <list_iteratorobjectat0x00000174316CC3C8>可以通過next方法取出元素。for循 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...