java基礎知識之輸入輸出
阿新 • • 發佈:2019-02-06
Java的System.out來表示標準輸出裝置,預設是先顯示器;System.in表示標準輸入裝置,預設是鍵盤;可以使用Scanner類從控制檯輸入,Scanner在java.util類裡面。
使用Scanner類用來從控制檯讀取字串和基本型別數值。為了從鍵盤讀取,需要為System.in建立一個Scanner。
Scanner input = new Scanner(System.in);
讀取double值
double radius = input.nextDouble();
讀取字串
Scanner input = new Scanner(System.in);
System.out.println("Please input:");//必須要寫,為了開啟console
String s1 = input.next();
String s2 = input.next();
String s3 = input.next();
System.out.println("s1 is:" + s1);
System.out.println("s2 is:" + s2);
System.out.println("s3 is:" + s3);
input.close();//注意關閉
next讀取以空白字元結束的字串即‘ ' '\t' '\f' '\r' '\n'
nextLine()讀取一整行文字。
從控制檯讀取字元
Scanner input = new Scanner(System.in);
System.out.println("Please input:");
String s = input.nextLIne();
char ch = s.charAt(0);
使用Scanner從檔案中讀取資料
java.io.File file = new java.io.File("image/filename");
Scanner input = new Scanner(file);
。。。。
Scaner如何工作
nextByte(),nextInt()等都稱為標記讀取方法,預設分隔符是空格,可以使用useDelimiter(String regrex)設定新的分隔符模式。
輸入輸出重定向
輸入重定向
java SentineValue < input.txt
這個相當於把標準輸入鍵盤重定向到檔案,注意和java讀取檔案區分;
輸出重定向
java ClassName > output.txt
將標準輸出控制檯(顯示器)重定向為文字
向main方法傳遞字串
java TestMain arg0 arg1 arg2
arg0 arg1 arg2都是字串,在命令列中出現時,不需要加引號
java TestMain “First num” alpha 53
使用3個字串“First num” alpha 53啟動程式。“First num”是一個字串,53被當成一個字串來處理
當呼叫main方法時,Java直譯器會建立一個數組來儲存命令列引數然後將該陣列的引用傳遞給args。
args = new String【n】;
如果執行程式沒有傳遞字串,那麼使用new Strig【0】來建立陣列,args是對這個空陣列的引用,args不是null,args.length是0;
public class MainInput {
public static void main(String[] args) {
if(args.length != 3)
System.out.println("Please input 3 charcter:");
else
System.out.println("args[0]=" + args[0] +
" args[1]=" + args[1] + " args[2]=" + args[2]);
}
}
File類
File包含了一個獲得檔案/目錄的屬性,以及對檔案/目錄進行改名和刪除的方法。
java.io.File file = new java.io.File("image/us.gif");
檔案輸入和輸出
使用Scanner類從檔案中讀取資料,使用PrinterWriter類向文字檔案中寫入資料。
File物件建立了檔案或路徑的屬性,但是它即不包含建立檔案的方法,也不包括從/向檔案讀/寫資料的方法。文字檔案本質上是儲存在磁碟上的字元
使用PrinterWriter寫資料
PrintWriter output = new PrintWriter(filename);
然後就可以通過print,println,printf來向檔案中寫資料了。
寫完了關閉檔案
output.close();
忘記關閉檔案,使用try-with-resources
try(宣告和建立資源) {
使用資源來處理檔案
}
例項:
try(java.io.PrintWriter output = new java.io.PrintWriter(file);) {
output.print("Java");
...
}
從web上讀取資料
為了讀取這個檔案,首先使用java.net.URL類的這個構造方法
URL url = new URL("http://www.baidu.com");
必須要加http://
然後用Scanner讀取就ok了。
二進位制IO
二進位制IO類
抽象類InputStream是讀取二進位制資料的跟類,抽象類OutputStream是寫入二進位制資料的跟類。
二進位制IO所有方法都宣告為java.io.Exception或其之類
InputStream:
FileInputStream 用於向檔案寫位元組,預設重寫當前檔案,如果要最加,將append設定為true
FilterInputStream: 使用過濾資料流,可以讀取到整數值,雙精度值和字串
DataInputStream 處理基本數值型別
BufferInputStream 可以減少磁碟的讀次數來提高輸入輸出的速度,磁碟上的整塊資料一次性的讀入到記憶體中的緩衝區,然後從緩衝區將個別資料傳遞到程式中,緩衝區預設大小512位元組
ObjectInputStream 用於讀可序列化的物件
OutputStream:
FileOutputStream 用於向檔案讀位元組,預設重寫當前檔案,如果要最加,將append設定為true
FilterOutputStream: 使用過濾資料流,可以輸出到整數值,雙精度值和字串
DataOutputStream 處理基本數值型別
BufferOutputStream 可以減少磁碟的寫次數來提高輸入輸出的速度,從程式中將個別資料傳遞到記憶體中的緩衝區,然後記憶體中的緩衝區一次性的寫入到磁碟上,緩衝區預設大小512位元組
ObjectOutputStream 用於寫可序列化的物件
serializable介面
並不是每個物件都可以寫到輸出流,可以寫入到輸出流中的物件稱為可序列化物件(serializable)。因為可序列化物件是java.io.Serializable介面的例項,所以,可序列化物件必須實現Seriablizable介面
java.io.Serializable介面是一種標記介面,因為它沒有方法,所以,不需要為實現java.io.Serializable介面增加額外的程式碼。
可序列化陣列
如果陣列中的所有元素都是可序列化的,這個陣列就是可序列化的,一個完整的陣列可以用ObjectOutputStream.writeObject方法寫入檔案,用ObjectInputStream.readObject方法恢復。
上面二進位制io中使用的流都是隻讀的(read.only)或只寫的(write.only),這些流稱為順序流。使用順序流開啟的檔案稱為順序檔案。順序檔案的內容不能更新。
Java提供了RandomAccessFile類實現了DataInput和DataOutput介面。
DataInput介面定義了讀取基本資料型別和字串的方法
DataOutput介面定義了寫入基本資料型別和字串的方法
RandomAccessFile可以指定兩種模式(“r”或“rw”)之一。“r”只讀,“rw"即允許讀也允許寫。如果不想改動檔案,就醫”r“模式開啟。