从Java中的位置读取文本文件

时间:2012-04-11 08:48:13

标签: java text io

我需要使用指定的Charset从OFFSET的文本文件中读取char [](大小为COUNT)。 COUNT和OFFSET是字符,而不是字节。 他是我的代码:

raf = new RandomAccessFile(filePath, "r");      
if ((mBuffer == null) || (mBuffer.length < count)) {
    mBuffer = new byte[(int)(count/mDecoder.averageCharsPerByte())];
    mByteWrap = ByteBuffer.wrap(mBuffer);
    mCharBuffer = new char[count];
    mCharWrap = CharBuffer.wrap(mCharBuffer);
}
try {
    offset = (int)(offset/mDecoder.averageCharsPerByte());
    count = (int)(count/mDecoder.averageCharsPerByte());
    raf.seek(offset);
    raf.read(mBuffer,0,count);
    mByteWrap.position(0);
    mCharWrap.position(0);
    mDecoder.decode(mByteWrap, mCharWrap, true);
} catch (IOException e) {
    return null;
}
return mCharBuffer;

有没有更容易的方法? (没有手动匹配char-&gt;字节)

我正在寻找java.util.Scanner,但它是Iterator风格的,我需要随机访问风格。

PS数据应该多次复制

2 个答案:

答案 0 :(得分:2)

使用BufferedReader的skip()方法。 在你的情况下:

BufferedReader reader = new BufferedReader(new FileReader(filePath));
reader.skip(n); // chars to skip
// .. and here you can start reading

如果您想指定特定的编码,可以使用

InputStream is = new FileInputStream(filePath);
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
reader.skip(n); // chars to skip
// .. and here you can start reading

答案 1 :(得分:0)

你可以使用BufferedInputStream的read(byte [] b,int off,int len)

这里off是偏移的(从你想要开始阅读的位置)

http://docs.oracle.com/javase/7/docs/api/java/io/BufferedInputStream.html#read%28byte[],%20int,%20int%29