首页 > 其他 > 详细

输入输出流

时间:2014-12-15 23:28:47      阅读:313      评论:0      收藏:0      [点我收藏+]

输入:从文件读取到程序中 input read
输出:从程序输入到文件中 output write

节点流(原始流):管道直接连接数据源
处理流(包裹流):套在其他管道之上的称为处理流

字节流 字节为单位                               字符流 字符为单位
InputStream               Reader 
OutputStream                                  Writer

字节流:处理所有类型的数据          (图像,音频……)

字符流:只能处理字符型的数据       (处理纯文本数据时,优先选择字符流)

 

字节流:

InputStream ——从输入流(数据源)中读取数据
    read()
    继承InputStream
    FileInputStream
    StringBufferInputStream
    ByteArrayInputStream
    SequenceInputStream
    PipedInputStream
    FilterInputStream
    System.in

  FileInputStream

FileInputStream 读取文件中的信息,以文件作为数据来源——从文件读取的两种方式       第一种,中文字符会出现乱码   第二种,中中文不会出现乱码
        public class FileInputStreamDemo {
           public static void main(String[ ] args) throws IOException {
            try{
                    FileInputStream readFile = new FileInputStream("read.txt");//这个地方的路径有相对路径和绝对路劲
                    int intTemp = readFile.read( );
                    while(intTemp!=-1){
                      System.out.print((char)intTemp);
                      intTemp = readFile.read( );
                    }
                    readFile.close( );
                    }catch(IOException ex){

                    }        
                }
                
            try
            {
                FileInputStream readFile = new FileInputStream("read.txt");
                byte[ ]  buffer = new byte[2048];
                int  byteLength = readFile.read(buffer , 0 , 2048);
                String  str = new String(buffer , 0 , byteLength);
                System.out.println(str);
                readFile.close( );
            }catch(IOException ex){

            }    
        }

 

OutputStream——从用于程序中输出数据 向文件写入数据,第一个支持中文。 第二个不支持中文
  write() flush()
  先flush() 再close()
  继承OutputStream
  FileOutputStream
  ByteArrayOutputStream
  PipedOutputStream
  FilerOutputStream
  System.out

  FileOutputStream

public static void main(String[ ] args) throws IOException {

          try{

                FileOutputStream writeFile = new FileOutputStream("write.txt");
         /*可以指定从键盘输入*/ String s
= "happy new year!happy everyday!" +"\n"+"wish fulfillment!"+"\n"+"你好\nEnd of file stream\n"; byte[ ] bytes = s.getBytes( ); writeFile.write(bytes); //writeFile.write(bytes,0,s.length()); */ writeFile.close( ); }catch(IOException ex){ } try{ FileOutputStream writeFile = new FileOutputStream("write.txt"); String s = "happy new year!happy everyday!" +"\n"+"wish fulfillment!"+"\n"+"你好\nEnd of file stream\n"; for (int i = 0;i<s.length( );i++){ writeFile.write(s.charAt(i)); } writeFile.close( ); }catch(IOException ex){ } }

FilteredStream

FilterInputStream和FilterOutputStream,把输入流和输出流提供的功能扩大
    使用Filtered Stream提供的功能,必须首先提供Filter Stream加工的对象

    FilterInputStream
        BufferedInputStream extends FilterInputStream
            为读取的数据申请一份可用的缓冲区,用于提高输入处理的效率。
        DataInputStream extends FilterInputStream
            从流中读取基本型别(intchar、long等)的数据.
        DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(" c:\\Data.txt")  ) ) ;
    
    Filtered outputStream
        BufferedOutputStream extends FilteroutputStream
            调用flush( )来清除缓冲区内容。
        DataOutputStream extends FilteroutputStream
            将各种基本型别的数据写至流。
        DataOutputStream out =new DataOutputStream(new BufferedOutputStream(new FileOutputStream(“c:\\Data.txt") ))   ;

 

字符流:

Reader --继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符(16 bit);
  类 FileReader继承 InputStreamReader
  类 StringReader继承 Reader
  类 CharArrayReader 继承Reader

利用FileReader类读取纯文本文件”text.txt” 。 
    public static void main(String args[]) throws IOException{
    
        char c[ ]=new char[500];                    //创建可容纳500个字符的数组

        FileReader r=new FileReader("c:\\7\\test.txt");     //创建对象r

        int num=r.read(c);                      //将数据读入字符数组c内,并返回读取的字符数

        String str=new String(c,0,num);             //将字符串数组转换成字符串

        System.out.println("读取的字符个数为:"+num+",其内容如下:");

        System.out.println(str);
    }

 

Writer --输出数据到相应的输出流(输出的目标),写入到文件中
  flush()--刷空所有输出流,并输出所有被缓存的字节到相应的输出流。
  类 FileWriter 继承 OutputStreamWriter
  类 StringWriter 继承 Writer
  类 CharArrayWriter 继承 Writer

利用FileWriter类将字符数组与字符串写到文件里。
    public static void main(String args[]) throws IOException{
    
        FileWriter fw=new FileWriter("c:\\7\\test2.txt");
        char c[ ]={‘H‘,‘e‘,‘l‘,‘l‘,‘o‘,‘\r‘,‘\n‘};
        String str="欢迎使用Java!";
        fw.write(c);          //将字符数组写到文件里
        fw.write(str);        //将字符串写到文件里
        fw.close();  
    }

 

 

桥接类
InputStreamReader
  将InputStream转换为Reader;
OutputStreamWriter
  将OutputStream转换为Writer

 

BufferedReader
  BufferedReader 继承 Reader


    BufferedReader  stdIn =  new BufferedReader(new InputStreamReader(System.in))
    String  input = stdIn.readLine( ); 
    从文件中读取一行字符串:
        BufferedReader fileIn = new BufferedReader(new FileReader(filename));
        String  line =   fileIn.readLine();
        while (line != null)  {          
            line = fileIn.readLine( );
        }
    
    public class Demo {
      public static void main(String[ ] args) throws IOException{
          try{
                   BufferedReader fileIn =                                          
                  new BufferedReader(new FileReader("c:\\7\\2.txt"));
                   String  line =   fileIn.readLine( );
                   while (line != null)  {     
                      System.out.println(line);   
                      line = fileIn.readLine( );
                    }
                   }catch(IOException ex){
                }        
         }
    }

 

 

 

BufferedWriter
  BufferedWriter 继承 Writer

    BufferedWriter writer = new BufferedWriter(new FileWriter(“c:\\IODemo.out"))

    public static void main(String[ ] args) throws IOException{
        try{
            BufferedReader stdin =new BufferedReader(new      InputStreamReader(System.in)); 
            System.out.print("Enter a filename:");
            String s=stdin.readLine( );
            BufferedWriter out1 = new BufferedWriter(new FileWriter(s));
            System.out.print("输入5行数据结束!");
            for(int i =0;i<5;i++){
                s=stdin.readLine( );
                out1.write(s);
                out1.newLine( );
            }   
            out1.flush( );  
            out1.close( );
        }catch(IOException ex){
        
        }
    }

 

输入输出流

原文:http://www.cnblogs.com/lcpholdon/p/4166044.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!