You've got reset() (which can go back to the beginning) and skip() (which can go from the current position to some later position.) If a Reader supports both of those, you can get to any point in the data. The problem is that not all Readers support them.
You may want to take a look at RandomAccessFile. I don't know if this will solve your problem, especially if you are reading text a line at a time. It is difficult to know how long a line of text is without reading it in first. Random access files are usually more helpful with binary data where you can specify the size of each "record" in the data. Then you can use seek() to skip a specified number of records by doing some simple arithmetic.
With that said, why do you need to move the position of the file pointer in the stream? Would it be easier to read the whole file into a String, (using StringBuffer or StringBuilder, of course) and then move around inside the String to the information you want? Of course, this is infeasible for very large files, but if your file is relatively small so that you can fit it all into memory, I think this would be a decent solution. Since I don't know the details of your project, I am only guessing here. If you would like to provide more information, perhaps we can suggest alternative solutions.