输入输出概述_第1页
输入输出概述_第2页
输入输出概述_第3页
输入输出概述_第4页
输入输出概述_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、文件及目录管理文件是计算机系统存放信息的重要途径。对文件的操作是最经常使用的输入输出操作,我们首先讨论File类。Java语言的输入输出是通过java.io包中的类实现的。1 创建File对象Java语言使用java.io.File类对象表示文件和目录。通过File类对象可以实现对文件或目录的相关信息的访问,如文件的名称、长度、读写属性等,甚至可以创建或删除文件或目录。File类的常用的构造方法如下: File(String pathname) 该构造方法创建一个File对象,其中pathname可以是一个文件名,也可以是一个路径名。 File(String parent, String ch

2、ild) 该构造方法中的parent是一个路径名,child可以是一个文件名,也可以是一个路径名。 File(File parent, String child) 该构造方法的parent是表示路径的File对象,child可以是一个文件名,也可以是一个路径名。使用下面的语句可以创建File对象:File f1, f2, f3, f4;f1 = new File("d:java"); /创建一个表示路径的File对象f2 = new File("data.txt"); /创建一个表示文件的File对象f3 = new File("d:java&

3、quot;,"data.txt"); /创建一个表示文件的File对象f4 = new File(f1, "data.txt"); /创建一个指定目录f1和文件名的File对象。使用哪个构造方法取决于所使用的其他文件对象。例如,如果在应用程序中只使用一个文件,那么就应使用第一个构造方法。如果使用一个公共目录中的若干文件,那么使用第二个或者第三个构造方法可能更容易。对于路径的分隔符,不同的系统使用的符号不同。在Windows系统下使用反斜线(),在Unix系统下使用正斜线(/)。由于反斜线用来表示转义字符,因此在Windows系统下表示路径分隔符需用两个反

4、斜线。要想知道系统使用什么符号作为路径分隔符,可以通过System类的getProperty()方法得到,如下所示:String sep = System.getProperty("file.separator");然后可以使用sep作为分隔符,如上面创建f3对象的语句可以改写如下:f3 = new File("d:"+sep+"java","data.txt");使用File类的构造方法创建File对象并不要求相应的目录和文件一定存在。File类提供了独立于平台的方法来操作由本地文件系统维护的文件,然而不能直接通

5、过File对象存取文件的内容。要想对文件内容存取,需要建立流对象。注意 File对象不仅可以表示文件,也表示一个目录。2 使用File类的方法File类提供了若干处理文件和获取它们基本信息的方法。当你创建一个File对象后,可以使用下面的方法来获取有关文件的信息:(1)获取File对象的有关信息 public String getName() 返回File对象所表示的文件或路径名。 public String getPath() 返回File对象所表示的路径名。 public String getAbsolutePath() 返回File对象所表示绝对路径名。 public String ge

6、tParent() 返回File对象所表示父路径名。(2)测试File对象的属性的方法 public boolean exists() 测试File对象是否存在。 public boolean canWrite() 测试File对象是否可写。 public boolean canRead() 测试File对象是否可读。 public boolean isFile() 测试File对象是否是文件。 public boolean isDirectory() 测试File对象是否是目录。 public boolean isHidden() 测试File对象是否是具有隐藏属性。 public bool

7、ean isAbsolute() 测试File对象的路径是否是绝对路径。(3)一般的文件操作 public long length() 返回指定文件的字节长度,文件不存在时返回0。 public long lastModified() 返回指定文件的最后修改时间。 public boolean createNewFile() 当文件不存在时,创建一个空文件时返回true,否则返回false。 public static File createTempFile(String prefix, String postfix, File directory) 在指定的目录中创建指定前、后缀的文件。方法

8、调用前,指定的文件不存在,操作成功。 public boolean renameTo(File newName) 重新命名指定的文件对象,正常重命名时返回true,否则返回false。 public boolean delete() 删除指定的文件。若为目录,当目录为空时才能删除。 public void deleteOnExit() 当虚拟机执行结束时,删除指定的文件或目录。下面的程序要求从命令行输入一个文件名,程序输出文件的名称、绝对路径、是否可读、是否可写、文件的修改日期、文件的字节长度等信息,如果文件不存在输出有关信息。import java.io.*;import java.util

9、.*;public class DirFilepublic static void prt(String str)System.out.println(str);public static void main(String args)if(args.length=0)prt("Usage:java DirFile filename.");System.exit(1);File f=new File(args0);if(f.exists()prt("File Name:"+f.getName();prt("Directory:"+f.g

10、etAbsolutePath();prt("Can Read:"+f.canRead();prt("Can Write:"+f.canWrite();prt("Last Modified:"+new Date(f.lastModified();prt("Length:"+f.length()+" Byte(s).");elseprt("The file "+args0+" does not exists.");_运行该程序应该指定一个文件名作为命令行参数,

11、如下所示:3 有关目录操作的方法由于File对象既可以表示文件,又可以表示目录,因此File提供了下面有关目录操作的方法: public boolean mkdir() 创建指定的目录,创建成功返回true,创建不成功返回false。 public boolean mkdirs() 创建路径不存在的目录,它创建目录以及该目录所有的父目录。 public String list() 将目录中所有文件及目录名保存在字符串数组中返回。 public File listFiles() 以File对象数组的形式返回文件列表。 下面程序显示指定目录下的文件名。import java.io.*;public

12、 class DirListpublic static void main(String args)String dirname="c:jdk1.6.0" ;File f1=new File(dirname);if(f1.isDirectory()System.out.println("Directory of "+dirname);String s=f1.list();for(int i=0;i<s.length;i+)File f=new File(dirname+""+si);if(f.isDirectory()Syste

13、m.out.println(si+" is a directory.");elseSystem.out.println(si+" is a file.");elseSystem.out.println(dirname+" is not a directory.");_该程序输出如下:bin is a directory. 字节输入输出流Java程序的输入输出是基于流(stream)概念的,流式输入输出最早起源于Unix操作系统。所谓流式输入输出即把数据的输入输出看作是数据的流动。1 Java流式I/O的基本概念Java语言的输入输出除

14、RandomAccessFile对象外都是通过流来实现的。按照数据的流动方向,流分为输入数据流(input stream)和输出数据流(output stream)。程序为了获得外部数据,需要在数据源(文件、内存及网络套接字)上创建一个输入流,然后用read()方法顺序读取数据。类似地,程序可以在输出设备上创建一个输出流,然后用write()方法将数据写到输出流中,如图1所示:输入数据流输出数据流图1 Java输入/输出流示意图一般来说,除了RandomAccessFile对象外,所有的数据流都是单向流动的。对于输入数据流只能从中读取数据,不能向其中写数据,对于输出数据流,只能向其写出数据,不

15、能从中读取数据。按照处理数据的类型分,数据流又可分为字节流和字符流,它们处理的信息的基本单位分别是字节和字符。这样输入输出流就可分为四类,Java类库中定义了四个抽象类来实现:字节输入输出流:InputStream类和OutputStream类字符输入输出流:Reader类和Writer类不管数据来自何处或流向何处,也不管是什么类型,顺序读写数据的算法基本上是一样的:如果需要从外界获得数据,首先需要建立输入流对象,然后从输入流中读取数据;如果需要将数据输出,需要建立输出流对象,然后向输出流中写出数据。下面首先介绍字节输入输出流,在8.4节介绍字符输入输出流。2 InputStream和Outp

16、utStreamInputStream和OutputStream是字节输入/输出流的超类,它们都有多个子类,类的层次结构如图2和3所示:图2 InputStream类的层次结构图3 OutputStream类的层次结构1. InputStream类字节输入流InputStream类定义的方法如下: public int read() 从输入流中读取下一个字节并返回它的值,返回的字节值是0到255的整数值。如果读到输入流末尾,返回-1。 public int read(byte b) 从输入流中读多个字节,存入字节数组b中,如果输入流结束,返回-1。 public int read(byteb,

17、 int offset, int len) 从输入流中读len个字节,存入字节数组b中从offset开始的元素中,如果输入流结束,返回-1。 public long skip(long n) 从输入流中向后跳n个字节,返回实际跳过的字节数。 public int available() 返回输入流中可读或可跳过的字节数。 public void mark() 标记输入流的当前位置。 public void reset() 重定位于mark标记的输入流的位置。 public boolean markSupported() 测试输入流是否支持mark()和reset()方法。 public voi

18、d close() 关闭输入流,并释放相关的系统资源。2. OutputStream类中定义的方法如下:字节输出流OutputStream类定义的方法如下: public void write(int b) 把指定的b低位字节写入输出流。 public void write(byte b) 把指定的字节数组b的b.length个字节写入输出流。 public void write(byte b, int offset, int len) 把指定的字节数组b的从offset开始的len个字节写入输出流。 public void flush() 刷新输出流,输出全部缓存内容。 public voi

19、d close() 关闭输出流,并释放系统资源。上述这些方法的定义都抛出了IOException异常,当程序不能读写数据时抛出该异常,因此使用这些方法时要么使用try-catch结构捕获异常,要么声明方法抛出异常。3 FileInputStream和FileOutputStreamFileInputStream和FileOutputStream类用来进行文件的I/O处理,由它们所提供的方法可以打开本地机上的文件,并进行顺序的读写。文件输入流的两个常用的构造方法如下: FileInputStream(String name) 用表示文件的字符串对象创建文件输入流对象。 FileInputStre

20、am(File file) 用File对象创建文件输入流对象。若指定的文件不存在,则产生FileNotFoundException异常,它是非运行时异常,必须捕获或声明抛出。也可以先创建File对象,然后测试该文件是否存在,若存在再创建文件输入流。类FileInputStream重写了超类InputStream中的read()、skip()、available()、close()方法,但不支持mark()、reset()方法。文件输出流的常用构造方法如下: FileOutputStream(String name) FileOutputStream(File file) FileOutputS

21、tream(String name, boolean append)前两个构造方法的参数与文件输入流的含义相同。若文件不存在,则创建一个新文件,若存在则原文件的内容被覆盖。第三个构造方法的append参数如果为true,则指明打开的文件输出流不覆盖原来的内容,而是从文件末尾写入新内容,否则覆盖原来的文件内容。使用该构造方法生成文件输出流对象要特别注意,以免不当删除了原文件中的内容。FileOutputStream类覆盖了超类的write()方法,可以使用该方法向输出流中写数据。 下面的程序CopyBytes.java使用 FileInputStream和FileOutputStream 对象实

22、现将文件input.txt 中的内容复制到文件 output.txt中,这里假设存在input.txt文件。import java.io.*;public class CopyBytes public static void main(String args) throws IOException File inputFile = new File("input.txt");File outputFile = new File("output.txt");FileInputStream in = new FileInputStream(inputFile

23、);FileOutputStream out = new FileOutputStream(outputFile);int c;while (c = in.read() != -1)out.write(c);in.close();out.close();_该程序分别在文件input.txt和output.txt上建立了 FileInputStream 和FileOutputStream 流,程序从输入流中读取字节然后写到输出流中,从而实现文件的复制。当文件读完后,关闭输入输出流。程序运行后,会在与input.txt文件同一目录下产生一个副本output.txt 文件。注意,该程序正确运行需要i

24、nput.txt事先存在(可用记事本先建立该文件)。4 FilterInputStream和FilterOutputStream基本输入/输出流只提供了读写字节的read()和write()方法,但有时需要从流中读取基本类型的数据,如整数、浮点数或字符串,或者将这些数据写到输出流中。为此,Java提供了过滤流来实现这一功能。FilterInputStream和FilterOutputStream分别表示过滤输入流和过滤输出流,它们是所有过滤流的超类,其子类如表1所示:表1 FilterInputStream和FilterOutputStream类的子类根据是否与特定设备相连输入输出流又可分为节

25、点流和过滤流,如FileInputStream就是与文件相连的,它就是节点流。过滤流是与节点流相对而言的。过滤流的主要功能是对节点流进行包装,使它能够实现基本数据类型的读写或使流具有缓冲功能。DataInputStream 类和DataOutputStream类分别表示数据输入流和数据输出流,这两个类分别实现了java.io包中定义的DataInput和DataOutput接口,下面首先讨论这两个接口,然后讨论DataInputStream 类和DataOutputStream类。1. DataInput和DataOutput接口DataInput接口中主要定义了从流中读取基本类型数据、读取一

26、行数据的方法,DataOutput接口中主要定义了向流中写入基本类型数据、写入指定长度的字节数组的方法。DataInput接口定义的常用方法有: public boolean readBoolean() 从输入流读入一个字节,非0返回true,0返回false。 public byte readByte() 从输入流读入一个字节并返回该字节。 public char readChar() 从输入流读入一个字符并返回该字符。 public short readShort() 从输入流中读入2个字节,返回一个short型值。 public int readInt() 从输入流中读入4个字节,返回一

27、个int型值。 public long readLong() 从输入流中读入8个字节,返回一个long型值。 public float readFloat() 从输入流中读入4个字节,返回一个float型值。 public double readDouble() 从输入流中读入8个字节,返回一个double型值。 public String readLine() 从输入流中读入下一行文本。 public String readUTF() 从输入流中读入UTF-8格式的字符串。DataOutput接口定义的常用方法有: public void write(int b) 把b的低8位写入输出流,忽

28、略高24位。 public void write(byte b) 把数组b中的所有字节写入输出流。 public void write(byte b, int off, int len) 把数组b中的从off开始的len个字节写入输出流。 public void writeBoolean(boolean v) 将一个布尔值写入输出流。 public void writeByte(int v) 将v低8位写入输出流,忽略高24位。 public void writeChar(int v) 向输出流中写一个16位的字符。 public void writeShort(int v) 向输出流中写一个

29、16位的整数。 public void writeInt(int v) 向输出流中写一个四个字节(32位)的整数。 public void writeLong(long v) 向输出流中写一个八个字节(64位)的长整数。 public void writeFloat(float v) 向输出流中写一个四个字节(32位)的float型浮点数。 public void writeDouble(double v) 向输出流中写一个八个字节(64位)的double型浮点数。 public void writeBytes(String s) 将字符串中每个字节按顺序写到输出流中。 public void

30、 writeChars(String s) 将字符串中每个字符按顺序写到输出流中,每个字符占两个字节。 public void writeUTF(String str) 向输出流中写入一个2个字节的UTF格式的字符串。2. DataInputStream和DataOutputStreamDataInputStream 和DataOutputStream类分别实现了DataInput和DataOutput接口, 因此可以使用在DataInput和DataOutput接口中定义的读写基本类型数据的方法,如readBoolean(),writeBoolean(),readDouble(),write

31、Double()等方法。这两个类的构造方法如下: DataInputStream(InputStream instream) 参数instream是字节输入流对象。 DataOutputStream(OutputStream outstream) 参数outstream是字节输出流对象。下面给出的语句分别创建了一个数据输入流和数据输出流。第一条语句为文件in.dat创建了一个输入流,第二条语句为文件out.dat创建了一个输出流。DataInputStream inFile = new DataInputStream(new FileInputStream("in.dat"

32、);DataOutputStream outFile = new DataOutputStream(new FileOutputStream("out.dat");3. BufferedInputStream和 BufferedOutputStreamBufferedInputStream为缓冲输入流,BufferedOutputStream为缓冲输出流,这两个类用来对数据流实现缓冲功能。通过缓冲流可以减少读写数据的次数,从而加快输入输出的速度。缓冲流使用字节数组实现缓冲,当输入数据时,数据成块地读入数组缓冲区,然后程序再从缓冲区中读取单个字节;输出时,数据先写入数组,然后

33、再将整个数组写到输出流中。缓冲输入流BufferedInputStream的构造方法如下: BufferedInputStream(InputStream in) BufferedInputStream(InputStream in, int size)用输入流对象in创建缓冲输入流对象,size用来指定缓冲区的大小。如果没有指定缓冲区大小,默认为512个字节。缓冲输出流BufferedOutputStream类的构造方法如下: BufferedOutputStream(OutputStream out) BufferedOutputStream(OutputStream out, int s

34、ize)用输出流对象out创建缓冲输出流对象,size用来指定缓冲区的大小,如果没有指定缓冲区大小,默认为512个字节。通过使用上面两个类,可以把输入输出流包装成具有缓冲功能的流,从而提高输入输出的效率。下面的DataOutDemo.java程序使用DataOutputStream流将数据写入到文件中,这里还将数据流包装成缓冲流。import java.io.*;public class DataOutDemopublic static void main(String args)tryFileOutputStream fos=new FileOutputStream("out.da

35、t", true);BufferedOutputStream bos=new BufferedOutputStream(fos);DataOutputStream dos=new DataOutputStream(bos);dos.writeDouble(123.456);dos.writeInt(100);dos.writeUTF("Java language is useful.");dos.close();bos.close();fos.close();catch(IOException e)_下面的程序DataInDemo.java使用DataInputS

36、tream流从文件中读取基本数据类型的数据或字符串。import java.io.*;public class DataInDemopublic static void main(String args)tryFileInputStream fis=new FileInputStream("out.dat");BufferedInputStream bis=new BufferedInputStream(fis);DataInputStream dis=new DataInputStream(bis);while(dis.available()>0)double d=

37、dis.readDouble();int i=dis.readInt();String s=dis.readUTF();System.out.println("d="+d);System.out.println("i="+i);System.out.println("s="+s);dis.close();bis.close();fis.close();catch(IOException e)_4. PrintStream类PrintStream是FilterOutputStream的子类,它为打印各种类型的数据提供了方便。用该类对象输

38、出的内容是以文本的方式输出,如果输出到文件中则可以以文本的形式浏览。Java的标准输出流System.out和标准错误输出流System.err就是该类的实例。PrintStream类的常用构造方法有:public PrintStream(String fileName) public PrintStream(File file) public PrintStream(OutputStream out) public PrintStream(OutputStream out, boolean autoFlush)PrintStream类定义的常用方法有: public void println

39、(boolean b) 输出一个boolean型数据。 public void println(char c) 输出一个char型数据。 public void println(char s) 输出一个char型数组数据。 public void println(int i) 输出一个int型数据。 public void print(long l) 输出一个long型数据。 public void println(float f) 输出一个float型数据。 public void println(double d) 输出一个double型数据。 public void println(St

40、ring s) 输出一个String型数据。 public void println(Object obj) 将obj转换成String型数据,然后输出。可以使用print()代替println ()方法,println()方法输出后换行,print()方法输出后不换行。这些方法都是把数据转换成字符串,然后输出。当把对象传递给这两个方法时则先调用对象的toString()方法将对象转换为字符串形式,然后输出。下面的程序随机产生100个100到200之间的整数,然后使用PrintStream对象输出到文件print.txt中:import java.io.*;public class Print

41、StreamDemopublic static void main(Stringargs)PrintStream ps = null;tryps = new PrintStream("print.txt");catch(IOException e) for(int i = 0; i<100; i+)int num = (int)(Math.random()*100)+100;ps.println(num);_该程序运行后在源程序所在的目录下创建一个print.txt文本文件,并且写入了100个整数。该文件可以通过记事本打开。5. 其他字节输入输出流除了上面讨论的字节输

42、入输出流外,Java还提供了其他用于特殊目的的输入输出流。如输入流有:ByteArrayInputStream是字节数组输入流、PipedInputStream是管道输入流、AudioInputStream是音频输入流、SequenceInputStream为顺序输入流、ObjectInputStream 对象输入流。其他的字节输出流有:ByteArrayOutputStream是字节数组输出流、PipedOutputStream为管道输出流、ObjectOutputStream 为对象输出流。5 标准输入输出流计算机系统都有标准的输入设备和标准输出设备。对一般系统而言,标准输入设备通常是键盘

43、,而标准输出设备是屏幕。Java程序经常需要从键盘上输入数据,从屏幕上输出数据,为此频繁创建输入/输出流对象将很不方便。因此,Java系统事先定义好了两个对象,分别与系统的标准输入和标准输出相联系,它们是System.in和System.out,另外还定义了标准错误输出流System.err。System.in是标准输入流,它是InputStream类的实例。我们可以使用read()方法从键盘上读取字节,也可以将它包装成数据流读取各种类型的数据和字符串。在使用System.in的read()方法时要注意:由于read()方法在定义时抛出了IOException异常,因此必须使用try-catc

44、h结构捕获异常或声明抛出异常;System.out和System.err是标准输出流和标准错误输出流,是PrintStream类的实例。 如果希望从标准输入流键盘上输入基本数据类型,可以将标准输入流包装成具有缓冲功能的数据流,如下所示:DataInputStream dis = new DataInputStream(new BufferedInputStream(System.in);接下来就可以调用dis的相关方法从键盘上读取基本类型数据或字符串了。字符输入输出流上面介绍的字节输入输出流是以字节为信息的基本单位,本节介绍以字符为信息的基本单位的字符输入输出流。字符输入输出流的类层次结构如图

45、4和5所示。图4 字符输入流的类层次图5 字符输出流的类层次1 Reader和Writer类抽象类Reader是字符输入流类的根类,抽象类Writer是字符输出流的根类,它们实现字符的读写。1. Reader类Reader类中定义的方法主要有: public int read() 读取一个字符,返回范围为0到65535之间int型值,如果到达流的末尾返回-1。 public int read(char cbuf) 读取多个字符到字符数组cbuf中,如果到达流的末尾返回-1。 public int read(char cbuf, int off, int len) 读取len个字符存放到字符数组

46、从off开始的位置中。 public void mark(int readAheadLimit) 标记输入流的当前位置. public boolean markSupported() 测试输入流是否支持mark()方法。 public void reset() 重定位输出流。 public long skip(long n) 从输入流中最多向后跳n个字符,返回实际跳过的字符数。 public boolean ready() 返回输入流是否做好读的准备。 public void close() 关闭输入流。上述方法在发生I/O错误时都抛出IOException异常。2. Writer类Write

47、r类中定义的方法主要有: public void write(int c) 向输出流中写一个字符,实际是将int型的c的低16位写入输出流。 public void write(char cbuf) 把字符数组cbuf中的字符写入输出流。 public void write(char cbuf, int off, int len) 把字符数组cbuf中从off开始的len个字符写入输出流。 public void write(String str) 把字符串str写入输出流中。 public void write(String str, int off, int len) 把字符串str中从o

48、ff开始的len个字符写入输出流中。 public void flush() 刷新输出流。 public void close() 关闭输出流。2 FileReader和FileWriterFileReader类是文件输入流,FileWriter类是文件输出流。当操作的文件中是字符数据时,推荐使用这两个类。FileReader继承了InputStreamReader,构造方法为: public FileReader(String fileName) 用字符串表示的文件构造一个文件输入流对象。 public FileReader(File file) 用File对象表示的文件构造一个文件输入流对

49、象。 FileWriter继承了OutputStreamWriter,构造方法为: public FileWriter(String fileName) public FileWriter(File file) public FileWriter(String fileName, boolean append)第三个构造方法提供了append参数,指明是否可以向FileWriter追加数据。下面的CopyChars.java程序使用FileReader 和FileWriter 将文件input.txt 的内容复制到output.txt文件中:import java.io.*;public cl

50、ass CopyChars public static void main(String args) throws IOException File inputFile = new File("input.txt");File outputFile = new File("output.txt");FileReader in = new FileReader(inputFile);FileWriter out = new FileWriter(outputFile);int c;while (c = in.read() != -1)out.write(c

51、);in.close();out.close();_ 3 BufferedReader和BufferedWriterBufferedReader和BufferedWriter分别实现了具有缓冲功能的字符输入输出流。这两个类用来将其他的字符输入流包装成缓冲字符输入流,以提高读数据的效率。若不进行缓冲,每次调用read()或readLine()方法将从文件中读出字节,然后转换成字符再返回,这样效率会很低。BufferedReader类的构造方法如下: public BufferedReader(Reader in) 使用缺省的缓冲区大小创建缓冲字符输入流。 public BufferedReade

52、r(Reader in, int sz) 使用指定的缓冲区大小创建缓冲字符输入流。下面代码创建了一个BufferedReader对象:BufferedReader in = new BufferedReader(new FileReader("foo.in");BufferedReader类除重写了超类Reader类的方法外,还定义了下面的常用方法: public String readLine() 从输入流中读取一行文本。BufferedWriter类的构造方法如下: BufferedWriter(Writer out) 使用缺省的缓冲区大小创建缓冲字符输出流。 Buff

53、eredWriter(Writer out, int sz) 使用指定的缓冲区大小创建缓冲字符输出流。除继承Writer类的方法外,该类提供了一个void newLine() 方法,用来写一个行分隔符。它是系统属性line.separator定义的分隔符。通常Writer直接将输出发送到基本的字符或字节流,建议在Writer上(如FileWriter和OutputStreamWriter)包装BufferedWriter,例如:BufferedWriter br = new BufferedWriter(new FileWriter("foo.out");4 InputSt

54、reamReader和OutputStreamWriterInputStreamReader和OutputStreamWriter是从字节流向字符流转换的桥梁,它使用指定的字符集读写出字节并将它们解码成字符。字符集可以可用名字明确指出或使用平台缺省的字符集。 InputStreamReader(InputStream in) InputStreamReader(InputStream in, String charsetName) InputStreamReader(InputStream in, Charset cs)其中参数in为字节输入流对象;charsetName为字符串表示的字符编码

55、名称,cs为使用的字符集Charset对象。FileReader 和 FileWriter 读写16位字符,然而大多数本地文件系统是基于 8位字节的。这些流在操作时根据默认的编码方案编码。可以通过下列方法得到系统缺省的字符编码方案。System.getProperty("file.encoding");如果不使用默认的编码方案,可以在构造InputStreamReader和OutputStreamWriter对象时指定使用的编码。InputStreamReader类常用的方法有: public String getEncoding() 返回输入流正在使用的字符编码名。通过调

56、用System.getProperty(“file.encoding”)得到默认的字符编码。为了提高效率,一般将InputStreamReader用BufferedReader包装起来,如:BufferedReader in=new BufferedReader(new InputStreamReader(System.in);该语句将标准输入流对象System.in转换成字符输入流,然后再包装成缓冲字符输入流。 OutputStreamWriter是字节输出流向字符输出流转换的桥梁,它的构造方法如下: OutputStreamWriter(OutputStream out) OutputStreamWriter(OutputStream out, String charsetName) OutputStreamWriter(OutputStream ou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论