重新認(rèn)識(shí)Java的System.in
重新認(rèn)識(shí) Java 的 System.in
以前也寫(xiě)過(guò)不少命令行的程序,處理文件時(shí)總需要通過(guò)參數(shù)指定路徑,直到今天看資料時(shí)發(fā)現(xiàn)了一種我自己從來(lái)沒(méi)用過(guò)的方式。這種方式讓我重新認(rèn)識(shí)了System.in。
下面是一個(gè)簡(jiǎn)單的Cat 命令的例子,這里提供了-n參數(shù)用于配置是否顯示行號(hào)。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Cat {
public static void main(String[] args) throws IOException {
//是否顯示行號(hào),使用參數(shù) -n 啟用
boolean showNumber = args.length > 0 && Arrays.asList(args).contains("-n");
int num = 0;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine();
while (line != null) {
if (showNumber) {
num++;
System.out.printf("%1$8s %2$s%n", num, line);
} else {
System.out.println(line);
}
line = reader.readLine();
}
}
}
這個(gè)方法中用到了參數(shù),參數(shù)只用于判斷是否存在-n這個(gè)參數(shù),沒(méi)有通過(guò)參數(shù)指定文件。
這里獲取文件內(nèi)容的方式就是 System.in,從輸入流中讀取。輸入流中怎么提供文件內(nèi)容呢?
就是通過(guò)輸入重定向到命令。針對(duì)上面的 Cat.java 文件執(zhí)行下面的命令:
javac Cat.java java Cat -n < Cat.java
先使用 javac 編譯,在通過(guò) java 命令執(zhí)行,通過(guò)輸入重定向?qū)at.java 作為命令的輸入流。
上面命令執(zhí)行后,輸出內(nèi)容如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Cat {
public static void main(String[] args) throws IOException {
boolean showNumber = args.length > 0 && Arrays.asList(args).contains("-n");
int num = 0;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine();
while (line != null) {
if (showNumber) {
num++;
System.out.printf("%1$8s %2$s%n", num, line);
} else {
System.out.println(line);
}
line = reader.readLine();
}
}
}
如果只是處理文件,和參數(shù)方式指定文件路徑?jīng)]太大的區(qū)別。但是如果通過(guò)管道方式,就可以很方便的將前面命令的輸出流作為輸入流繼續(xù)進(jìn)行處理。例如下面的命令:
java Cat -n < Cat.java | java Cat -n
前一個(gè)命令的輸出會(huì)作為第二個(gè)命令的輸入,這會(huì)在原有行號(hào)的基礎(chǔ)上增加一個(gè)行號(hào),結(jié)果如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Cat {
public static void main(String[] args) throws IOException {
boolean showNumber = args.length > 0 && Arrays.asList(args).contains("-n");
int num = 0;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine();
while (line != null) {
if (showNumber) {
num++;
System.out.printf("%1$8s %2$s%n", num, line);
} else {
System.out.println(line);
}
line = reader.readLine();
}
}
}
合理使用這種方式可以在某些情況下起到良好的作用。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- Java System.getProperty()-獲取系統(tǒng)參數(shù)案例詳解
- 深入了解Java核心類(lèi)庫(kù)--BigDecimal和System類(lèi)
- Java 語(yǔ)言中Object 類(lèi)和System 類(lèi)詳解
- Java System類(lèi)兩個(gè)常用方法代碼實(shí)例
- Java System類(lèi)用法實(shí)戰(zhàn)案例
- Java Math類(lèi)、Random類(lèi)、System類(lèi)及BigDecimal類(lèi)用法示例
- javaSystem.out.println()輸出byte[]、char[]異常的問(wèn)題詳析
- Java System.setProperty()用法詳解
相關(guān)文章
Spring?Boot自動(dòng)配置源碼實(shí)例解析
Spring Boot作為Java領(lǐng)域最為流行的快速開(kāi)發(fā)框架之一,其核心特性之一就是其強(qiáng)大的自動(dòng)配置機(jī)制,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot自動(dòng)配置源碼的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08
IDEA實(shí)現(xiàn)添加 前進(jìn)后退 到工具欄的操作
這篇文章主要介紹了IDEA 前進(jìn) 后退 添加到工具欄的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
Java處理科學(xué)計(jì)數(shù)法數(shù)字方式
這篇文章主要介紹了Java處理科學(xué)計(jì)數(shù)法數(shù)字方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Springboot如何操作redis數(shù)據(jù)
這篇文章主要介紹了Springboot如何操作redis數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Java枚舉類(lèi)型在switch語(yǔ)句正確使用方法詳解
這篇文章主要介紹了Java枚舉類(lèi)型在switch語(yǔ)句正確使用方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07

