java 關於fileinputstream的使用
今天瞭解了一下fileinputstream的使用,關於其read方法的使用
1、如何使用fileinputstream讀取檔案中的內容,首先通過閱讀原始碼來了解一下其原理
/**
* Reads a byte of data from this input stream. This method blocks
* if no input is yet available.
*
* @return the next byte of data, or <code>-1</code> if the end of the
* file is reached.
* @exception IOException if an I/O error occurs.
* @Range(from=-1,to=255)
*/
public int read() throws IOException {
return read0();
}
Range(from=-1,to=255)
這是read()方法的說明,其讀取的其實就是按照ACSII碼來讀取的,超出的部分就會顯示亂碼。並且返回值為資料的ACSII碼,例如
pj.txt中
“
hello world
你好世界
”
import java.io.*;
import java.util.ArrayList;
public class E1 {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream=new FileInputStream("C:\\Users\\hasee\\Desktop\\pj.txt");
int temp;
while((temp=fileInputStream.read())!=-1)
System.out.print((char)temp);
}
}
結果為
hello world
ä½ å¥½ä¸–ç•Œ
所以我們讀取包括在ASCII中的資料的時候才使用這個方法,不然就選擇fileinputstream中的read(byte[])方法。
原始碼如下
/**
* Reads up to <code>b.length</code> bytes of data from this input
* stream into an array of bytes. This method blocks until some input
* is available.
*
* @param b the buffer into which the data is read.
* @return the total number of bytes read into the buffer, or
* <code>-1</code> if there is no more data because the end of
* the file has been reached.
* @exception IOException if an I/O error occurs.
* @Range(from=-1,to=java.lang.integer.MAX_VALUE)
*/
public int read(byte b[]) throws IOException {
return readBytes(b, 0, b.length);
}
由此可知,這個方法是把讀取到的資料存在byte[]陣列當中,並返回讀取到的資料的長度,並且其資料範圍
Range(from=-1,to=java.lang.integer.MAX_VALUE)
可以讀取的範圍更大。
同樣使用pj.txt測試
import java.io.*;
import java.util.ArrayList;
public class E1 {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream=new FileInputStream("C:\\Users\\hasee\\Desktop\\pj.txt");
byte[] bytes=new byte[1024];
while (fileInputStream.read(bytes)!=-1){
System.out.print(new String(bytes));
}
}
}
結果為
hello world
你好世界
注意:問題在今天使用read方法的時候出現,程式碼如下
import java.io.*;
import java.util.ArrayList;
public class E1 {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream=new FileInputStream("C:\\Users\\hasee\\Desktop\\pj.txt");
while (fileInputStream.read()!=-1){
System.out.print((char)fileInputStream.read());
}
}
}
測試檔案中內容為
“123456”
執行結果如下
246
我一開始很疑惑,為什麼總是缺少135,後面瞭解到,read方法其實可以理解為一個指標,當他第一次呼叫時候就會指向第一個資料,而後每一次呼叫都會使得指標往後移動一位,而我的程式碼中使用了read()方法在while中進行了判斷,然後又進行了輸出,導致判斷的那一次指向的資料就沒有被輸出,所就會產生這種情況。
相關文章
- java FileInputStream open0原始碼解析Java原始碼
- java基礎學習_io流之FileInputStreamJava
- Java 關於執行緒的一些使用Java執行緒
- 關於Remix的使用REM
- 關於Java的File.separatorJava
- 關於Java中的equals方法Java
- Android關於Typedarray的使用Android
- 關於Validation的方法使用
- 關於pcl索引的使用索引
- Java-關於ThreadJavathread
- 關於Java中的@Deprecated註解Java
- 關於Java中的反射機制Java反射
- 關於 Java 中的 RMI-IIOPJava
- Java 中關於protected的介紹Java
- 關於socket.io的使用
- 關於公眾號的使用
- 關於 Jupyter 的使用說明
- 關於JSON的簡單使用JSON
- 關於MySQL使用的時長MySql
- mybatis關於list的foreach的使用MyBatis
- 關於java中的i++和++iJava
- 關於java中的類載入器Java
- 關於Java異常的分類示例Java
- 關於Java使用MinIO檔案伺服器操作檔案Java伺服器
- (轉)git中關於fetch的使用Git
- 關於WPF進度條的使用
- 關於虛擬機器的使用虛擬機
- Windows 關於Robocopy的使用詳解Windows
- 關於GJSON包的簡單使用JSON
- QT5.9關於QMenuBar的使用QT
- 在Java中this關鍵字的使用Java
- Java基礎7:關於Java類和包的那些事Java
- 關於java的引用和c++的區別JavaC++
- 關於Java的取時間方法的爭論Java
- Java關於IO的一個小工具Java
- 關於Java兩點需要更新的知識Java
- Java--- 關於null的處理若干方法JavaNull
- 關於Java中的類和物件筆記Java物件筆記