java输入输出流

来源:互联网 发布:ubuntu 16.04 ibus 编辑:程序博客网 时间:2024/06/04 18:44
File类:用来处理文件和文件夹:
    创建目录/文件:mkdir();        mkdirs();          createNewFile()
    判断是否存在:exists()
    删除:delete(),如果删除的一个目录下还有子目录是不会删除成功的。
    获取名称:getName();  获取路径:getParent();      获取父文件夹对象:getParentFile();重命名或者剪切:renameTo();
    获取子文件或目录的名字:list();    获取目下的所有File:listFiles();

 一、流:
    流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流。在java API中,可以从其中读取一个字节序列的对象称作输入流,而可以向其中写入一个字节序列的对象称为输出流。 
根据处理数据类型的不同分为:字符流和字节流 
根据数据流向不同分为:输入流和输出流 

根据流的作用可以分为:

        节点流:可以直接创建的流。

        过滤流:可以装饰节点流,可以让流的功能更加强大。在创建的时候必须提供一个具体的节点流。比如BufferedInputStream/DataOutputStream。

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。
字节流和字符流的区别:
读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

二、InputStream:
    InputStream是一个抽象类,它是所有输入字节流的父类。其中ByteArrayInputStream、FileInputStream和StringBufferInputStream是三种基本的介质流。而ObjectInputStream和FilterInputStream及其子类则是装饰流。
InputStream中包含的方法包括:int available()、void close()、void mark(int readlimit)、boolean markSupported()、abstract int read()、int read(byte[] b)、int read(byte[] b,int off,int len)、void reset()、long skip(long n)
1.ByteArrayInputStream:基本介质流,从一字节数组中读取字节。
ByteArrayInputStream(byte[] buf);
ByteArrayInputStream(byte[] buf,int offset,int length),输入流就是从这个buf中读取数据。
该流对应的就是ByteOutputStream,ByteoutputStream就是将数据以字节形式写出到字节数组中,我们可以通过ByteOutputStream类的toByteArray()方法获取输入到这个字节数组中的字节数组。
ByteArrayOutputStream();    ByteArrayOutputStream(int size);

public class TestFileInputStream {public static void main(String[] args){int a=5;ByteArrayOutputStream bos = new ByteArrayOutputStream();bos.write(a);bos.write(255);//将这个整数转换成对应的字节写到输出流中byte[] buff = bos.toByteArray();//获取输出流中的内容ByteArrayInputStream bis = new ByteArrayInputStream(buff);int b;while((b = bis.read()) != -1){System.out.println(b);}}}

2.FileInputStream:基本介质流,它实现从本地文件读取数据。FileInputStream(File file)
FileInputStream(FileDescriptor fdObj)
FileInputStream(String name)
3.StringBufferInputStream:基本介质流,已过时,最好使用StringReader.
4.PipedInputStream:
主要在线程中使用,一个线程通过管道输出流发送数据,而另一个线程通过管道输入流读取数据,这样可实现两个线程间的通讯。
5.SequenceInputStream:将2个或者多个InputStream 对象转变为一个InputStream.
6.ObjectInputStream:装饰流
7.FilterInputStream:装饰流,FilterInputStream实现了InputStream中read()方法,该方法是读取输入流的下一个数据字节,没有加更多的功能,另外它的构造方法是protected,这都注定了它只是一个中间类,它只是为了扩展输出流的功能,我们常用到的是它的子类:
DataInputStream(InputStream in):这个类除了是FilterInputStream的子类外,同时还实现了DataInput接口。该类允许从一个字节输入流中直接读取基本数据类型。
BufferedInputStream(InputStream in)/BufferedInputStream(InputStream in,int size):这个类实现了输入字节流动的缓冲功能。设计模式中透明装饰器的应用。
PushbackInputStream(InputStream in)/PushbackInputStream(InputStream in,int size):这个类增加了回退功能。

对于输入字节流,我们经常使用的是BufferedInputStream,它可以实现缓冲输入字节流,能大大提高效率。

三、OutputStream:
1.ByteArrayOutputStream:
2.FileOutputStream:
3.ObjectOutputStream:
4.PipedOutputStream:
5.FilterOutputStream
,有以下三个子类:

    DataOutputStream(OutputStream out)

    BufferedOutputStream(OutputStream out)/BufferedOutputStream(OutputStream out,int size)
    PrintStream:它有多个构造方法,可以输出各种数值表示形式,还可以实现字节流的格式输出。


import java.io.* ;public class PrintDemo02{ public static void main(String arg[]) throws Exception{ PrintStream ps = null ; // 声明打印流对象 // 如果现在是使用FileOuputStream实例化,意味着所有的输出是向文件之中 ps = new PrintStream(new FileOutputStream(new File("d:" +File.separator + "test.txt"))) ;String name = "李兴华" ; // 定义字符串 int age = 30 ; // 定义整数 float score = 990.356f ; // 定义小数 char sex = 'M' ; // 定义字符 ps.printf("姓名:%s;年龄:%d;成绩:%f;性别:%c",name,age,score,sex) ;ps.close() ; } };

四、Reader:字符输入流
1.CharArrayReader:实现从字节数组中读取数据,基本介质流
CharArrayReader(char array[ ])
CharArrayReader(char array[ ], int start, int numChars)
2.StringReader:实现从字符串中读取数据,基本介质流
StringReader(String s)
3.PipedReader:从与其他线程共享的管道中读取数据。
4.BufferedReader:实现缓冲功能BufferedReader(Reader in)/BufferedReader(Reader in,int size)
LineNumberReader:LineNumberReader(Reader in)/LineNumberReader(Reader in,int size)

public class BufferedReaderWriterDemo {public static void main(String[] args) {try{//缓冲System.in输入流//System.in是字节流,可以通过InputStreamReader将其转换为字符流BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in));//缓冲FileWriterBufferedWriter bufWriter = new BufferedWriter(new FileWriter(args[0]));String input = null;//每读一行进行一次写入动作                   while(!(input = bufReader.readLine()).equals("quit")){bufWriter.write(input);//newLine()方法写入与操作系统相依的换行字符,依执行环境当时的OS来决定该输出那种换行字符bufWriter.newLine();}bufReader.close();bufWriter.close();}catch(ArrayIndexOutOfBoundsException e){System.out.println("没有指定文件");}catch(IOException e){e.printStackTrace();}}}

5.InputStreamReader:实现将字节输入流转换到字符输入流,构造方法参数含有InputStream和字符集
       FileReader:实现直接读取文件,构造方法参数包含File和String

FileReader fr = new FileReader("ming.txt");   char[] buffer = new char[1024];  int ch = 0;   while((ch = fr.read())!=-1 ){    System.out.print((char)ch);   } 

6.FilterReader:
             PushbackReader:
五、Writer:字符输出流:
1.CharArrayWriter:基本的介质流,实现输出字符。
2.StringWriter:基本介质流,实现输出字符串。
3.PipedWriter:向与其他线程公用的管道中写数据。
4.BufferedWiter:为Writer提供缓存功能。
5.OutputStreamWriter:实现从字节输出流到字符流的转换,它有一个直接子类:
    FileWriter:此类实现直接向File中写入字符流。
6.PrintWriter:此方法是比较常用的一个方法,可以实现字符的格式输出。

0 0
原创粉丝点击