我如何一次读取文件x字节? 在java中

我希望一次将文件读入Java中的字符串,x chars。 然后我会用字符串做一些事情,并希望从我离开的地方继续。 我该怎么办?

编辑:

目标文件是一个简单的文本文件。

那么,首先你需要区分字节字符 。 您可以一次从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方法返回-1,表示文件结束,或
  • 底层流的ready方法返回false,表示进一步的输入请求将被阻塞。

如果对基础流的第一次读取返回-1以指示文件结束,则此方法返回-1。 否则,此方法返回实际读取的字符数。

最后一点很重要,因为这意味着可以阻塞的流可能返回的字符数少于预期。 虽然从本地文件读取时,读取器或流应始终具有可读取的字节。