[英]How do I read file x bytes at a time ? in java
我想將文件讀入Java的String中,一次x個字符。 然后,我將對字符串進行一些操作,並希望從我中斷的地方繼續。 我該怎么辦?
編輯:
目標文件是一個簡單的文本文件。
好吧,首先您需要區分字節和字符 。 您可以一次從InputStream
讀取一定數量的字節(作為最大數量;不能保證將獲得所需的所有字節),並且可以從Reader
一次讀取多個字符。時間(再次,最大)。
聽起來您可能想在InputStreamReader
周圍使用InputStream
,指定適當的字符編碼,然后從InputStreamReader
讀取。 如果必須有准確的字符數,則需要循環-例如:
public static String readExactly(Reader reader, int length) throws IOException {
char[] chars = new char[length];
int offset = 0;
while (offset < length) {
int charsRead = reader.read(chars, offset, length - offset);
if (charsRead <= 0) {
throw new IOException("Stream terminated early");
}
offset += charsRead;
}
return new String(chars);
}
您是否嘗試過使用BufferedReader ? 它定義了read(char[], int, int)
,它幾乎完全滿足您的要求。 也就是說,它遞歸地調用read來嘗試填充緩沖區。
用法示例:
char[] chars = new char[length];
reader.read(chars,0,length);
String str = String.valueOf(chars);
說明文件:
public int read(char [] cbuf,int off,int len)拋出IOException
此方法實現Reader類的相應read方法的常規協定。 作為一個額外的便利,它嘗試通過重復調用基礎流的讀取方法來讀取盡可能多的字符。 重復執行此迭代讀取,直到滿足以下條件之一:
- 已讀取指定數量的字符,
- 基礎流的read方法返回-1,表示文件結束,或者
- 基礎流的ready方法返回false,指示其他輸入請求將被阻止。
如果對基礎流的第一次讀取返回-1表示文件結束,則此方法返回-1。 否則,此方法返回實際讀取的字符數。
最后一點很重要,因為這意味着可以阻塞的流返回的字符可能少於預期的字符。 盡管從本地文件讀取時,讀取器或流應始終具有可讀取的字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.