您的位置:首页 > 编程语言 > Java开发

Java的输入输出系统

2014-09-24 20:55 316 查看
Java提供了专用于输入输出功能的包java.io,其中包含了5个非常重要的类,所有与输入输出有关的类都继承了这5个类

文件流 FileInputStream FileOutputStream

字节流 InputStream OutputStream

字符流 Reader Writer

过滤流 FilterInputStream FilterOutputStream

基本流 System.out System.in

按所读写的数据类型分为两类:

字节流类(Byte Streams):字节流类用于向字节流读写8位二进制的字节。一般地,字节流类主要用于读写诸如图像或声音等的二进制数据
字符流类(Character Streams):字符流类用于向字符流读写16位二进制字符

InputStream类

类中包含了一套所有输入流都需要的方法,可以完成最基本的从输入流读取数据的功能
当java程序需要从外设中读入数据时,先创建一个适当类型的输入流类对象来完成与外设的连接,然后再调用执行该新建对象的特定方法,实现对应外设的操作。

InputStream子类对象继承InputStream类的如下方法

read()方法、定位指针的方法、close()方法
public int read()

每次执行时都从输入流的当前位置读入一个字节的二进制数据,读数作为低字节,高字节用零填满,合成一个16位整型量返回,若输入流当前位置无数据返回-1

使用完毕后,应用close()方法关闭流

InputStream常用子类

FileInputStream

用于从文件File中将诸如图像数据之类的原始字节的数据流读出

ByteInputStream

此类实现了一个输入流,从一个byte数组中读出数据

ObjectInputStream

实现对象的持久存储,从OutputStream读入java对象的基本数据类型和图形

<span style="font-size:12px;">//使用FileInputStream从文件中读取字节流
//未考虑异常处理
import java.io.*;
public class TestFileInputStream {
public static void main(String[] args) throws Exception{
int b = 0;
long num = 0;
FileInputStream in = new FileInputStream("c://source.txt");//或"c:/source.txt"
while((b=in.read())!=-1){//一次读一个字节,判断是否读到文件结尾
System.out.print((char)b);
num++;
}
in.close();
System.out.println("\n共读取了 "+num+" 个字节");
}
}</span>


OutPutStream类

当java程序需要向某外设输出数据时,先要创建一个输出流类对象,通过该对象实现与外设的连接,再利用OutputStream类提供的方法将数据写入该外设中

OutputStream类是一个抽象类,不能直接创建OutputStream类对象,而应该创建它的某个子类的对象。

子类的继承方法有:

Write()方法、flush()方法和close()方法
public void write(int c); 将参数c对应的字符写入输出流
public void write(char array[]); 将字符数组array中全部字符顺序写入输出流
使用完毕后,应用close()方法关闭流

OutputStream常用子类

FileOutputStream

用于将诸如图像数据之类的原始字节的数据流写入File

ByteArrayOutputStream

此类实现了一个输出流,数据被写入一个byte数组

ObjectOutputStream

实现对象的持久储存,将java对象的基本数据类型和图形写入OutputStream

PipedOutputStream

将管道输出流连接到管道输入流来创建通信管道

<span style="font-size:12px;">//以字节流方式,将一个文件中的信息复制到另一个文件
//读入:程序<-FileInputStream<-文件(信息源)
//写出:程序->FileOutputStream->文件(信息去向)
//未考虑异常处理
import java.io.*;
public class TestFileCopy_Stream {
public static void main(String[] args)throws Exception {
int b = 0;
FileInputStream in = null;
FileOutputStream out = null;

//数据源,用于向程序中读取信息
in = new FileInputStream("e://source.txt");
//目标文件,程序将信息写到此文件中,会自动创建文件
out = new FileOutputStream("e://dest.txt");
while((b=in.read())!=-1){//一次读一个字节,判断是否读到文件结尾
out.write(b);//一次写一个字节
}
in.close();
out.close();

System.out.println("文件已复制");
}
}</span>


Reader类

用来以字符方式从流中读入数据。Reader类中包含了一套所有字符输入流都需要的方法,可以完成最基本的从字符输入流读取数据的功能
Reader类是一个抽象类,所以实际应用中创建的对象是Reader某个子类的对象,通过该子类对象与外接数据源连接

子类必须实现的方法只有
int read(char[] b,int offset,int length);
void close();

当输入流使用完毕后,可以调用该方法将其关闭,断开java程序与外接数据源的联系,释放此连接所占用的系统资源

Reader类常用子类

BufferedReader

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取

可以指定缓冲区的大小

InputStreamReader

字节流通向字符流的桥梁:它使用指定的charset读取字节并将其解码为字符

每次调用InputStreamReader的read()方法都会导致从底层输入流读取一个或多个字节

FileReader

用来读取字符文件的类

用于读取字符流

Writer类

用来以字符方式从流中写入数据。Writer类中包含了一套所有字符输出流都需要的方法,可以完成最基本的向字符输出流写入数据的功能
Writer类是一个抽象类,所以实际应用中创建的对象是Writer某个子类的对象,通过该子类对象与外接数据源连接

子类必须实现的方法只有
void write(char[] b,int offset,int length);
void close();
void flush();//强制清空缓冲区
当输出流使用完毕后,关闭输出流,断开java程序与外接数据源的连接,释放此连接所占用的系统资源

Writer类常用子类

BufferedWriterStream

将文本写入字符输出流,缓冲各个字符

可以指定缓冲区的大小

OutputStreamWriter

字符流通向字节流的桥梁:它使用指定的charset将要写入流中的字符编码为字节

每次调用write()方法都会导致在给定字符(或字符集)上调用编码转换器

FileWriter

用来写入字符文件的类

文件是否可用或是否可以被创建取决于底层平台

PrintWriter

向文本输出流打印对象的格式化表示形式

<span style="font-size:12px;">//输入字符串、浮点数、整数在屏幕上显示输入结果
//输入流的套接使用,
//System.in -> InputStreamReader -> BufferedReader
import  java.io.*;
public  class standardIO3{
public static void main(String[] args) throws IOException{
//使用System.in创建InputStreamReader类对象ii
InputStreamReader iin=new InputStreamReader(System.in);
//创建BufferedReader类对象bin,并关联到iin
BufferedReader bin=new BufferedReader(iin);

//或者合并写成如下
//BufferedReader stdin= new BufferedReader( new InputStreamReader(System.in));

String  s;
float   f;
int i=0;

System.out.println("输入任一字符串");
s=bin.readLine();
System.out.println("输入浮点数");
f=Float.parseFloat(bin.readLine());
System.out.println("输入整数");
i=Integer.parseInt(bin.readLine());

System.out.println("输入的字符串:"+s);
System.out.println("输入的浮点数:"+f);
System.out.println("输入的整数:"+i);
}
} </span>


文件处理

File类

File(String pathname)

通过将给定路径名字符串转换为抽象路径名来创建一个新File实例

exists()

测试此抽象路径名表示的文件或目录是否存在

canRead()

测试应用程序是否可以读取此抽象路径名表示的文件

listFiles()

返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件

mkdir()

创建此抽象路径名指定的目录

使用BufferWriter类的方法:

为文件建立FileWriter对象
再为该FileWriter对象建立BufferWriter类对象
写入操作将使用所建立的BufferWriter类对象

向磁盘文件写入各类数据

java通过DataInputStream & DataOutputStream类实现各类数据的读写。向文件写入各种类型数据的具体步骤是:
为磁盘文件建立File对象
为File对象建立FileOutputStream类流对象,建立其与磁盘文件的连接
为FileOutputStream类流对象建立DataOutputStream类对象
利用DataOutputStream类的writeInt(),writeFloat(),writeDouble(),writeBoolean()等方法,分别向文件中写入整型、单精度型、双精度型、布尔型等数据
写入操作完成后,利用close()方法将流关闭,断开与磁盘文件的联系

基本流

java系统预先定义好3个流对象,分别表示标准输入设备、标准输出设备和标准错误设备。

System.in : 用于程序的输入; 对应外设为键盘
System.out : 用于一般输出; 对应外设为屏幕
System.err : 用于显示出错信息; 对应外设为屏幕

System类的所有属性都是静态static的,调用时以类名System为前缀。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: