我在java中使用Readfully来读取文件。以下代码说明了这一点。
import java.io.*;
public class RandomAccessFileDemo {
public static void main(String[] args) {
try {
// create a string and a byte array
// create a new RandomAccessFile with filename test
RandomAccessFile raf = new RandomAccessFile("/home/mayank/Desktop/Image/Any.txt", "rw");
// set the file pointer at 0 position
raf.seek(0);
int Length = (int)raf.length();
// create an array equal to the length of raf
byte[] arr = new byte[Length];
// read the file
raf.readFully(arr,0,Length);
// create a new string based on arr
String s2 = new String(arr);
// print it
System.out.println("" + s2);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Any.txt的内容为Hello World!!
上面的代码打印Hello World!!
但是当我改变
raf.readFully(arr,0,Length);
到
raf.readFully(arr,3,Length-3);
我没有得到输出lo World!!
,而是没有错误。
任何人都可以解释我如何使用。
或者如何获得输出lo World!!
?
答案 0 :(得分:1)
readFully
将从文件中的当前位置开始读取。要跳过前三个字符,请使用:
raf.skipBytes(3);
在使用readFully
之前。也没有理由使用偏移量,因此请使用:
raf.readFully(arr,0,Length - 3);
事情会很好。
重要说明:这假设前3个字符只是一个字节,不一定是某些字符集的情况。但由于这可能是一个开始的家庭作业或教程,这可能是你正在寻找的答案。
答案 1 :(得分:1)
根据javadoc,readFully(byte[] b, int off, int len)
的off和len参数会影响raf数据放置在字节数组中的位置,而不会影响读取raf数据的数量。在所有情况下,文件的其余部分都被完全读取。
如果b为null,则抛出NullPointerException。如果关闭是否定的,或者 len是负数,或者off + len大于数组b的长度, 然后抛出IndexOutOfBoundsException。如果len为零,则为no 读取字节。否则,读取的第一个字节存储在元素中 b [off],下一个进入b [off + 1],依此类推。字节数 read最多等于len。
试试这个:
raf.skipBytes(3);
raf.readFully(arr,3,Length-3);