输出和输入

来源:互联网 发布:微信公众号淘宝客 编辑:程序博客网 时间:2024/06/06 03:12

文本的输入和输出

OutputStreamWriter类将使用选定的字符编码方式,把Unicode字符流转换为字节流。相反地, InputStreamReader类将包含字节(用某种字符编码方式表示的字符)的输入流转换为可以产生Unicode字符的读入器。

对于文本输出,你可能希望使用PrintWriter。这个类拥有以文本格式打印字符串和数字的方法,它甚至还有一个将PrintWriter链接到FileWriter的方便方法。

PrintWriter pw = new PrintWriter("f:\\f.txt");PrintWriter p = new PrintWriter(new FileWriter("f:\\f.txt"));//这两个相同
为了写出到打印写出器,需要使用与使用System.out时相同的方法print、 println和printf。你可以用这些方法来打印数字( int、 short、 long、 float、 double)、字符、boolean值、字符串和对象。
如果写出器设置为自动清空模式,那么只要println被调用,缓冲区中的所有字符都会被发送到它们的目的地(打印写出器总是带缓冲区的)。默认情况下,自动清空机制是不使能的。你可以通过使用PrintWriter(Writer out, Boolean autoFlush)来使能或禁用自动清空机制。
boolean checkError()如果产生格式化或输出错误,则返回true。一旦这个流碰到了错误,它就受到了感染,并且所有对checkError的调用都将返回true。
以二进制格式写出数据,需要使用DataOutputStream。以文本格式写出数据,需要使用PrintWriter。
在Java SE 5.0之前,处理文本输入的惟一方式就是通过BufferedReader类,它拥有一个readLine方法,使得我们可以读入一行文本。readLine方法在没有输入时返回null。

FileReader f = new FileReader("f:\\f.txt");BufferedReader bf = new BufferedReader(f);String l;while((l=bf.readLine())!=null){System.out.println(l);}


还可以使用Scanner来读取

FileReader f = new FileReader("f:\\f.txt");Scanner s = new Scanner(f);while(s.hasNextLine()){System.out.println(s.nextLine());}

charset  static SortedMap availableCharsets()获取这个虚拟机可用的所有字符集。返回一个映射表,它的键是字符集的名字,值是字符集。static Charset forName(String name)获取给定名字的字符集Set aliases()返回这个字符集的别名集。ByteBuffer encode(String str)将给定的字符串编码为字节序列。CharBuffer decode(ByteBuffer buffer)解码给定的字节序列。无法识别的输入将被转换成Unicode的“替代字符” ('\uFFFD').
ByteBufferbyte[] array()返回这个缓冲区所管理的字节数组。static ByteBuffer wrap(byte[] bytes)static ByteBuffer wrap(byte[] bytes, int offset, int length)返回管理给定的字节数组或给定字节数组的某个范围的字节缓冲区。
CharBuffer  char[] array()返回这个缓冲区所管理的码元数组。char charAt(int index)返回给定索引处的码元。String toString()返回由这个缓冲区所管理的码元构成的字符串。

二进制的读写

DataOutput接口定义了用于以二进制格式写数组、字符、 boolean值和字符串的方法。
writeCharswriteBytewriteInt....writeUTf
因为没有其他方法会使用UTF-8的这种修订,所以你应该只在写出用于Java虚拟机的字符串时才使用writeUTF方法来,例如,当你需要编写一个生成字节码的程序时。对于其他的目的,都应该使用writeChars方法。

为了读回数据,可以使用在DataInput接口中定义的下列方法.

readIntreadChar....readUTF
void readFully(byte[] b)将字节读入到数组b中,其间阻塞直至所有字节都读入。
int skipBytes(int n)跳过n个字节,其间阻塞直至所有字节都被跳过。
DataInputStream类实现了DataInput接口,从文件中读入二进制数据,你需要将DataInputStream与某个字节源相组合,比如FileInputStream
与此类似,要想写出二进制数据,你可以使用实现了DataOutput接口的DataOutputStream类。

随机访问文件

RandomAccessFile类可以在文件中的任何位置查找或写入数据。磁盘文件都是随机访问的,但是从网络而来的数据流却不是。你可以打开一个随机访问文件,只用于读入或者同时用于读写,我们可以通过使用字符串“ r”(用于读入访问)或“ rw”(用于读入/写出访问)作为构造器的第二个参数来指定这个选项。

RandomAccessFile r = new RandomAccessFile("f:\\f.txt", "r");“ r”表示只读模式; “ rw”表示读/写模式; “ rws”表示每次更新时,都对数据和元数据的写磁盘操作进行同步的读/写模式; “ rwd”表示每次更新时,只对数据的写磁盘操作进行同步的读/写模式RandomAccessFile rw = new RandomAccessFile("f:\\f.txt", "rw");
当你将已有文件打开成RandomAccessFile时,这个文件并不会被删除。随机访问文件有一个表示下一个将被读入或写出的字节所处位置的文件指针, seek方法可以将这个文件指针设置到文件内部的任意字节位置, seek的参数是一个long类型的整数,它的值位于0到文件按照字节来度量的长度之间。getFilePointer方法将返回文件指针的当前位置。
RandomAccessFile类同时实现了DataInput和DataOutput接口。为了读写随机访问文件,可以使用诸如readInt/writeInt和readChar/writeChar之类的方法。要确定文件中的字节总数,可以使用length方法。



0 0
原创粉丝点击