JAVA随笔——File类与热键的使用

来源:互联网 发布:linux 解压命令 zip 编辑:程序博客网 时间:2024/05/17 00:59
 

数据流和文档操作2

过滤流

抽象的InputStreamOutputStream类允许我们对字串及数字进行读写。为达到这个目的,还需要功能更多的子类。例如:DateInputStreamDataOutputStream允许我们对所有基本的java类型进行读写。

    文件流类与抽象的InputStreamOutputStream类相似,这些类也只支持字节级的读写操作。换言之,只能从fin对象中读取字符和字节数组。byte b=fin.read(),他们没有提供专门的数值类型,所以DataInputStream没有办法从一个文件中获取数字。

解决方案:java给流职责分工,某些流(FileInputStream)负责从文件或另一些更特殊的地方读入字节数据。而另一些流

DataInputStreamPrintWriter)负责将字节“组装”成更有用的数据类型。必须综合运用这两种流,将其合并成所谓的"过滤流(FilteredStreams",方法是将一个现成的流传递给另一个流的构建器。

数据流

l DataInputStream

l DataOutputStream

//在文件中写入并读出人名及其工资

public class T1 {

public static void main(String[] args) {

String[] name = {"Tom","Jack","Mary"};

double[] salary = {300, 400, 1200}; 

try{

FileOutputStream fos = new FileOutputStream("res/salary.txt");

DataOutputStream dos = new DataOutputStream(fos);

for(int i=0; i<name.length; i++){

dos.writeUTF(name[i]);

dos.writeDouble(salary[i]);}

dos.close();

fos.close();

FileInputStream fin = new FileInputStream("res/salary.txt");

DataInputStream dis = new DataInputStream(fin);

for(int i=0; i<name.length; i++){

String n = dis.readUTF();

double s = dis.readDouble();

System.out.println(n + " : " + s);}

dis.close();

fin.close();

}catch(Exception e){

e.printStackTrace();

}}}

字节缓冲流

l BufferedInputStream

l BufferedOutputStrem

默认情况下,流不会进行缓冲。即每读一次,都会要求操作系统提供一个字节。通过BufferedInputStream

BufferedOutputStream对流构建器进行过滤分层,实现缓冲。

 1、构造函数:

BufferedInputStream(InputStream in)     

BufferedInputStream(InputStream in, int size) //size:缓冲区的大小   

 2、代码演示:  

BufferedInputStream bis=new BufferedInputStream(System.in);    

BufferedInputStream bis=new BufferedInputStream(System.in ,100);   

//用缓冲字节流实现文件读写

public class BufferedIOTest {

public static void main(String[] args) {

try{

FileOutputStream fos = new FileOutputStream("res/new.txt");

BufferedOutputStream bos = new BufferedOutputStream(fos);

DataOutputStream dos = new DataOutputStream(bos);

dos.writeUTF("good morning!");

dos.writeInt(250);

dos.close();

bos.close();

fos.close();

FileInputStream fis = new FileInputStream("res/new.txt");

             BufferedInputStream bis = new BufferedInputStream(fis);

DataInputStream dis = new DataInputStream(bis);

System.out.println(dis.readUTF() + "\n"+ dis.readInt());

dis.close();

bis.close();

fis.close();

}catch(Exception e){

e.printStackTrace();

}}}