Java-I/O学习(3)

作者: Cool_Pomelo | 来源:发表于2020-04-03 09:34 被阅读0次

Java-I/O学习(3)

RandomAccessFile

构造函数

构造方法 具体描述
RandomAccessFile​(File file, String mode) Creates a random access file stream to read from, and optionally to write to, the file specified by the File argument.
RandomAccessFile​(String name, String mode) Creates a random access file stream to read from, and optionally to write to, a file with the specified name.

读取方法

返回类型 方法 具体描述
int read() Reads a byte of data from this file.
int read​(byte[] b) Reads up to b.length bytes of data from this file into an array of bytes.
int read​(byte[] b, int off, int len) Reads up to len bytes of data from this file into an array of bytes.
boolean readBoolean() Reads a boolean from this file.
byte readByte() Reads a signed eight-bit value from this file.
char readChar() Reads a character from this file.
double readDouble() Reads a double from this file.
float readFloat() Reads a float from this file.
void readFully​(byte[] b) Reads b.length bytes from this file into the byte array, starting at the current file pointer.
void readFully​(byte[] b, int off, int len) Reads exactly len bytes from this file into the byte array, starting at the current file pointer.
int readInt() Reads a signed 32-bit integer from this file.
String readLine() Reads the next line of text from this file.
long readLong() Reads a signed 64-bit integer from this file.
short readShort() Reads a signed 16-bit number from this file.
int readUnsignedByte() Reads an unsigned eight-bit number from this file.
int readUnsignedShort() Reads an unsigned 16-bit number from this file.
String readUTF() Reads in a string from this file.

写入方法

返回类型 方法 具体描述
void write​(byte[] b) Writes b.length bytes from the specified byte array to this file, starting at the current file pointer.
void write​(byte[] b, int off, int len) Writes len bytes from the specified byte array starting at offset off to this file.
void write​(int b) Writes the specified byte to this file.
void writeBoolean​(boolean v) Writes a boolean to the file as a one-byte value.
void writeByte​(int v) Writes a byte to the file as a one-byte value.
void writeBytes​(String s) Writes the string to the file as a sequence of bytes.
void writeChar​(int v) Writes a char to the file as a two-byte value, high byte first.
void writeChars​(String s) Writes a string to the file as a sequence of characters.
void writeDouble​(double v) Converts the double argument to a long using the doubleToLongBits method in class Double, and then writes that long value to the file as an eight-byte quantity, high byte first.
void writeFloat​(float v) Converts the float argument to an int using the floatToIntBits method in class Float, and then writes that int value to the file as a four-byte quantity, high byte first.
void writeInt​(int v) Writes an int to the file as four bytes, high byte first.
void writeLong​(long v) Writes a long to the file as eight bytes, high byte first.
void writeShort​(int v) Writes a short to the file as two bytes, high byte first.
void writeUTF​(String str) Writes a string to the file using modified UTF-8 encoding in a machine-independent manner.

其余方法

返回类型 方法 具体描述
void close() Closes this random access file stream and releases any system resources associated with the stream.
FileChannel getChannel() Returns the unique FileChannel object associated with this file.
FileDescriptor getFD() Returns the opaque file descriptor object associated with this stream.
long getFilePointer() Returns the current offset in this file.
long length() Returns the length of this file.
void seek​(long pos) Sets the file-pointer offset, measured from the beginning of this file, at which the next read or write occurs.
void setLength​(long newLength) Sets the length of this file.
int skipBytes​(int n) Attempts to skip over n bytes of input discarding the skipped bytes.

使用RandomAccessFile可以让你在文件中来回移动进行来读写操作,也可以覆盖文件中的某部分内容。这是FileInputStream和FileOutputStream做不到的。

创建


/**
* @exception  IllegalArgumentException  if the mode argument is not equal
*               to one of <tt>"r"</tt>, <tt>"rw"</tt>, <tt>"rws"</tt>, or
*               <tt>"rwd"</tt>
* @exception FileNotFoundException
*            if the mode is <tt>"r"</tt> but the given string does not
*            denote an existing regular file, or if the mode begins with
*            <tt>"rw"</tt> but the given string does not denote an
*            existing, writable regular file and a new regular file of
*            that name cannot be created, or if some other error occurs
*            while opening or creating the file
*/
RandomAccessFile(String name, String mode)

mode参数在API文档中的说明:

The mode argument specifies the access mode in which the file is to be opened. The permitted values and their meanings are:

Value Meaning
"r" Open for reading only. Invoking any of the write methods of the resulting object will cause an IOException to be thrown.
"rw" Open for reading and writing. If the file does not already exist then an attempt will be made to create it.
"rws" Open for reading and writing, as with "rw", and also require that every update to the file's content or metadata be written synchronously to the underlying storage device.
"rwd" Open for reading and writing, as with "rw", and also require that every update to the file's content be written synchronously to the underlying storage device.

RandomAccessFile accessFile = new RandomAccessFil("E:\\learn-java\\Learning-Java\\MyNotes\\better_write\\Java_IO\\d.txt","r");


read


// Reads a byte of data from this file. The byte is returned as an integer in the range 0 to 255 (0x00-0x0ff). This method blocks if no input is yet available.

// Although RandomAccessFile is not a subclass of InputStream, this method behaves in exactly the same way as the InputStream.read() method of InputStream.

read()

 public static void main(String[] args) throws IOException {

        RandomAccessFile accessFile = new RandomAccessFile("E:\\learn-java\\Learning-Java\\MyNotes\\better_write\\Java_IO\\d.txt","r");

        int data = accessFile.read();

        while (data != -1) {

//            System.out.println((char) data);

            data = accessFile.read();

        }

        accessFile.close();


    }


// Although RandomAccessFile is not a subclass of InputStream, this method behaves in exactly the same way as the InputStream.read(byte[], int, int) method of InputStream.


read​(byte[] b,
                int off,
                int len)

  public static void main(String[] args) throws IOException {
        RandomAccessFile accessFile = new RandomAccessFile("E:\\learn-java\\Learning-Java\\MyNotes\\better_write\\Java_IO\\d.txt","r");

        byte[] bytes = new byte[1024];

        int data = accessFile.read(bytes);

        while (data != -1) {

            data = accessFile.read(bytes);

        }

        accessFile.close();

    }


// Reads exactly len bytes from this file into the byte array, starting at the current file pointer. This method reads repeatedly from the file until the requested number of bytes are read. This method blocks until the requested number of bytes are read, the end of the stream is detected, or an exception is thrown.


readFully​(byte[] b,int off,int len)



    public static void main(String[] args) throws IOException {

        RandomAccessFile accessFile = new RandomAccessFile("E:\\learn-java\\Learning-Java\\MyNotes\\better_write\\Java_IO\\d.txt","r");

        byte[] bytes = new byte[1024];
        
        accessFile.readFully(bytes);
        
        accessFile.close();
    }



write


// Writes the specified byte to this file. The write starts at the current file pointer.
write​(int b)


// Writes b.length bytes from the specified byte array to this file, starting at the current file pointer.
write​(byte[] b)

    public static void main(String[] args) throws IOException {

        RandomAccessFile accessFile = new RandomAccessFile("E:\\learn-java\\Learning-Java\\MyNotes\\better_write\\Java_IO\\f.txt","rw");

//        accessFile.write(122);
//
//        System.out.println("-------------");
//
//        accessFile.write("abcdfgh123".getBytes());
//
//        System.out.println("-------------");

//        accessFile.writeBoolean(true);

        accessFile.writeByte(121);

        accessFile.writeBytes("Hello world");

        accessFile.close();


    }
}

其余操作


// Returns:
// the length of this file, measured in bytes.
length()

// Sets the file-pointer offset, measured from the beginning of this file, at which the next read or write occurs. The offset may be set beyond the end of the file. Setting the offset beyond the end of the file does not change the file length. The file length will change only by writing after the offset has been set beyond the end of the file.
seek​(long pos)

// Attempts to skip over n bytes of input discarding the skipped bytes.
// This method may skip over some smaller number of bytes, possibly zero. This may result from any of a number of conditions; reaching end of file before n bytes have been skipped is only one possibility. This method never throws an EOFException. The actual number of bytes skipped is returned. If n is negative, no bytes are skipped.
skipBytes​(int n)

   public static void main(String[] args) throws IOException {

        RandomAccessFile accessFile = new RandomAccessFile("E:\\learn-java\\Learning-Java\\MyNotes\\better_write\\Java_IO\\f.txt", "rw");

//        System.out.println(accessFile.length());//

//        System.out.println(accessFile.getFilePointer());


        //从下表 5(包括) 的位置开始读取
//        accessFile.seek(5);
//

        accessFile.skipBytes(5);

        int data = accessFile.read();

        while (data != -1) {
            System.out.println((char) data);

            data = accessFile.read();
        }
        accessFile.close();
    }

相关文章

  • Java-I/O学习(3)

    Java-I/O学习(3) RandomAccessFile 构造函数 构造方法具体描述RandomAccessF...

  • Java-I/O学习(5)

    Java-I/O学习(5) ByteArrayInputStream ByteArrayInputStream类可...

  • Java-I/O学习(6)

    Java-I/O学习(6) DataInputStream DataInputStream可以让你从InputSt...

  • Java-I/O学习(7)

    Java-I/O学习(7) Reader 在Java API中,Java Reader类(java.io.Read...

  • Java-I/O学习(2)

    Java-I/O学习(2) InputStream InputStream是Java IO中所有输入流的基类 方法...

  • Java-I/O学习(4)

    Java-I/O学习(4) File Java IO 的File类可以帮助你访问底层的文件系统,使用File类你可...

  • Java-I/O学习(1)

    Java-I/O学习(1) Java IO是java中的相关API,主要目的为读数据与写数据(input 和 ou...

  • Java-I/O系统

    对程序语言的设计者来说,创建一个好的输出/输入(I/O)系统是一项艰难的任务。——《Thinking in Jav...

  • Java-I/O流

    总结 I/O流分类 按照操作单元划分,字节I/O系统和字符I/O系统。 按照流的流向分,可以将流分为输入流和输出流...

  • (o˚̑̑̑̑̑ 3˚̑̑̑̑̑ o)

    有个女生说,“我读初中时候很喜欢一个男生, 有一天,他不知道为什么就被打了, 一个人坐在操场上很可怜的样子。 我就...

网友评论

    本文标题:Java-I/O学习(3)

    本文链接:https://www.haomeiwen.com/subject/jybcphtx.html